remote: ignore failure to remove missing branch.<name>.merge

It is not all too unusual for a branch to use "branch.<name>.remote"
without "branch.<name>.merge".  You may be using the 'push.default'
configuration set to 'current', for example, and do

    $ git checkout -b side colleague/side
    $ git config branch.side.remote colleague

However, "git remote rm" to remove the remote used in such a manner
fails with

    "fatal: could not unset 'branch.<name>.merge'"

because it assumes that a branch that has .remote defined must also
have .merge defined.  Detect the "cannot unset because it is not set
to begin with" case and ignore it.

Signed-off-by: Ross Lagerwall <rosslagerwall@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ross Lagerwall 2017-02-18 00:23:41 +00:00 committed by Junio C Hamano
parent 3b9e3c2ced
commit 20690b2139
2 changed files with 22 additions and 1 deletions

View file

@ -769,7 +769,9 @@ static int rm(int argc, const char **argv)
strbuf_reset(&buf);
strbuf_addf(&buf, "branch.%s.%s",
item->string, *k);
git_config_set(buf.buf, NULL);
result = git_config_set_gently(buf.buf, NULL);
if (result && result != CONFIG_NOTHING_SET)
die(_("could not unset '%s'"), buf.buf);
}
}
}

View file

@ -153,6 +153,25 @@ test_expect_success 'remove errors out early when deleting non-existent branch'
)
'
test_expect_success 'remove remote with a branch without configured merge' '
test_when_finished "(
git -C test checkout master;
git -C test branch -D two;
git -C test config --remove-section remote.two;
git -C test config --remove-section branch.second;
true
)" &&
(
cd test &&
git remote add two ../two &&
git fetch two &&
git checkout -b second two/master^0 &&
git config branch.second.remote two &&
git checkout master &&
git remote rm two
)
'
test_expect_success 'rename errors out early when deleting non-existent branch' '
(
cd test &&