Browse Source

for-each-ref: Fix quoting style constants.

for-each-ref can accept only one quoting style. For this reason it uses
OPT_BIT for the quoting style switches so that it is easy to check for
more than one bit being set. However, not all symbolic constants were
actually single bit values. In particular:

    $ git for-each-ref --python
    error: more than one quoting style ?

This fixes it.

While we are here, let's also remove the space before the question mark.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Johannes Sixt 17 years ago committed by Junio C Hamano
parent
commit
c9ecf4f12a
  1. 6
      builtin-for-each-ref.c
  2. 39
      t/t6300-for-each-ref.sh

6
builtin-for-each-ref.c

@ -13,8 +13,8 @@
#define QUOTE_NONE 0 #define QUOTE_NONE 0
#define QUOTE_SHELL 1 #define QUOTE_SHELL 1
#define QUOTE_PERL 2 #define QUOTE_PERL 2
#define QUOTE_PYTHON 3 #define QUOTE_PYTHON 4
#define QUOTE_TCL 4 #define QUOTE_TCL 8


typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type; typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type;


@ -861,7 +861,7 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
usage_with_options(for_each_ref_usage, opts); usage_with_options(for_each_ref_usage, opts);
} }
if (HAS_MULTI_BITS(quote_style)) { if (HAS_MULTI_BITS(quote_style)) {
error("more than one quoting style ?"); error("more than one quoting style?");
usage_with_options(for_each_ref_usage, opts); usage_with_options(for_each_ref_usage, opts);
} }
if (verify_format(format)) if (verify_format(format))

39
t/t6300-for-each-ref.sh

@ -169,5 +169,44 @@ test_expect_success 'Verify descending sort' '
git diff expected actual git diff expected actual
' '


cat >expected <<\EOF
'refs/heads/master'
'refs/tags/testtag'
EOF

test_expect_success 'Quoting style: shell' '
git for-each-ref --shell --format="%(refname)" >actual &&
git diff expected actual
'

test_expect_success 'Quoting style: perl' '
git for-each-ref --perl --format="%(refname)" >actual &&
git diff expected actual
'

test_expect_success 'Quoting style: python' '
git for-each-ref --python --format="%(refname)" >actual &&
git diff expected actual
'

cat >expected <<\EOF
"refs/heads/master"
"refs/tags/testtag"
EOF

test_expect_success 'Quoting style: tcl' '
git for-each-ref --tcl --format="%(refname)" >actual &&
git diff expected actual
'

for i in "--perl --shell" "-s --python" "--python --tcl" "--tcl --perl"; do
test_expect_success "more than one quoting style: $i" "
git for-each-ref $i 2>&1 | (read line &&
case \$line in
\"error: more than one quoting style\"*) : happy;;
*) false
esac)
"
done


test_done test_done

Loading…
Cancel
Save