From: Junio C Hamano Date: Tue, 8 May 2018 06:59:26 +0000 (+0900) Subject: Merge branch 'tb/config-type' X-Git-Tag: v2.18.0-rc0~88 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e3e042b185ce3037acb61382da53521ac0beebbf;p=thirdparty%2Fgit.git Merge branch 'tb/config-type' The "git config" command uses separate options e.g. "--int", "--bool", etc. to specify what type the caller wants the value to be interpreted as. A new "--type=" option has been introduced, which would make it cleaner to define new types. * tb/config-type: builtin/config.c: support `--type=` as preferred alias for `--` builtin/config.c: treat type specifiers singularly --- e3e042b185ce3037acb61382da53521ac0beebbf diff --cc t/t1300-config.sh index 5acf12f7fb,e06af3d337..e7e6d07b3a --- a/t/t1300-config.sh +++ b/t/t1300-config.sh @@@ -742,7 -740,7 +742,7 @@@ test_expect_success bool do git config --bool --get bool.true$i >>result git config --bool --get bool.false$i >>result -- done && ++ done && test_cmp expect result' test_expect_success 'invalid bool (--get)' ' @@@ -1686,25 -1611,67 +1686,88 @@@ test_expect_success '--local requires test_expect_code 128 nongit git config --local foo.bar ' + cat >.git/config <<-\EOF && + [core] + foo = true + number = 10 + big = 1M + EOF + + test_expect_success 'identical modern --type specifiers are allowed' ' + git config --type=int --type=int core.big >actual && + echo 1048576 >expect && + test_cmp expect actual + ' + + test_expect_success 'identical legacy --type specifiers are allowed' ' + git config --int --int core.big >actual && + echo 1048576 >expect && + test_cmp expect actual + ' + + test_expect_success 'identical mixed --type specifiers are allowed' ' + git config --int --type=int core.big >actual && + echo 1048576 >expect && + test_cmp expect actual + ' + + test_expect_success 'non-identical modern --type specifiers are not allowed' ' + test_must_fail git config --type=int --type=bool core.big 2>error && + test_i18ngrep "only one type at a time" error + ' + + test_expect_success 'non-identical legacy --type specifiers are not allowed' ' + test_must_fail git config --int --bool core.big 2>error && + test_i18ngrep "only one type at a time" error + ' + + test_expect_success 'non-identical mixed --type specifiers are not allowed' ' + test_must_fail git config --type=int --bool core.big 2>error && + test_i18ngrep "only one type at a time" error + ' + + test_expect_success '--type allows valid type specifiers' ' + echo "true" >expect && + git config --type=bool core.foo >actual && + test_cmp expect actual + ' + + test_expect_success '--no-type unsets type specifiers' ' + echo "10" >expect && + git config --type=bool --no-type core.number >actual && + test_cmp expect actual + ' + + test_expect_success 'unset type specifiers may be reset to conflicting ones' ' + echo 1048576 >expect && + git config --type=bool --no-type --type=int core.big >actual && + test_cmp expect actual + ' + + test_expect_success '--type rejects unknown specifiers' ' + test_must_fail git config --type=nonsense core.foo 2>error && + test_i18ngrep "unrecognized --type argument" error + ' + +test_expect_success '--replace-all does not invent newlines' ' + q_to_tab >.git/config <<-\EOF && + [abc]key + QkeepSection + [xyz] + Qkey = 1 + [abc] + Qkey = a + EOF + q_to_tab >expect <<-\EOF && + [abc] + QkeepSection + [xyz] + Qkey = 1 + [abc] + Qkey = b + EOF + git config --replace-all abc.key b && + test_cmp .git/config expect +' + test_done