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>
Pierre Habouzit committed
Dec 21, 2007 at 11:41 UTC
c43a24834a9babd3ddd9c27ccc81174c2cb36859
2 files changed
+51
-51
parse-options.c
+3
-3
@@ -89,7 +89,7 @@ static int get_value(struct optparse_t *p,
89
*(const char **)opt->value = NULL;
90
return 0;
91
}
92
- if (opt->flags & PARSE_OPT_OPTARG && (!arg || *arg == '-')) {
92
+ if (opt->flags & PARSE_OPT_OPTARG && !p->opt) {
93
*(const char **)opt->value = (const char *)opt->defval;
94
return 0;
95
}
@@ -103,7 +103,7 @@ static int get_value(struct optparse_t *p,
103
return (*opt->callback)(opt, NULL, 1);
104
if (opt->flags & PARSE_OPT_NOARG)
105
return (*opt->callback)(opt, NULL, 0);
106
- if (opt->flags & PARSE_OPT_OPTARG && (!arg || *arg == '-'))
106
+ if (opt->flags & PARSE_OPT_OPTARG && !p->opt)
107
return (*opt->callback)(opt, NULL, 0);
108
if (!arg)
109
return opterror(opt, "requires a value", flags);
@@ -114,7 +114,7 @@ static int get_value(struct optparse_t *p,
114
*(int *)opt->value = 0;
115
return 0;
116
}
117
- if (opt->flags & PARSE_OPT_OPTARG && (!arg || !isdigit(*arg))) {
117
+ if (opt->flags & PARSE_OPT_OPTARG && !p->opt) {
118
*(int *)opt->value = opt->defval;
119
return 0;
120
}
t/t7004-tag.sh
+48
-48
@@ -491,21 +491,21 @@ test_expect_success \
491
echo "tag-one-line" >expect &&
492
git-tag -l | grep "^tag-one-line" >actual &&
493
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 &&
495
git diff expect actual &&
496
- git-tag -n 0 -l tag-one-line >actual &&
496
+ git-tag -n0 -l tag-one-line >actual &&
497
git diff expect actual &&
498
499
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 &&
501
git diff expect actual &&
502
git-tag -n -l | grep "^tag-one-line" >actual &&
503
git diff expect actual &&
504
- git-tag -n 1 -l tag-one-line >actual &&
504
+ git-tag -n1 -l tag-one-line >actual &&
505
git diff expect actual &&
506
- git-tag -n 2 -l tag-one-line >actual &&
506
+ git-tag -n2 -l tag-one-line >actual &&
507
git diff expect actual &&
508
- git-tag -n 999 -l tag-one-line >actual &&
508
+ git-tag -n999 -l tag-one-line >actual &&
509
git diff expect actual
510
'
511
@@ -516,21 +516,21 @@ test_expect_success \
516
echo "tag-zero-lines" >expect &&
517
git-tag -l | grep "^tag-zero-lines" >actual &&
518
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 &&
520
git diff expect actual &&
521
- git-tag -n 0 -l tag-zero-lines >actual &&
521
+ git-tag -n0 -l tag-zero-lines >actual &&
522
git diff expect actual &&
523
524
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 &&
526
git diff expect actual &&
527
git-tag -n -l | grep "^tag-zero-lines" >actual &&
528
git diff expect actual &&
529
- git-tag -n 1 -l tag-zero-lines >actual &&
529
+ git-tag -n1 -l tag-zero-lines >actual &&
530
git diff expect actual &&
531
- git-tag -n 2 -l tag-zero-lines >actual &&
531
+ git-tag -n2 -l tag-zero-lines >actual &&
532
git diff expect actual &&
533
- git-tag -n 999 -l tag-zero-lines >actual &&
533
+ git-tag -n999 -l tag-zero-lines >actual &&
534
git diff expect actual
535
'
536
@@ -544,37 +544,37 @@ test_expect_success \
544
echo "tag-lines" >expect &&
545
git-tag -l | grep "^tag-lines" >actual &&
546
git diff expect actual &&
547
- git-tag -n 0 -l | grep "^tag-lines" >actual &&
547
+ git-tag -n0 -l | grep "^tag-lines" >actual &&
548
git diff expect actual &&
549
- git-tag -n 0 -l tag-lines >actual &&
549
+ git-tag -n0 -l tag-lines >actual &&
550
git diff expect actual &&
551
552
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 &&
554
git diff expect actual &&
555
git-tag -n -l | grep "^tag-lines" >actual &&
556
git diff expect actual &&
557
- git-tag -n 1 -l tag-lines >actual &&
557
+ git-tag -n1 -l tag-lines >actual &&
558
git diff expect actual &&
559
560
echo " tag line two" >>expect &&
561
- git-tag -n 2 -l | grep "^ *tag.line" >actual &&
561
+ git-tag -n2 -l | grep "^ *tag.line" >actual &&
562
git diff expect actual &&
563
- git-tag -n 2 -l tag-lines >actual &&
563
+ git-tag -n2 -l tag-lines >actual &&
564
git diff expect actual &&
565
566
echo " tag line three" >>expect &&
567
- git-tag -n 3 -l | grep "^ *tag.line" >actual &&
567
+ git-tag -n3 -l | grep "^ *tag.line" >actual &&
568
git diff expect actual &&
569
- git-tag -n 3 -l tag-lines >actual &&
569
+ git-tag -n3 -l tag-lines >actual &&
570
git diff expect actual &&
571
- git-tag -n 4 -l | grep "^ *tag.line" >actual &&
571
+ git-tag -n4 -l | grep "^ *tag.line" >actual &&
572
git diff expect actual &&
573
- git-tag -n 4 -l tag-lines >actual &&
573
+ git-tag -n4 -l tag-lines >actual &&
574
git diff expect actual &&
575
- git-tag -n 99 -l | grep "^ *tag.line" >actual &&
575
+ git-tag -n99 -l | grep "^ *tag.line" >actual &&
576
git diff expect actual &&
577
- git-tag -n 99 -l tag-lines >actual &&
577
+ git-tag -n99 -l tag-lines >actual &&
578
git diff expect actual
579
'
580
@@ -902,21 +902,21 @@ test_expect_success \
902
echo "stag-one-line" >expect &&
903
git-tag -l | grep "^stag-one-line" >actual &&
904
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 &&
906
git diff expect actual &&
907
- git-tag -n 0 -l stag-one-line >actual &&
907
+ git-tag -n0 -l stag-one-line >actual &&
908
git diff expect actual &&
909
910
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 &&
912
git diff expect actual &&
913
git-tag -n -l | grep "^stag-one-line" >actual &&
914
git diff expect actual &&
915
- git-tag -n 1 -l stag-one-line >actual &&
915
+ git-tag -n1 -l stag-one-line >actual &&
916
git diff expect actual &&
917
- git-tag -n 2 -l stag-one-line >actual &&
917
+ git-tag -n2 -l stag-one-line >actual &&
918
git diff expect actual &&
919
- git-tag -n 999 -l stag-one-line >actual &&
919
+ git-tag -n999 -l stag-one-line >actual &&
920
git diff expect actual
921
'
922
@@ -927,21 +927,21 @@ test_expect_success \
927
echo "stag-zero-lines" >expect &&
928
git-tag -l | grep "^stag-zero-lines" >actual &&
929
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 &&
931
git diff expect actual &&
932
- git-tag -n 0 -l stag-zero-lines >actual &&
932
+ git-tag -n0 -l stag-zero-lines >actual &&
933
git diff expect actual &&
934
935
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 &&
937
git diff expect actual &&
938
git-tag -n -l | grep "^stag-zero-lines" >actual &&
939
git diff expect actual &&
940
- git-tag -n 1 -l stag-zero-lines >actual &&
940
+ git-tag -n1 -l stag-zero-lines >actual &&
941
git diff expect actual &&
942
- git-tag -n 2 -l stag-zero-lines >actual &&
942
+ git-tag -n2 -l stag-zero-lines >actual &&
943
git diff expect actual &&
944
- git-tag -n 999 -l stag-zero-lines >actual &&
944
+ git-tag -n999 -l stag-zero-lines >actual &&
945
git diff expect actual
946
'
947
@@ -955,37 +955,37 @@ test_expect_success \
955
echo "stag-lines" >expect &&
956
git-tag -l | grep "^stag-lines" >actual &&
957
git diff expect actual &&
958
- git-tag -n 0 -l | grep "^stag-lines" >actual &&
958
+ git-tag -n0 -l | grep "^stag-lines" >actual &&
959
git diff expect actual &&
960
- git-tag -n 0 -l stag-lines >actual &&
960
+ git-tag -n0 -l stag-lines >actual &&
961
git diff expect actual &&
962
963
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 &&
965
git diff expect actual &&
966
git-tag -n -l | grep "^stag-lines" >actual &&
967
git diff expect actual &&
968
- git-tag -n 1 -l stag-lines >actual &&
968
+ git-tag -n1 -l stag-lines >actual &&
969
git diff expect actual &&
970
971
echo " stag line two" >>expect &&
972
- git-tag -n 2 -l | grep "^ *stag.line" >actual &&
972
+ git-tag -n2 -l | grep "^ *stag.line" >actual &&
973
git diff expect actual &&
974
- git-tag -n 2 -l stag-lines >actual &&
974
+ git-tag -n2 -l stag-lines >actual &&
975
git diff expect actual &&
976
977
echo " stag line three" >>expect &&
978
- git-tag -n 3 -l | grep "^ *stag.line" >actual &&
978
+ git-tag -n3 -l | grep "^ *stag.line" >actual &&
979
git diff expect actual &&
980
- git-tag -n 3 -l stag-lines >actual &&
980
+ git-tag -n3 -l stag-lines >actual &&
981
git diff expect actual &&
982
- git-tag -n 4 -l | grep "^ *stag.line" >actual &&
982
+ git-tag -n4 -l | grep "^ *stag.line" >actual &&
983
git diff expect actual &&
984
- git-tag -n 4 -l stag-lines >actual &&
984
+ git-tag -n4 -l stag-lines >actual &&
985
git diff expect actual &&
986
- git-tag -n 99 -l | grep "^ *stag.line" >actual &&
986
+ git-tag -n99 -l | grep "^ *stag.line" >actual &&
987
git diff expect actual &&
988
- git-tag -n 99 -l stag-lines >actual &&
988
+ git-tag -n99 -l stag-lines >actual &&
989
git diff expect actual
990
'
991