]> git.ipfire.org Git - thirdparty/git.git/commitdiff
branch: rename orphan branches in any worktree
authorRubén Justo <rjusto@gmail.com>
Sun, 26 Mar 2023 22:33:27 +0000 (00:33 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 27 Mar 2023 16:40:15 +0000 (09:40 -0700)
In cfaff3aac (branch -m: allow renaming a yet-unborn branch, 2020-12-13)
we added support for renaming an orphan branch when that branch is
checked out in the current worktree.

Let's also allow renaming an orphan branch checked out in a worktree
different than the current one.

Signed-off-by: Rubén Justo <rjusto@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/branch.c
t/t3200-branch.sh

index 90dcbb0c6e779668dc8662761b65030b1f61bd04..a93b9fc0abe3274796ca191f51e5bf7a3a348c11 100644 (file)
@@ -539,6 +539,7 @@ static int replace_each_worktree_head_symref(struct worktree **worktrees,
 }
 
 #define IS_HEAD 1
+#define IS_ORPHAN 2
 
 static void copy_or_rename_branch(const char *oldname, const char *newname, int copy, int force)
 {
@@ -565,6 +566,8 @@ static void copy_or_rename_branch(const char *oldname, const char *newname, int
 
                if (wt->head_ref && !strcmp(oldref.buf, wt->head_ref)) {
                        oldref_usage |= IS_HEAD;
+                       if (is_null_oid(&wt->head_oid))
+                               oldref_usage |= IS_ORPHAN;
                        break;
                }
        }
@@ -599,8 +602,7 @@ static void copy_or_rename_branch(const char *oldname, const char *newname, int
                strbuf_addf(&logmsg, "Branch: renamed %s to %s",
                            oldref.buf, newref.buf);
 
-       if (!copy &&
-           (!head || strcmp(oldname, head) || !is_null_oid(&head_oid)) &&
+       if (!copy && !(oldref_usage & IS_ORPHAN) &&
            rename_ref(oldref.buf, newref.buf, logmsg.buf))
                die(_("Branch rename failed"));
        if (copy && copy_existing_ref(oldref.buf, newref.buf, logmsg.buf))
index 6b8b59f15e8ac647417daaf3f9d9019c9cb2c836..a0a3d0cb24f6d8a9d7116baa10feffdf095e1202 100755 (executable)
@@ -294,6 +294,20 @@ test_expect_success 'git branch -M and -C fail on detached HEAD' '
        test_cmp expect err
 '
 
+test_expect_success 'git branch -m should work with orphan branches' '
+       test_when_finished git checkout - &&
+       test_when_finished git worktree remove -f wt &&
+       git worktree add wt --detach &&
+       # rename orphan in another worktreee
+       git -C wt checkout --orphan orphan-foo-wt &&
+       git branch -m orphan-foo-wt orphan-bar-wt &&
+       test orphan-bar-wt=$(git -C orphan-worktree branch --show-current) &&
+       # rename orphan in the current worktree
+       git checkout --orphan orphan-foo &&
+       git branch -m orphan-foo orphan-bar &&
+       test orphan-bar=$(git branch --show-current)
+'
+
 test_expect_success 'git branch -d on orphan HEAD (merged)' '
        test_when_finished git checkout main &&
        git checkout --orphan orphan &&