git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3 1/3] get_main_worktree(): allow it to be called in the Git directory

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Feb 24, 2020, 18:58 UTC
Message-ID
<nycvar.QRO.7.76.6.2002241942120.46@tvgsbejvaqbjf.bet>
In-Reply-To
<CA+CkUQ8ZsxesE=d+DQ+67SEHPJXdHjbSKhWeVifPeKBymqy8pw@mail.gmail.com>
Hi,
On Mon, 24 Feb 2020, Hariom verma wrote:
Show 20 quoted lines
> On Mon, Feb 24, 2020 at 7:12 AM Eric Sunshine <sunshine@sunshineco.com> wrote:
> >
> > This title is a bit too generic; it fails to explain what this patch
> > is really fixing. Perhaps:
> >
> >     get_main_worktree: correctly normalize worktree path when in .git dir
> >
> > or something.
> >
> > "Git directory" is imprecise. As a reader, I can't tell if this means
> > the main worktree into which the project is checked out or the `.git`
> > directory itself. Please write it instead as "`.git` directory".
> > [...]
> > 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 reads pretty fine to me. It makes sense.

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.

> I'll implement these comments in the next revision for sure.

I'd like to suggest taking a step back and reflecting whether _you_ like the suggested version better. It is just a suggestion, after all, and if it was up to me, I would argue against it.

Show 7 quoted lines
> > Also, please add a test to ensure that this behavior doesn't regress
> > in the future. You can probably test it via the "git worktree list"
> > command, so perhaps add the test to t/t2402-worktree-list.sh.
>
> There already exists tests in "t/t2402-worktree-list.sh" which lists and
> verifies all worktrees. Does this make sense to write a new test that
> also does kinda the same thing?

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.

Ciao, Dscho

Previous: Eric SunshineNext: Eric Sunshine
Message 25 of 30 in “[GSoC] receive.denyCurrentBranch: respect all worktrees”
  1. 0/3 [GSoC] receive.denyCurrentBranch: respect all worktreesHariom Verma via GitGitGadget, Feb 13, 2020
  2. 2/3 t5509: initialized `pushee` as bare repositoryHariom Verma via GitGitGadget, Feb 13, 2020
  3. Junio C HamanoFeb 13, 2020
  4. Junio C HamanoFeb 13, 2020
  5. Johannes SchindelinFeb 14, 2020
  6. Junio C HamanoFeb 14, 2020
  7. Hariom vermaFeb 15, 2020
  8. Junio C HamanoFeb 16, 2020
  9. Hariom vermaFeb 22, 2020
  10. 1/3 get_main_worktree(): allow it to be called in the Git directoryHariom Verma via GitGitGadget, Feb 13, 2020
  11. 3/3 receive.denyCurrentBranch: respect all worktreesHariom Verma via GitGitGadget, Feb 13, 2020
  12. 0/4 [GSoC] receive.denyCurrentBranch: respect all worktreesHariom Verma via GitGitGadget, Feb 22, 2020
  13. 2/4 t5509: initialized `pushee` as bare repositoryHariom Verma via GitGitGadget, Feb 22, 2020
  14. Junio C HamanoFeb 23, 2020
  15. 3/4 bug: denyCurrentBranch and unborn branch with ref namespaceHariom Verma via GitGitGadget, Feb 22, 2020
  16. Junio C HamanoFeb 23, 2020
  17. 1/4 get_main_worktree(): allow it to be called in the Git directoryHariom Verma via GitGitGadget, Feb 22, 2020
  18. 4/4 receive.denyCurrentBranch: respect all worktreesHariom Verma via GitGitGadget, Feb 22, 2020
  19. Junio C HamanoFeb 23, 2020
  20. 0/3 [GSoC] receive.denyCurrentBranch: respect all worktreesHariom Verma via GitGitGadget, Feb 23, 2020
  21. 1/3 get_main_worktree(): allow it to be called in the Git directoryHariom Verma via GitGitGadget, Feb 23, 2020
  22. Eric SunshineFeb 24, 2020
  23. Hariom vermaFeb 24, 2020
  24. Eric SunshineFeb 24, 2020
  25. Johannes SchindelinFeb 24, 2020
  26. Eric SunshineFeb 24, 2020
  27. Johannes SchindelinFeb 27, 2020
  28. Junio C HamanoFeb 24, 2020
  29. 2/3 t5509: use a bare repository for test push targetHariom Verma via GitGitGadget, Feb 23, 2020
  30. 3/3 receive.denyCurrentBranch: respect all worktreesHariom Verma via GitGitGadget, Feb 23, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.