From: Junio C Hamano Date: Thu, 17 Mar 2022 00:53:08 +0000 (-0700) Subject: Merge branch 'tb/rename-remote-progress' X-Git-Tag: v2.36.0-rc0~64 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=47c52b2dada2d7223cfc8927ae7909dba27579a2;p=thirdparty%2Fgit.git Merge branch 'tb/rename-remote-progress' "git remote rename A B", depending on the number of remote-tracking refs involved, takes long time renaming them. The command has been taught to show progress bar while making the user wait. * tb/rename-remote-progress: builtin/remote.c: show progress when renaming remote references builtin/remote.c: parse options in 'rename' --- 47c52b2dada2d7223cfc8927ae7909dba27579a2 diff --cc builtin/remote.c index 0142ed09b5,950e7958d5..5f4cde9d78 --- a/builtin/remote.c +++ b/builtin/remote.c @@@ -764,17 -775,24 +775,26 @@@ static int mv(int argc, const char **ar * the new symrefs. */ for_each_ref(read_remote_branches, &rename); + if (show_progress) { + /* + * Count symrefs twice, since "renaming" them is done by + * deleting and recreating them in two separate passes. + */ + progress = start_progress(_("Renaming remote references"), + rename.remote_branches->nr + rename.symrefs_nr); + } for (i = 0; i < remote_branches.nr; i++) { struct string_list_item *item = remote_branches.items + i; - int flag = 0; + struct strbuf referent = STRBUF_INIT; - read_ref_full(item->string, RESOLVE_REF_READING, NULL, &flag); - if (!(flag & REF_ISSYMREF)) + if (refs_read_symbolic_ref(get_main_ref_store(the_repository), item->string, + &referent)) continue; if (delete_ref(NULL, item->string, NULL, REF_NO_DEREF)) die(_("deleting '%s' failed"), item->string); + + strbuf_release(&referent); + display_progress(progress, ++refs_renamed_nr); } for (i = 0; i < remote_branches.nr; i++) { struct string_list_item *item = remote_branches.items + i;