Re: [PATCH] new-workdir: Never try to recurse into submodules on the initial checkout.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2019-01-14 4:34 p.m., Jonathan Nieder wrote:
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@xxxxxxxxxxx>
---

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.

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




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux