Re: [PATCH] new-workdir: Never try to recurse into submodules on the initial checkout.
- From
Marc Branchaud <marcnarc@xiplink.com>
- Date
- Jan 15, 2019, 15:01 UTC
- Message-ID
- <d1e1ceb3-a1b8-ff5b-8ebc-79d2ee9267dc@xiplink.com>
- In-Reply-To
- <20190114213430.GC162110@google.com>
On 2019-01-14 4:34 p.m., Jonathan Nieder wrote:
Show 12 quoted lines
> Hi, > > Marc Branchaud wrote: > >> The new workdir is empty before the checkout, so attempts to recurse into >> a non-existent submodule directory fail. >> >> Signed-off-by: Marc Branchaud <marcnarc@xiplink.com> >> --- > > Thanks for reporting. Can you describe the error message when it fails > here?
The error is:
fatal: exec '--super-prefix=external/submodule/': cd to 'external/submodule' failed: No such file or directory
The created workdir has only the .git directory. The .git/HEAD file contains the expected ref, so the workdir repo's status simply shows that everything has been deleted.
Note that git-worktree also fails when submodule.recurse=true, with the same error:
# git worktree add ~/Code/foo/test-worktree Preparing worktree (new branch 'test-worktree') fatal: exec '--super-prefix=external/submodule/': cd to 'external/submodule' failed: No such file or directory error: Submodule 'external/submodule' could not be updated. error: Submodule 'external/submodule' cannot checkout new HEAD. fatal: Could not reset index file to revision 'HEAD'.
I had assumed that this was simply an aspect of submodules not working, so I was holding off reporting it until more of the submodule support was complete.
Show 30 quoted lines
>> Until the worktree command supports submodules I've gone back to using the >> git-new-workdir script, but it fails if my config has >> submdodule.recurse=true. > > Oh, dear. In general, the project does a better job at supporting "git > worktree" than "git new-workdir", but I don't blame you about this. > > Noting locally as another vote for getting submodules to play well with > worktrees soon. > > [...] >> contrib/workdir/git-new-workdir | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/contrib/workdir/git-new-workdir b/contrib/workdir/git-new-workdir >> index 888c34a521..5de1dc3c58 100755 >> --- a/contrib/workdir/git-new-workdir >> +++ b/contrib/workdir/git-new-workdir >> @@ -102,4 +102,4 @@ trap - $siglist >> >> # checkout the branch (either the same as HEAD from the original repository, >> # or the one that was asked for) >> -git checkout -f $branch >> +git -c submodule.recurse=false checkout -f $branch > > nit: can this use "git checkout --no-recurse-submodules" instead > of -c? > > In general, we tend to recommend that kind of option instead of > --config in scripts.
--no-recurse-submodules does work. I'll send a v2.
M.
> Thanks, > Jonathan >