diff options
author | Rubén Justo <rjusto@gmail.com> | 2023-03-27 01:33:27 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-03-27 19:40:15 +0300 |
commit | a675ad1708383f47883d0bb0b2dada827a295acd (patch) | |
tree | 1441efc27a622be851366e28ddf210ba16f1cbb7 /builtin/branch.c | |
parent | 7a6ccdfb4eeb9d55893eae9b2c7e573b92f3d01d (diff) |
branch: rename orphan branches in any worktree
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>
Diffstat (limited to 'builtin/branch.c')
-rw-r--r-- | builtin/branch.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/builtin/branch.c b/builtin/branch.c index 90dcbb0c6e..a93b9fc0ab 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -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)) |