git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Eric Sunshine <sunshine@sunshineco.com>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: Hariom verma <hariom18599@gmail.com>, git <git@vger.kernel.org>,
	Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v3 1/3] get_main_worktree(): allow it to be called in the Git directory
Date: Mon, 24 Feb 2020 17:27:14 -0500	[thread overview]
Message-ID: <CAPig+cR9wwcbnuFmVuoDr6OSq29ZCSt6Kr5KtG3HPsDgM5mGSA@mail.gmail.com> (raw)
In-Reply-To: <nycvar.QRO.7.76.6.2002241942120.46@tvgsbejvaqbjf.bet>

On Mon, Feb 24, 2020 at 1:58 PM Johannes Schindelin
<Johannes.Schindelin@gmx.de> wrote:
> > On Mon, Feb 24, 2020 at 7:12 AM Eric Sunshine <sunshine@sunshineco.com> wrote:
> > > This change makes the code unnecessarily confusing and effectively
> > > turns the final line into dead code. I would much rather see the three
> > > cases spelled out explicitly, perhaps like this:
> > >
> > >     if (!strbuf_strip_suffix(&worktree_path, "/.git/.") && /* in .git dir */
> > >         !strbuf_strip_suffix(&worktree_path, "/.git/")) /* in worktree */
> > >             strbuf_strip_suffix(&worktree_path, "/."); /* in bare repo */
>
> I would be really cautious about that.
>
> To me, the originally proposed change says: strip `/.`, if any. Then,
> strip `/.git`, and if successful, strip another `/.`, if any.

That's not at all what the original said, which is reproduced here:

    if (!strbuf_strip_suffix(&worktree_path, "/.git"))
        strbuf_strip_suffix(&worktree_path, "/.");

It says "try stripping '/.git'; if that fails, try stripping '/.'".
That is, it recognizes and handles two distinct cases: (1) the path to
the .git directory of a non-bare repository, which always ends with
"/.git", and (2) the path to a bare git repository, which always ends
with "/.". So, the original code wasn't doing any sort of incremental
stripping of suffixes; it was just handling two known distinct cases.

Perhaps you missed the '!' in the conditional?

> That reads pretty fine to me. It makes sense.

To me, it doesn't make sense to update the code as done by the patch
since that just muddies the issue by making it seem as if
get_git_common_dir() is indeterminately tacking on various suffixes
rather than giving us deterministic results.

> Above-mentioned proposal, however, puts quite a few twists into my brain,
> as is a "if neither X nor Y then Z", and I find the code comments outright
> confusing.

It's just three distinct cases my proposed code is handling; there are
no twists.

> The scenario in which we found the buggy behavior involved calling
> `find_shared_symref()`. I imagine that we could use `git branch -D` inside
> the `.git` directory for the new regression test.
>
> But yes, in my testing, `git worktree list` and `git -C .git worktree
> list` do show a different top-level directory (the latter shows an
> incorrect one). Such a test case would find a splendid home in t2402.

I don't have strong feelings about how it is tested, but would like to
see some sort of test proving that it works as expected following this
change.

  reply	other threads:[~2020-02-24 22:27 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-13 18:59 [PATCH 0/3] [GSoC] receive.denyCurrentBranch: respect all worktrees Hariom Verma via GitGitGadget
2020-02-13 18:59 ` [PATCH 1/3] get_main_worktree(): allow it to be called in the Git directory Hariom Verma via GitGitGadget
2020-02-13 18:59 ` [PATCH 2/3] t5509: initialized `pushee` as bare repository Hariom Verma via GitGitGadget
2020-02-13 20:14   ` Junio C Hamano
2020-02-13 20:34     ` Junio C Hamano
2020-02-14 11:59     ` Johannes Schindelin
2020-02-14 15:03       ` Junio C Hamano
2020-02-15 21:52         ` Hariom verma
2020-02-16 23:49           ` Junio C Hamano
2020-02-22 22:54             ` Hariom verma
2020-02-13 18:59 ` [PATCH 3/3] receive.denyCurrentBranch: respect all worktrees Hariom Verma via GitGitGadget
2020-02-22 22:35 ` [PATCH v2 0/4] [GSoC] " Hariom Verma via GitGitGadget
2020-02-22 22:35   ` [PATCH v2 1/4] get_main_worktree(): allow it to be called in the Git directory Hariom Verma via GitGitGadget
2020-02-22 22:35   ` [PATCH v2 2/4] t5509: initialized `pushee` as bare repository Hariom Verma via GitGitGadget
2020-02-23  6:24     ` Junio C Hamano
2020-02-22 22:35   ` [PATCH v2 3/4] bug: denyCurrentBranch and unborn branch with ref namespace Hariom Verma via GitGitGadget
2020-02-23  6:10     ` Junio C Hamano
2020-02-22 22:35   ` [PATCH v2 4/4] receive.denyCurrentBranch: respect all worktrees Hariom Verma via GitGitGadget
2020-02-23  6:18     ` Junio C Hamano
2020-02-23 18:57   ` [PATCH v3 0/3] [GSoC] " Hariom Verma via GitGitGadget
2020-02-23 18:57     ` [PATCH v3 1/3] get_main_worktree(): allow it to be called in the Git directory Hariom Verma via GitGitGadget
2020-02-24  1:42       ` Eric Sunshine
2020-02-24 11:09         ` Hariom verma
2020-02-24 17:00           ` Eric Sunshine
2020-02-24 18:58           ` Johannes Schindelin
2020-02-24 22:27             ` Eric Sunshine [this message]
2020-02-27 15:58               ` Johannes Schindelin
2020-02-24 19:13           ` Junio C Hamano
2020-02-23 18:57     ` [PATCH v3 2/3] t5509: use a bare repository for test push target Hariom Verma via GitGitGadget
2020-02-23 18:57     ` [PATCH v3 3/3] receive.denyCurrentBranch: respect all worktrees Hariom Verma via GitGitGadget

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=CAPig+cR9wwcbnuFmVuoDr6OSq29ZCSt6Kr5KtG3HPsDgM5mGSA@mail.gmail.com \
    --to=sunshine@sunshineco.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=hariom18599@gmail.com \
    /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).