Re: [add-default-config 5/5] fix return code on default + add tests
From: Jeff King <hidden>
Date: 2017-11-12 16:04:19
On Sun, Nov 12, 2017 at 03:00:40PM +0000, Soukaina NAIT HMID wrote:
quoted hunk ↗ jump to hunk
diff --git a/builtin/config.c b/builtin/config.c index eab81c5627091..29c5f55f27a57 100644 --- a/builtin/config.c +++ b/builtin/config.c@@ -261,9 +261,12 @@ static int get_value(const char *key_, const char *regex_) if (values.nr == 0 && default_value) { if(types == TYPE_INT || types == TYPE_BOOL || types == TYPE_BOOL_OR_INT || types == TYPE_PATH ) { - char* xstr = normalize_value(key, default_value); - fwrite(xstr, 1, strlen(xstr), stdout); - fwrite("\n", 1, 1, stdout); + if(strlen(default_value)) { + char* xstr = normalize_value(key, default_value); + fwrite(xstr, 1, strlen(xstr), stdout); + fwrite("\n", 1, 1, stdout); + ret = 0; + } }
OK, fixing up the return value is a good thing (though again, I think if we place our default_value in the list earlier that will just fall out naturally). I'm not sure why we care if the default_value string is empty or not. It should be allowed to default to an empty string, I'd think.
quoted hunk ↗ jump to hunk
diff --git a/t/t9904-default.sh b/t/t9904-default.sh new file mode 100755 index 0000000000000..8e838f512298b --- /dev/null +++ b/t/t9904-default.sh
We usually try to group tests with similar-numbered ones. Most of the config tests are in the t13xx area. Probably "t1310-config-default.sh" would be the right place (or if there really are just a few tests, which I think may be all we need, they can just go into t1300).
+boolean()
+{
+ slot=$([ "$#" == 3 ] && echo $3 || echo "no.such.slot") &&
+ actual=$(git config --default "$1" --bool "$slot") &&
+ test "$actual" = "$2"
+}
A minor style nit, but we usually prefer "test" instead of "[" for
conditionals. It took me a while to figure out how this function was
meant to be used. It might be worth adding a comment. Though most of it
was due to the first line, which I think can just be written as:
slot=${3:-no.such.slot}
(or you could even just write that directly in the second line).
That's a bit more idiomatic for our shell scripts.
+test_expect_success 'empty value for boolean' ' + invalid_boolean "" +'
There are a lot of tests here about type interpretation, but I think
that should be largely orthogonal to the --default feature. Once it's
written in a way that's independent of the type, I think we can assume
that if "--default" works for one type, it should work with others
without being exhaustive.
So I think what we really want to test from this series is:
1. --default kicks in when no matching config is found
2. --default does not kick in when config _is_ found
3. (optional) we complain about --default with non-get actions
4. --color works as a type for "get" operations
5. --color is not normalized for "set" operations; if you do:
git config --color some.key red
we should write "red" into the config file, not the ANSI codes.
I know the reason you were looking into t4026 originally because it was
the only spot that used --get-color in the whole test suite. But its use
of "--get-color" is largely orthogonal to what it's testing. It cares
about parsing the specific colors, but just didn't have another easy way
to convince Git to parse a bunch of colors without having to pick the
results out of diff or log output.
I'd be OK with converting that to use "--color --default" instead of
--get-color, but if we do so we should make sure that there's some
coverage of "--get-color" elsewhere in the config tests (not checking
every possible color variation, but just making sure that it can
actually look up any color with it).
-Peff