Browse Source

checkout: avoid resolving HEAD unnecessarily

When --ignore-other-worktree is specified, we unconditionally skip the
check to see if the requested branch is already checked out in a linked
worktree. Since we know that we will be skipping that check, there is no
need to resolve HEAD in order to detect other conditions under which we
may skip the check.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Eric Sunshine 10 years ago committed by Junio C Hamano
parent
commit
c265c533cf
  1. 6
      builtin/checkout.c

6
builtin/checkout.c

@ -1145,13 +1145,13 @@ static int checkout_branch(struct checkout_opts *opts,
die(_("Cannot switch branch to a non-commit '%s'"), die(_("Cannot switch branch to a non-commit '%s'"),
new->name); new->name);


if (new->path && !opts->force_detach && !opts->new_branch) { if (new->path && !opts->force_detach && !opts->new_branch &&
!opts->ignore_other_worktrees) {
unsigned char sha1[20]; unsigned char sha1[20];
int flag; int flag;
char *head_ref = resolve_refdup("HEAD", 0, sha1, &flag); char *head_ref = resolve_refdup("HEAD", 0, sha1, &flag);
if (head_ref && if (head_ref &&
(!(flag & REF_ISSYMREF) || strcmp(head_ref, new->path)) && (!(flag & REF_ISSYMREF) || strcmp(head_ref, new->path)))
!opts->ignore_other_worktrees)
check_linked_checkouts(new); check_linked_checkouts(new);
free(head_ref); free(head_ref);
} }

Loading…
Cancel
Save