Re: Regression: submodule worktrees can clobber core.worktree config
- Date: Thu, 10 Jan 2019 12:07:34 -0800
- From: Stefan Beller <sbeller@xxxxxxxxxx>
- Subject: Re: Regression: submodule worktrees can clobber core.worktree config
> 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
Are worktrees using absolute path for their gitlinks?
Submodules themselves try really hard to use relative path:
$ cat b/a/.git
> 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
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?).
> Same behavior on master with a subset of that branch cherry-picked, that is:
> along with two others it needed to build:
> Tomasz Śniatowski