From: Derrick Stolee <dstolee@xxxxxxxxxxxxx> Without additional modifiers, 'git config' attempts to set a single value in the .git/config file. When the value_regex parameter is supplied, this command behaves in a non-trivial manner. Consider 'git config key value value_regex'. The expected behavior is as follows: 1. If there are multiple existing values that match 'value_regex', then the command fails. Users should use --replace-all instead. 2. If there is one existing value that matches 'value_regex', then the new config has one entry where 'key=value'. 3. If there is no existing values match 'value_regex', then the 'key=value' pair is appended, making this 'key' a multi-valued config setting. Add a test that demonstrates these options. Signed-off-by: Derrick Stolee <dstolee@xxxxxxxxxxxxx> --- t/t1300-config.sh | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/t/t1300-config.sh b/t/t1300-config.sh index 97ebfe1f9d..ef56b08070 100755 --- a/t/t1300-config.sh +++ b/t/t1300-config.sh @@ -1914,4 +1914,39 @@ test_expect_success '--replace-all does not invent newlines' ' test_cmp expect .git/config ' +test_expect_success 'set all config with value_regex' ' + q_to_tab >initial <<-\EOF && + [abc] + Qkey = one + EOF + + cp initial .git/config && + git config abc.key two a+ && + q_to_tab >expect <<-\EOF && + [abc] + Qkey = one + Qkey = two + EOF + test_cmp expect .git/config && + + test_must_fail git config abc.key three o+ 2>err && + test_i18ngrep "has multiple values" err && + git config abc.key three a+ && + q_to_tab >expect <<-\EOF && + [abc] + Qkey = one + Qkey = two + Qkey = three + EOF + test_cmp expect .git/config && + + cp initial .git/config && + git config abc.key three o+ && + q_to_tab >expect <<-\EOF && + [abc] + Qkey = three + EOF + test_cmp expect .git/config +' + test_done -- gitgitgadget