From: Junio C Hamano Date: Mon, 27 Feb 2017 21:57:18 +0000 (-0800) Subject: Merge branch 'rl/remote-allow-missing-branch-name-merge' X-Git-Tag: v2.13.0-rc0~154 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/3e5c63943d35be1804d302c0393affc4916c3dc3?ds=inline;hp=-c Merge branch 'rl/remote-allow-missing-branch-name-merge' "git remote rm X", when a branch has remote X configured as the value of its branch.*.remote, tried to remove branch.*.remote and branch.*.merge and failed if either is unset. * rl/remote-allow-missing-branch-name-merge: remote: ignore failure to remove missing branch..merge --- 3e5c63943d35be1804d302c0393affc4916c3dc3 diff --combined builtin/remote.c index 2b415911bf,01055b7272..addf97ad29 --- a/builtin/remote.c +++ b/builtin/remote.c @@@ -186,7 -186,7 +186,7 @@@ static int add(int argc, const char **a url = argv[1]; remote = remote_get(name); - if (remote_is_configured(remote)) + if (remote_is_configured(remote, 1)) die(_("remote %s already exists."), name); strbuf_addf(&buf2, "refs/heads/test:refs/remotes/%s/test", name); @@@ -618,14 -618,14 +618,14 @@@ static int mv(int argc, const char **ar rename.remote_branches = &remote_branches; oldremote = remote_get(rename.old); - if (!remote_is_configured(oldremote)) + if (!remote_is_configured(oldremote, 1)) die(_("No such remote: %s"), rename.old); if (!strcmp(rename.old, rename.new) && oldremote->origin != REMOTE_CONFIG) return migrate_file(oldremote); newremote = remote_get(rename.new); - if (remote_is_configured(newremote)) + if (remote_is_configured(newremote, 1)) die(_("remote %s already exists."), rename.new); strbuf_addf(&buf, "refs/heads/test:refs/remotes/%s/test", rename.new); @@@ -691,7 -691,7 +691,7 @@@ read_ref_full(item->string, RESOLVE_REF_READING, oid.hash, &flag); if (!(flag & REF_ISSYMREF)) continue; - if (delete_ref(item->string, NULL, REF_NODEREF)) + if (delete_ref(NULL, item->string, NULL, REF_NODEREF)) die(_("deleting '%s' failed"), item->string); } for (i = 0; i < remote_branches.nr; i++) { @@@ -753,7 -753,7 +753,7 @@@ static int rm(int argc, const char **ar usage_with_options(builtin_remote_rm_usage, options); remote = remote_get(argv[1]); - if (!remote_is_configured(remote)) + if (!remote_is_configured(remote, 1)) die(_("No such remote: %s"), argv[1]); known_remotes.to_delete = remote; @@@ -769,7 -769,9 +769,9 @@@ 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); } } } @@@ -1248,7 -1250,7 +1250,7 @@@ static int set_head(int argc, const cha head_name = xstrdup(states.heads.items[0].string); free_remote_ref_states(&states); } else if (opt_d && !opt_a && argc == 1) { - if (delete_ref(buf.buf, NULL, REF_NODEREF)) + if (delete_ref(NULL, buf.buf, NULL, REF_NODEREF)) result |= error(_("Could not delete %s"), buf.buf); } else usage_with_options(builtin_remote_sethead_usage, options); @@@ -1415,7 -1417,7 +1417,7 @@@ static int set_remote_branches(const ch strbuf_addf(&key, "remote.%s.fetch", remotename); remote = remote_get(remotename); - if (!remote_is_configured(remote)) + if (!remote_is_configured(remote, 1)) die(_("No such remote '%s'"), remotename); if (!add_mode && remove_all_fetch_refspecs(remotename, key.buf)) { @@@ -1469,7 -1471,7 +1471,7 @@@ static int get_url(int argc, const cha remotename = argv[0]; remote = remote_get(remotename); - if (!remote_is_configured(remote)) + if (!remote_is_configured(remote, 1)) die(_("No such remote '%s'"), remotename); url_nr = 0; @@@ -1537,7 -1539,7 +1539,7 @@@ static int set_url(int argc, const cha oldurl = newurl; remote = remote_get(remotename); - if (!remote_is_configured(remote)) + if (!remote_is_configured(remote, 1)) die(_("No such remote '%s'"), remotename); if (push_mode) { diff --combined t/t5505-remote.sh index 535d53fa63,f558ad0b39..a6c0178f3a --- a/t/t5505-remote.sh +++ b/t/t5505-remote.sh @@@ -153,6 -153,25 +153,25 @@@ test_expect_success 'remove errors out ) ' + 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 && @@@ -725,7 -744,7 +744,7 @@@ test_expect_success 'rename a remote' ( cd four && git remote rename origin upstream && - rmdir .git/refs/remotes/origin && + test -z "$(git for-each-ref refs/remotes/origin)" && test "$(git symbolic-ref refs/remotes/upstream/HEAD)" = "refs/remotes/upstream/master" && test "$(git rev-parse upstream/master)" = "$(git rev-parse master)" && test "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/remotes/upstream/*" && @@@ -764,13 -783,6 +783,13 @@@ test_expect_success 'rename a remote wi ) ' +test_expect_success 'rename succeeds with existing remote..prune' ' + git clone one four.four && + test_when_finished git config --global --unset remote.upstream.prune && + git config --global remote.upstream.prune true && + git -C four.four remote rename origin upstream +' + cat >remotes_origin <