git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Anders Kaseorg <andersk@mit.edu>,
	Johannes Schindelin <johannes.schindelin@gmx.de>
Cc: Jeff King <peff@peff.net>,
	git@vger.kernel.org, Andreas Heiduk <andreas.heiduk@mathema.de>
Subject: Re: [PATCH v3 2/2] receive-pack: Protect current branch for bare repository worktree
Date: Mon, 08 Nov 2021 16:44:37 -0800	[thread overview]
Message-ID: <xmqqpmra40p6.fsf@gitster.g> (raw)
In-Reply-To: <xmqqzgqe448a.fsf@gitster.g> (Junio C. Hamano's message of "Mon, 08 Nov 2021 15:28:21 -0800")

Junio C Hamano <gitster@pobox.com> writes:

>> @@ -1456,11 +1456,11 @@ static const char *update_worktree(unsigned char *sha1, const struct worktree *w
>>  		work_tree = worktree->path;
>>  	else if (git_work_tree_cfg)
>>  		work_tree = git_work_tree_cfg;
>
> Not a fault of this patch at all, but I am not sure if this existing
> bit of code is correct.  Everything else in this function works by
> assuming that the worktree that comes from the caller was checked
> with find_shared_symref("HEAD", name) to ensure that, if not NULL,
> it has the branch checked out and updating to the new commit given
> as the other parameter makes sense.
>
> But this "fall back to configured worktree" is taken when the gave
> us NULL worktree or worktree without the .path member (i.e. no
> checkout), and it must have come from a NULL return from the call to
> find_shared_symref().  IOW, the function said "no worktree
> associated with the repository checks out that branch being
> updated."  I doubt it is a bug to update the working tree of the
> repository with the commit pushed to some branch that is *not* HEAD,
> only because core.worktree was set to point at an explicit location.

Not "I doubt", but I suspect it is a bug.  Sorry.

But in practice, especially with the new code structure, we'd never
flip do_update_worktree on unless find_shared_symref() says that the
ref we are updating in the function is what is checked out, which
means worktree is always non-NULL when we call update_worktree().

So, unless there is some situation where worktree->path is NULL for
a worktree with a checkout, the "else if" above is a dead code, I
think.

Similarly, I suspect that is_bare_repository() call the patch moved
into the if/else if/ chain is even reachable with the updated
caller.  find_shared_symref() is always called, and unless it gives
a non-NULL worktree, do_update_worktree never becomes true.

Anyway, enough bug finding in the existing code.  I think the
update-instead was Dscho's invention and when the codepath was
updated to be worktree ready, Dscho helped Hariom to do so, so
I'll CC Dscho to see if he has input.

Thanks.

  reply	other threads:[~2021-11-09  0:44 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-08 20:16 [PATCH v3 2/2] receive-pack: Protect current branch for bare repository worktree Anders Kaseorg
2021-11-08 23:28 ` Junio C Hamano
2021-11-09  0:44   ` Junio C Hamano [this message]
2021-11-09 16:04     ` Johannes Schindelin
2021-11-09  1:10   ` Anders Kaseorg
2021-11-09  3:00     ` [PATCH v4 1/4] fetch: Protect branches checked out in all worktrees Anders Kaseorg
2021-11-09  3:00       ` [PATCH v4 2/4] receive-pack: Clean dead code from update_worktree() Anders Kaseorg
2021-11-09 16:16         ` Johannes Schindelin
2021-11-09 22:58           ` Anders Kaseorg
2021-11-09  3:00       ` [PATCH v4 3/4] receive-pack: Protect current branch for bare repository worktree Anders Kaseorg
2021-11-09 16:22         ` Johannes Schindelin
2021-11-09 23:03           ` Anders Kaseorg
2021-11-09 23:09             ` [PATCH v5 1/4] fetch: Protect branches checked out in all worktrees Anders Kaseorg
2021-11-09 23:09               ` [PATCH v5 2/4] receive-pack: Clean dead code from update_worktree() Anders Kaseorg
2021-11-10  3:57                 ` Ævar Arnfjörð Bjarmason
2021-11-10 12:11                   ` Johannes Schindelin
2021-11-09 23:09               ` [PATCH v5 3/4] receive-pack: Protect current branch for bare repository worktree Anders Kaseorg
2021-11-10  4:00                 ` Ævar Arnfjörð Bjarmason
2021-11-09 23:09               ` [PATCH v5 4/4] branch: Protect branches checked out in all worktrees Anders Kaseorg
2021-11-10  4:03                 ` Ævar Arnfjörð Bjarmason
2021-11-10  3:56               ` [PATCH v5 1/4] fetch: " Ævar Arnfjörð Bjarmason
2021-11-10 12:18               ` Johannes Schindelin
2021-11-10 23:46                 ` Junio C Hamano
2021-11-11  0:11                   ` Junio C Hamano
2021-11-10 22:09               ` Junio C Hamano
2021-11-10 23:33                 ` Anders Kaseorg
2021-11-09  3:00       ` [PATCH v4 4/4] branch: " Anders Kaseorg
2021-11-09 16:24         ` Johannes Schindelin
2021-11-09 16:09       ` [PATCH v4 1/4] fetch: " Johannes Schindelin
2021-11-09 22:52         ` Anders Kaseorg
2021-11-09 23:00           ` Junio C Hamano
2021-11-09 23:28             ` Junio C Hamano
2021-11-09 23:32               ` Anders Kaseorg
2021-11-09 15:37   ` [PATCH v3 2/2] receive-pack: Protect current branch for bare repository worktree Johannes Schindelin

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=xmqqpmra40p6.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=andersk@mit.edu \
    --cc=andreas.heiduk@mathema.de \
    --cc=git@vger.kernel.org \
    --cc=johannes.schindelin@gmx.de \
    --cc=peff@peff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
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;
as well as URLs for NNTP newsgroup(s).