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

Re: Regression: submodule worktrees can clobber core.worktree config

From
Stefan Beller <sbeller@google.com>
Date
Jan 10, 2019, 20:07 UTC
Message-ID
<CAGZ79kZ9ibM4eDyK=M6YWEDsjt+JfqJH-Gm56+092VATGuZDaw@mail.gmail.com>
In-Reply-To
<CAG0vfyR3KnDDBrpyG-n-RFbu-xgCLFUa6HUXQ+dk8E4HutR+ow@mail.gmail.com>
Show 9 quoted lines
> I had a look at https://gitlab.com/pclouds/git/commits/submodules-in-worktrees,
> and it doesn't seem to be quite all okay.
>
> The submodule update step of the repro (that breaks the config on 2.20) emits
> an error message instead, and leaves the config unchanged:
>    git -C b2 submodule update
>    fatal: could not set 'core.worktree' to '../../../../../../b2/a'
> It looks a bit like it's still trying to do the wrong thing, but errors out
> during the attempt (repo_config_set_worktree_gently returns false).

There is more than just that. After adding the worktrees, (and after the first status call)

    $ cat b2/.git
gitdir: /u/git/t/trash directory.t7419-submodule-worktrees/b/.git/worktrees/b2
    $ cat b2/a/.git
gitdir: /u/git/t/trash
directory.t7419-submodule-worktrees/b/.git/modules/a/worktrees/a

Are worktrees using absolute path for their gitlinks? Submodules themselves try really hard to use relative path:

    $ cat b/a/.git
gitdir: ../.git/modules/a
> Curiously, even though it says "fatal", it will then perform the actual
> submodule update if it's required.

Oh. :/ I think we should solve that by either warning (but that gives bad UX) or actually aborting, by adding a "|| exit 1" in git-submodule.sh in cmd_update where we call "git submodule--helper ensure-core-worktree".

When we run "git -C b2 submodule update", it calls "git submodule--helper ensure-core-worktree a" which currently would make sure that b2/a/.git points to b2/.git/modules/a, but that is not the case as b2 and b2/a are worktrees, whose git directories are housed in b/.git/worktrees.

So maybe we need to be a bit more careful and check if b2/a/.git resolves to a worktree and if so we'd not touch it at all (and warn about it?).

Show 9 quoted lines
>
> Same behavior on master with a subset of that branch cherry-picked, that is:
> https://gitlab.com/pclouds/git/commit/94751ada7c32eb6fb2c67dd7723161d1955a5683
> along with two others it needed to build:
> https://gitlab.com/pclouds/git/commit/d26ab4c5013f6117814161be3e87c8d2b73561a4
> https://gitlab.com/pclouds/git/commit/b2e21eece6b35e00707ed3a8377a84a95da6b778
>
> --
> Tomasz Śniatowski
Previous: Tomasz ŚniatowskiNext: Duy Nguyen
Message 7 of 8 in “Regression: submodule worktrees can clobber core.worktree config”
  1. Tomasz ŚniatowskiJan 8, 2019
  2. Duy NguyenJan 8, 2019
  3. Tomasz ŚniatowskiJan 9, 2019
  4. Duy NguyenJan 9, 2019
  5. Stefan BellerJan 9, 2019
  6. Tomasz ŚniatowskiJan 9, 2019
  7. Stefan BellerJan 10, 2019
  8. Duy NguyenJan 11, 2019

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.