Merge branch 'rj/avoid-switching-to-already-used-branch'
A few subcommands have been taught to stop users from working on a branch that is being used in another worktree linked to the same repository. * rj/avoid-switching-to-already-used-branch: switch: reject if the branch is already checked out elsewhere (test) rebase: refuse to switch to a branch already checked out elsewhere (test) branch: fix die_if_checked_out() when ignore_current_worktree worktree: introduce is_shared_symref()
This commit is contained in:
14
branch.c
14
branch.c
@ -821,12 +821,16 @@ void remove_branch_state(struct repository *r, int verbose)
|
||||
void die_if_checked_out(const char *branch, int ignore_current_worktree)
|
||||
{
|
||||
struct worktree **worktrees = get_worktrees();
|
||||
const struct worktree *wt;
|
||||
|
||||
wt = find_shared_symref(worktrees, "HEAD", branch);
|
||||
if (wt && (!ignore_current_worktree || !wt->is_current)) {
|
||||
skip_prefix(branch, "refs/heads/", &branch);
|
||||
die(_("'%s' is already checked out at '%s'"), branch, wt->path);
|
||||
for (int i = 0; worktrees[i]; i++) {
|
||||
if (worktrees[i]->is_current && ignore_current_worktree)
|
||||
continue;
|
||||
|
||||
if (is_shared_symref(worktrees[i], "HEAD", branch)) {
|
||||
skip_prefix(branch, "refs/heads/", &branch);
|
||||
die(_("'%s' is already checked out at '%s'"),
|
||||
branch, worktrees[i]->path);
|
||||
}
|
||||
}
|
||||
|
||||
free_worktrees(worktrees);
|
||||
|
Reference in New Issue
Block a user