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>
Ross Lagerwall committed
Feb 18, 2017 at 00:23 UTC
20690b213975ad3e9b1bc851f434d818bd2d1de9
2 files changed
+22
-1
builtin/remote.c
+3
-1
@@ -769,7 +769,9 @@ static int rm(int argc, const char **argv)
769
strbuf_reset(&buf);
770
strbuf_addf(&buf, "branch.%s.%s",
771
item->string, *k);
772
- git_config_set(buf.buf, NULL);
772
+ result = git_config_set_gently(buf.buf, NULL);
773
+ if (result && result != CONFIG_NOTHING_SET)
774
+ die(_("could not unset '%s'"), buf.buf);
775
}
776
}
777
}
t/t5505-remote.sh
+19
@@ -153,6 +153,25 @@ test_expect_success 'remove errors out early when deleting non-existent branch'
153
)
154
'
155
156
+test_expect_success 'remove remote with a branch without configured merge' '
157
+ test_when_finished "(
158
+ git -C test checkout master;
159
+ git -C test branch -D two;
160
+ git -C test config --remove-section remote.two;
161
+ git -C test config --remove-section branch.second;
162
+ true
163
+ )" &&
164
+ (
165
+ cd test &&
166
+ git remote add two ../two &&
167
+ git fetch two &&
168
+ git checkout -b second two/master^0 &&
169
+ git config branch.second.remote two &&
170
+ git checkout master &&
171
+ git remote rm two
172
+ )
173
+'
174
+
175
test_expect_success 'rename errors out early when deleting non-existent branch' '
176
(
177
cd test &&