]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'ps/remote-rename-fix'
authorJunio C Hamano <gitster@pobox.com>
Thu, 21 Aug 2025 20:46:58 +0000 (13:46 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 21 Aug 2025 20:46:58 +0000 (13:46 -0700)
"git remote rename origin upstream" failed to move origin/HEAD to
upstream/HEAD when origin/HEAD is unborn and performed other
renames extremely inefficiently, which has been corrected.

* ps/remote-rename-fix:
  builtin/remote: only iterate through refs that are to be renamed
  builtin/remote: rework how remote refs get renamed
  builtin/remote: determine whether refs need renaming early on
  builtin/remote: fix sign comparison warnings
  refs: simplify logic when migrating reflog entries
  refs: pass refname when invoking reflog entry callback

15 files changed:
1  2 
builtin/fsck.c
builtin/gc.c
builtin/remote.c
builtin/stash.c
commit.c
object-name.c
reflog.c
reflog.h
refs.c
refs.h
refs/debug.c
refs/files-backend.c
refs/reftable-backend.c
remote.c
revision.c

diff --cc builtin/fsck.c
Simple merge
diff --cc builtin/gc.c
Simple merge
index 8961ae6a8973c77a86313c2f6ea0c406c024c40f,60e67f1b74c4638d36f31299449d3a0ccf484e90..8a7ed4299a4b5157c56144d705f4149226527b66
@@@ -647,19 -765,18 +765,18 @@@ out
  static int migrate_file(struct remote *remote)
  {
        struct strbuf buf = STRBUF_INIT;
-       int i;
  
        strbuf_addf(&buf, "remote.%s.url", remote->name);
-       for (i = 0; i < remote->url.nr; i++)
+       for (size_t i = 0; i < remote->url.nr; i++)
 -              git_config_set_multivar(buf.buf, remote->url.v[i], "^$", 0);
 +              repo_config_set_multivar(the_repository, buf.buf, remote->url.v[i], "^$", 0);
        strbuf_reset(&buf);
        strbuf_addf(&buf, "remote.%s.push", remote->name);
-       for (i = 0; i < remote->push.nr; i++)
+       for (int i = 0; i < remote->push.nr; i++)
 -              git_config_set_multivar(buf.buf, remote->push.items[i].raw, "^$", 0);
 +              repo_config_set_multivar(the_repository, buf.buf, remote->push.items[i].raw, "^$", 0);
        strbuf_reset(&buf);
        strbuf_addf(&buf, "remote.%s.fetch", remote->name);
-       for (i = 0; i < remote->fetch.nr; i++)
+       for (int i = 0; i < remote->fetch.nr; i++)
 -              git_config_set_multivar(buf.buf, remote->fetch.items[i].raw, "^$", 0);
 +              repo_config_set_multivar(the_repository, buf.buf, remote->fetch.items[i].raw, "^$", 0);
  #ifndef WITH_BREAKING_CHANGES
        if (remote->origin == REMOTE_REMOTES)
                unlink_or_warn(repo_git_path_replace(the_repository, &buf,
@@@ -788,9 -944,8 +944,8 @@@ static int mv(int argc, const char **ar
        if (oldremote->fetch.nr) {
                strbuf_reset(&buf);
                strbuf_addf(&buf, "remote.%s.fetch", rename.new_name);
 -              git_config_set_multivar(buf.buf, NULL, NULL, CONFIG_FLAGS_MULTI_REPLACE);
 +              repo_config_set_multivar(the_repository, buf.buf, NULL, NULL, CONFIG_FLAGS_MULTI_REPLACE);
-               strbuf_addf(&old_remote_context, ":refs/remotes/%s/", rename.old_name);
-               for (i = 0; i < oldremote->fetch.nr; i++) {
+               for (int i = 0; i < oldremote->fetch.nr; i++) {
                        char *ptr;
  
                        strbuf_reset(&buf2);
diff --cc builtin/stash.c
Simple merge
diff --cc commit.c
Simple merge
diff --cc object-name.c
Simple merge
diff --cc reflog.c
Simple merge
diff --cc reflog.h
Simple merge
diff --cc refs.c
Simple merge
diff --cc refs.h
Simple merge
diff --cc refs/debug.c
Simple merge
Simple merge
Simple merge
diff --cc remote.c
Simple merge
diff --cc revision.c
Simple merge