diff options
| author | Junio C Hamano <gitster@pobox.com> | 2021-12-21 15:03:16 -0800 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2021-12-21 15:03:16 -0800 |
| commit | 13fa77b6899d0068303761c449d9a7e01dd85eb8 (patch) | |
| tree | b15e735aa90f701444aaa66ab080695f10a85549 /builtin/branch.c | |
| parent | ee1dc493d10d814ceba1a551d9a185b9da627ad8 (diff) | |
| parent | 593a2a5d0639b4b4f91ff6e6ffb64e72020f8fd8 (diff) | |
| download | git-13fa77b6899d0068303761c449d9a7e01dd85eb8.tar.gz | |
Merge branch 'ak/protect-any-current-branch'
"git fetch" without the "--update-head-ok" option ought to protect
a checked out branch from getting updated, to prevent the working
tree that checks it out to go out of sync. The code was written
before the use of "git worktree" got widespread, and only checked
the branch that was checked out in the current worktree, which has
been updated.
(originally called ak/fetch-not-overwrite-any-current-branch)
* ak/protect-any-current-branch:
branch: protect branches checked out in all worktrees
receive-pack: protect current branch for bare repository worktree
receive-pack: clean dead code from update_worktree()
fetch: protect branches checked out in all worktrees
worktree: simplify find_shared_symref() memory ownership model
branch: lowercase error messages
receive-pack: lowercase error messages
fetch: lowercase error messages
Diffstat (limited to 'builtin/branch.c')
| -rw-r--r-- | builtin/branch.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/builtin/branch.c b/builtin/branch.c index 81b5c111cb..6c8b0fcc11 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -192,6 +192,7 @@ static void delete_branch_config(const char *branchname) static int delete_branches(int argc, const char **argv, int force, int kinds, int quiet) { + struct worktree **worktrees; struct commit *head_rev = NULL; struct object_id oid; char *name = NULL; @@ -228,6 +229,9 @@ static int delete_branches(int argc, const char **argv, int force, int kinds, if (!head_rev) die(_("Couldn't look up commit object for HEAD")); } + + worktrees = get_worktrees(); + for (i = 0; i < argc; i++, strbuf_reset(&bname)) { char *target = NULL; int flags = 0; @@ -238,7 +242,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds, if (kinds == FILTER_REFS_BRANCHES) { const struct worktree *wt = - find_shared_symref("HEAD", name); + find_shared_symref(worktrees, "HEAD", name); if (wt) { error(_("Cannot delete branch '%s' " "checked out at '%s'"), @@ -299,6 +303,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds, free(name); strbuf_release(&bname); + free_worktrees(worktrees); return ret; } |
