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

Re: [PATCH] worktree repair: detect relative path in .git file correctly

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 17, 2026, 17:21 UTC
Message-ID
<xmqqwlto4q9a.fsf@gitster.g>
In-Reply-To
<pull.2205.git.1786799480344.gitgitgadget@gmail.com>
"Yoichi NAKAYAMA via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 5 quoted lines
> From: Yoichi NAKAYAMA <yoichi.nakayama@gmail.com>
>
> Since read_gitfile_gently() always returns an absolute path, the
> conversion from a relative path to an absolute path was not
> functioning and dead code existed.

This is ugly. What problem is this really fixing? What "conversion from a relative path to an absolute path" does the above refer to? What "dead code"? Where in what file and what function? Why does the caller even care if it is absolute or relative? Shouldn't they work equally well as long as they point at the right location?

The proposed log message hides so many details to evaluate the claim that this is a good change, and raises many unanswered questions.

Yes, read_gitfile_gently() always turns the gitfile it reads into an absolute form. Is there a caller A that wants the underlying relative form, and if so why? Is it to compare with some other path that is relative? How did the code B obtained the other path to be compared that is relative? If that code B used the helper that is different from read_gitfile_gently() to obtain the other path that is relative, perhaps the caller A can be changed to call it instead of calling read_gitfile_gently() and the fix can be done without churning so many existing call sites?

Stepping back a bit, why does "repair" even care if it is relative? Is it considered a semi-error when a gitfile records its target as a relative path? If so, I wonder if a cleaner way may be to add a new READ_GITFILE_ERR_RELATIVE_PATH constant that is treated as non-fatal error by the read_gitfile_error_die() function? If that approach works, that may be the cleanest, as I suspect that "was it recorded as an absolute path?" will not stay to be the only special case in niche applications like "repair", but we need to audit callers of the _gently() function and make sure they do not barf with the new return code.

If not, perhaps introduce a separate function that returns the path it read without any conversion, i.e.,

    char *read_raw_gitfile(const char *path);

that "repair" thing can use, and have it do the relateve-to-absolute converaion itself, perhaps? That function would be created by moving most of the code from read_gitfile_gently() and read_gitfile_gently() would become a very thin wrapper around that function. Wouldn't that be the least invasive and cleanest solution, if it works?

Thanks.
Previous: Yoichi NAKAYAMA via GitGitGadgetNext: Yoichi Nakayama
Message 2 of 12 in “worktree repair: detect relative path in .git file correctly”
  1. worktree repair: detect relative path in .git file correctlyYoichi NAKAYAMA via GitGitGadget, Aug 15, 2026
  2. Junio C HamanoAug 17, 2026
  3. Yoichi NakayamaAug 17, 2026
  4. worktree repair: detect relative path in .git file correctlyYoichi NAKAYAMA via GitGitGadget, Aug 20, 2026
  5. Junio C HamanoAug 21, 2026
  6. worktree repair: detect relative path in .git file correctlyYoichi NAKAYAMA via GitGitGadget, Aug 21, 2026
  7. Junio C HamanoAug 21, 2026
  8. Junio C HamanoAug 21, 2026
  9. Yoichi NakayamaAug 27, 2026
  10. Junio C HamanoAug 27, 2026
  11. worktree repair: detect relative path in .git file correctlyYoichi NAKAYAMA via GitGitGadget, Aug 28, 2026
  12. Junio C HamanoAug 28, 2026

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.