Skip to content

Commit c43a248

Browse files
MadCodergitster
authored andcommitted
Force the sticked form for options with optional arguments.
This forbids "git tag -n <number> -l" we allowed earlier, so adjust t7004 while at it. Signed-off-by: Pierre Habouzit <madcoder@debian.org>
1 parent 5e2de4f commit c43a248

File tree

2 files changed

+51
-51
lines changed

2 files changed

+51
-51
lines changed

parse-options.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ static int get_value(struct optparse_t *p,
8989
*(const char **)opt->value = NULL;
9090
return 0;
9191
}
92-
if (opt->flags & PARSE_OPT_OPTARG && (!arg || *arg == '-')) {
92+
if (opt->flags & PARSE_OPT_OPTARG && !p->opt) {
9393
*(const char **)opt->value = (const char *)opt->defval;
9494
return 0;
9595
}
@@ -103,7 +103,7 @@ static int get_value(struct optparse_t *p,
103103
return (*opt->callback)(opt, NULL, 1);
104104
if (opt->flags & PARSE_OPT_NOARG)
105105
return (*opt->callback)(opt, NULL, 0);
106-
if (opt->flags & PARSE_OPT_OPTARG && (!arg || *arg == '-'))
106+
if (opt->flags & PARSE_OPT_OPTARG && !p->opt)
107107
return (*opt->callback)(opt, NULL, 0);
108108
if (!arg)
109109
return opterror(opt, "requires a value", flags);
@@ -114,7 +114,7 @@ static int get_value(struct optparse_t *p,
114114
*(int *)opt->value = 0;
115115
return 0;
116116
}
117-
if (opt->flags & PARSE_OPT_OPTARG && (!arg || !isdigit(*arg))) {
117+
if (opt->flags & PARSE_OPT_OPTARG && !p->opt) {
118118
*(int *)opt->value = opt->defval;
119119
return 0;
120120
}

t/t7004-tag.sh

Lines changed: 48 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -491,21 +491,21 @@ test_expect_success \
491491
echo "tag-one-line" >expect &&
492492
git-tag -l | grep "^tag-one-line" >actual &&
493493
git diff expect actual &&
494-
git-tag -n 0 -l | grep "^tag-one-line" >actual &&
494+
git-tag -n0 -l | grep "^tag-one-line" >actual &&
495495
git diff expect actual &&
496-
git-tag -n 0 -l tag-one-line >actual &&
496+
git-tag -n0 -l tag-one-line >actual &&
497497
git diff expect actual &&
498498
499499
echo "tag-one-line A msg" >expect &&
500-
git-tag -n 1 -l | grep "^tag-one-line" >actual &&
500+
git-tag -n1 -l | grep "^tag-one-line" >actual &&
501501
git diff expect actual &&
502502
git-tag -n -l | grep "^tag-one-line" >actual &&
503503
git diff expect actual &&
504-
git-tag -n 1 -l tag-one-line >actual &&
504+
git-tag -n1 -l tag-one-line >actual &&
505505
git diff expect actual &&
506-
git-tag -n 2 -l tag-one-line >actual &&
506+
git-tag -n2 -l tag-one-line >actual &&
507507
git diff expect actual &&
508-
git-tag -n 999 -l tag-one-line >actual &&
508+
git-tag -n999 -l tag-one-line >actual &&
509509
git diff expect actual
510510
'
511511

@@ -516,21 +516,21 @@ test_expect_success \
516516
echo "tag-zero-lines" >expect &&
517517
git-tag -l | grep "^tag-zero-lines" >actual &&
518518
git diff expect actual &&
519-
git-tag -n 0 -l | grep "^tag-zero-lines" >actual &&
519+
git-tag -n0 -l | grep "^tag-zero-lines" >actual &&
520520
git diff expect actual &&
521-
git-tag -n 0 -l tag-zero-lines >actual &&
521+
git-tag -n0 -l tag-zero-lines >actual &&
522522
git diff expect actual &&
523523
524524
echo "tag-zero-lines " >expect &&
525-
git-tag -n 1 -l | grep "^tag-zero-lines" >actual &&
525+
git-tag -n1 -l | grep "^tag-zero-lines" >actual &&
526526
git diff expect actual &&
527527
git-tag -n -l | grep "^tag-zero-lines" >actual &&
528528
git diff expect actual &&
529-
git-tag -n 1 -l tag-zero-lines >actual &&
529+
git-tag -n1 -l tag-zero-lines >actual &&
530530
git diff expect actual &&
531-
git-tag -n 2 -l tag-zero-lines >actual &&
531+
git-tag -n2 -l tag-zero-lines >actual &&
532532
git diff expect actual &&
533-
git-tag -n 999 -l tag-zero-lines >actual &&
533+
git-tag -n999 -l tag-zero-lines >actual &&
534534
git diff expect actual
535535
'
536536

@@ -544,37 +544,37 @@ test_expect_success \
544544
echo "tag-lines" >expect &&
545545
git-tag -l | grep "^tag-lines" >actual &&
546546
git diff expect actual &&
547-
git-tag -n 0 -l | grep "^tag-lines" >actual &&
547+
git-tag -n0 -l | grep "^tag-lines" >actual &&
548548
git diff expect actual &&
549-
git-tag -n 0 -l tag-lines >actual &&
549+
git-tag -n0 -l tag-lines >actual &&
550550
git diff expect actual &&
551551
552552
echo "tag-lines tag line one" >expect &&
553-
git-tag -n 1 -l | grep "^tag-lines" >actual &&
553+
git-tag -n1 -l | grep "^tag-lines" >actual &&
554554
git diff expect actual &&
555555
git-tag -n -l | grep "^tag-lines" >actual &&
556556
git diff expect actual &&
557-
git-tag -n 1 -l tag-lines >actual &&
557+
git-tag -n1 -l tag-lines >actual &&
558558
git diff expect actual &&
559559
560560
echo " tag line two" >>expect &&
561-
git-tag -n 2 -l | grep "^ *tag.line" >actual &&
561+
git-tag -n2 -l | grep "^ *tag.line" >actual &&
562562
git diff expect actual &&
563-
git-tag -n 2 -l tag-lines >actual &&
563+
git-tag -n2 -l tag-lines >actual &&
564564
git diff expect actual &&
565565
566566
echo " tag line three" >>expect &&
567-
git-tag -n 3 -l | grep "^ *tag.line" >actual &&
567+
git-tag -n3 -l | grep "^ *tag.line" >actual &&
568568
git diff expect actual &&
569-
git-tag -n 3 -l tag-lines >actual &&
569+
git-tag -n3 -l tag-lines >actual &&
570570
git diff expect actual &&
571-
git-tag -n 4 -l | grep "^ *tag.line" >actual &&
571+
git-tag -n4 -l | grep "^ *tag.line" >actual &&
572572
git diff expect actual &&
573-
git-tag -n 4 -l tag-lines >actual &&
573+
git-tag -n4 -l tag-lines >actual &&
574574
git diff expect actual &&
575-
git-tag -n 99 -l | grep "^ *tag.line" >actual &&
575+
git-tag -n99 -l | grep "^ *tag.line" >actual &&
576576
git diff expect actual &&
577-
git-tag -n 99 -l tag-lines >actual &&
577+
git-tag -n99 -l tag-lines >actual &&
578578
git diff expect actual
579579
'
580580

@@ -902,21 +902,21 @@ test_expect_success \
902902
echo "stag-one-line" >expect &&
903903
git-tag -l | grep "^stag-one-line" >actual &&
904904
git diff expect actual &&
905-
git-tag -n 0 -l | grep "^stag-one-line" >actual &&
905+
git-tag -n0 -l | grep "^stag-one-line" >actual &&
906906
git diff expect actual &&
907-
git-tag -n 0 -l stag-one-line >actual &&
907+
git-tag -n0 -l stag-one-line >actual &&
908908
git diff expect actual &&
909909
910910
echo "stag-one-line A message line signed" >expect &&
911-
git-tag -n 1 -l | grep "^stag-one-line" >actual &&
911+
git-tag -n1 -l | grep "^stag-one-line" >actual &&
912912
git diff expect actual &&
913913
git-tag -n -l | grep "^stag-one-line" >actual &&
914914
git diff expect actual &&
915-
git-tag -n 1 -l stag-one-line >actual &&
915+
git-tag -n1 -l stag-one-line >actual &&
916916
git diff expect actual &&
917-
git-tag -n 2 -l stag-one-line >actual &&
917+
git-tag -n2 -l stag-one-line >actual &&
918918
git diff expect actual &&
919-
git-tag -n 999 -l stag-one-line >actual &&
919+
git-tag -n999 -l stag-one-line >actual &&
920920
git diff expect actual
921921
'
922922

@@ -927,21 +927,21 @@ test_expect_success \
927927
echo "stag-zero-lines" >expect &&
928928
git-tag -l | grep "^stag-zero-lines" >actual &&
929929
git diff expect actual &&
930-
git-tag -n 0 -l | grep "^stag-zero-lines" >actual &&
930+
git-tag -n0 -l | grep "^stag-zero-lines" >actual &&
931931
git diff expect actual &&
932-
git-tag -n 0 -l stag-zero-lines >actual &&
932+
git-tag -n0 -l stag-zero-lines >actual &&
933933
git diff expect actual &&
934934
935935
echo "stag-zero-lines " >expect &&
936-
git-tag -n 1 -l | grep "^stag-zero-lines" >actual &&
936+
git-tag -n1 -l | grep "^stag-zero-lines" >actual &&
937937
git diff expect actual &&
938938
git-tag -n -l | grep "^stag-zero-lines" >actual &&
939939
git diff expect actual &&
940-
git-tag -n 1 -l stag-zero-lines >actual &&
940+
git-tag -n1 -l stag-zero-lines >actual &&
941941
git diff expect actual &&
942-
git-tag -n 2 -l stag-zero-lines >actual &&
942+
git-tag -n2 -l stag-zero-lines >actual &&
943943
git diff expect actual &&
944-
git-tag -n 999 -l stag-zero-lines >actual &&
944+
git-tag -n999 -l stag-zero-lines >actual &&
945945
git diff expect actual
946946
'
947947

@@ -955,37 +955,37 @@ test_expect_success \
955955
echo "stag-lines" >expect &&
956956
git-tag -l | grep "^stag-lines" >actual &&
957957
git diff expect actual &&
958-
git-tag -n 0 -l | grep "^stag-lines" >actual &&
958+
git-tag -n0 -l | grep "^stag-lines" >actual &&
959959
git diff expect actual &&
960-
git-tag -n 0 -l stag-lines >actual &&
960+
git-tag -n0 -l stag-lines >actual &&
961961
git diff expect actual &&
962962
963963
echo "stag-lines stag line one" >expect &&
964-
git-tag -n 1 -l | grep "^stag-lines" >actual &&
964+
git-tag -n1 -l | grep "^stag-lines" >actual &&
965965
git diff expect actual &&
966966
git-tag -n -l | grep "^stag-lines" >actual &&
967967
git diff expect actual &&
968-
git-tag -n 1 -l stag-lines >actual &&
968+
git-tag -n1 -l stag-lines >actual &&
969969
git diff expect actual &&
970970
971971
echo " stag line two" >>expect &&
972-
git-tag -n 2 -l | grep "^ *stag.line" >actual &&
972+
git-tag -n2 -l | grep "^ *stag.line" >actual &&
973973
git diff expect actual &&
974-
git-tag -n 2 -l stag-lines >actual &&
974+
git-tag -n2 -l stag-lines >actual &&
975975
git diff expect actual &&
976976
977977
echo " stag line three" >>expect &&
978-
git-tag -n 3 -l | grep "^ *stag.line" >actual &&
978+
git-tag -n3 -l | grep "^ *stag.line" >actual &&
979979
git diff expect actual &&
980-
git-tag -n 3 -l stag-lines >actual &&
980+
git-tag -n3 -l stag-lines >actual &&
981981
git diff expect actual &&
982-
git-tag -n 4 -l | grep "^ *stag.line" >actual &&
982+
git-tag -n4 -l | grep "^ *stag.line" >actual &&
983983
git diff expect actual &&
984-
git-tag -n 4 -l stag-lines >actual &&
984+
git-tag -n4 -l stag-lines >actual &&
985985
git diff expect actual &&
986-
git-tag -n 99 -l | grep "^ *stag.line" >actual &&
986+
git-tag -n99 -l | grep "^ *stag.line" >actual &&
987987
git diff expect actual &&
988-
git-tag -n 99 -l stag-lines >actual &&
988+
git-tag -n99 -l stag-lines >actual &&
989989
git diff expect actual
990990
'
991991

0 commit comments

Comments
 (0)