Merge branch 'rl/remote-allow-missing-branch-name-merge' into maint
authorJunio C Hamano <gitster@pobox.com>
Tue, 21 Mar 2017 22:03:28 +0000 (15:03 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 21 Mar 2017 22:03:28 +0000 (15:03 -0700)
"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.<name>.merge

1  2 
builtin/remote.c
t/t5505-remote.sh
diff --combined builtin/remote.c
index 5339ed6ad17bb0c83e05d3e60d654c4f0632ee50,01055b7272ca2bd847c8fb938b9cad9afe0d5a19..7682206c1e3a6e8655f59505e6e7e288ad2d3a65
@@@ -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);
@@@ -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;
                                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);
                        }
                }
        }
@@@ -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 ba46e86de0a7285bf88ff5fe05e378c8bfd256f9,f558ad0b39362255ceec67ef219edc91230d0ec3..3ea27107c2ddee8217d5d91c4b13d85d81b44a5e
@@@ -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 &&
@@@ -764,13 -783,6 +783,13 @@@ test_expect_success 'rename a remote wi
        )
  '
  
 +test_expect_success 'rename succeeds with existing remote.<target>.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 <<EOF
  URL: $(pwd)/one
  Push: refs/heads/master:refs/heads/upstream