From: Junio C Hamano <gitster@pobox•com>
To: "Nguyễn Thái Ngọc Duy" <pclouds@gmail•com>
Cc: git@vger•kernel.org, catern@catern•com
Subject: Re: [PATCH] checkout: don't check worktrees when not necessary
Date: Fri, 12 Jun 2015 15:24:37 -0700 [thread overview]
Message-ID: <xmqqr3pgbm56.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <1434106164-28699-1-git-send-email-pclouds@gmail.com> ("Nguyễn Thái Ngọc Duy"'s message of "Fri, 12 Jun 2015 17:49:24 +0700")
Nguyễn Thái Ngọc Duy <pclouds@gmail•com> writes:
> When --patch or pathspecs are passed to git checkout, the working tree
> will not be switching branch, so there's no need to check if the branch
> that we are running checkout on is already checked out.
Yeah, I agree that having this check in parse_branchname_arg() does
not make any sense, as that function is still trying to decide if we
are switching to a different branch or not. The new location looks
much more sensible.
Will queue this on nd/multiple-work-trees (which has been in
'master' for about a month). Good thing that we caught it before it
got in any tagged release.
Thanks.
>
> Original-patch-by: Spencer Baugh <sbaugh@catern•com>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail•com>
> ---
> builtin/checkout.c | 23 +++++++++++------------
> t/t2025-checkout-to.sh | 8 ++++++++
> 2 files changed, 19 insertions(+), 12 deletions(-)
>
> diff --git a/builtin/checkout.c b/builtin/checkout.c
> index 9b49f0e..e227f64 100644
> --- a/builtin/checkout.c
> +++ b/builtin/checkout.c
> @@ -1110,7 +1110,6 @@ static int parse_branchname_arg(int argc, const char **argv,
> {
> struct tree **source_tree = &opts->source_tree;
> const char **new_branch = &opts->new_branch;
> - int force_detach = opts->force_detach;
> int argcount = 0;
> unsigned char branch_rev[20];
> const char *arg;
> @@ -1231,17 +1230,6 @@ static int parse_branchname_arg(int argc, const char **argv,
> else
> new->path = NULL; /* not an existing branch */
>
> - if (new->path && !force_detach && !*new_branch) {
> - unsigned char sha1[20];
> - int flag;
> - char *head_ref = resolve_refdup("HEAD", 0, sha1, &flag);
> - if (head_ref &&
> - (!(flag & REF_ISSYMREF) || strcmp(head_ref, new->path)) &&
> - !opts->ignore_other_worktrees)
> - check_linked_checkouts(new);
> - free(head_ref);
> - }
> -
> new->commit = lookup_commit_reference_gently(rev, 1);
> if (!new->commit) {
> /* not a commit */
> @@ -1321,6 +1309,17 @@ static int checkout_branch(struct checkout_opts *opts,
> die(_("Cannot switch branch to a non-commit '%s'"),
> new->name);
>
> + if (new->path && !opts->force_detach && !opts->new_branch) {
> + unsigned char sha1[20];
> + int flag;
> + char *head_ref = resolve_refdup("HEAD", 0, sha1, &flag);
> + if (head_ref &&
> + (!(flag & REF_ISSYMREF) || strcmp(head_ref, new->path)) &&
> + !opts->ignore_other_worktrees)
> + check_linked_checkouts(new);
> + free(head_ref);
> + }
> +
> if (opts->new_worktree)
> return prepare_linked_checkout(opts, new);
>
> diff --git a/t/t2025-checkout-to.sh b/t/t2025-checkout-to.sh
> index f8e4df4..a8d9336 100755
> --- a/t/t2025-checkout-to.sh
> +++ b/t/t2025-checkout-to.sh
> @@ -28,6 +28,14 @@ test_expect_success 'checkout --to refuses to checkout locked branch' '
> ! test -d .git/worktrees/zere
> '
>
> +test_expect_success 'checking out paths not complaining about linked checkouts' '
> + (
> + cd existing_empty &&
> + echo dirty >>init.t &&
> + git checkout master -- init.t
> + )
> +'
> +
> test_expect_success 'checkout --to a new worktree' '
> git rev-parse HEAD >expect &&
> git checkout --detach --to here master &&
prev parent reply other threads:[~2015-06-12 22:24 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-31 23:16 [PATCH] checkout: don't check worktrees when not necessary Spencer Baugh
2015-06-01 10:23 ` Duy Nguyen
2015-06-10 19:21 ` Spencer Baugh
2015-06-12 10:49 ` Nguyễn Thái Ngọc Duy
2015-06-12 22:24 ` Junio C Hamano [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqr3pgbm56.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox$(echo .)com \
--cc=catern@catern$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
--cc=pclouds@gmail$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox