From: Ramsay Jones Date: Thu, 03 May 2018 13:29:46 GMT Subject: Re: [PATCH 1/5] submodule foreach: correct '$path' in nested submodules from a subdirectory Message-ID: In-Reply-To: <20180503005358.89082-2-sbeller@google.com> On 03/05/18 01:53, Stefan Beller wrote: > From: Prathamesh Chavan > > When running 'git submodule foreach --recursive' from a subdirectory of > your repository, nested submodules get a bogus value for $path: > For a submodule 'sub' that contains a nested submodule 'nested', > running 'git -C dir submodule foreach echo $path' from the root of the > superproject would report path='../nested' for the nested submodule. > The first part '../' is derived from the logic computing the relative > path from $pwd to the root of the superproject. The second part is the > submodule path inside the submodule. This value is of little use and is > hard to document. > > There are three different possible solutions that have more value: > (a) The path value is documented as the path from the toplevel of the > superproject to the mount point of the submodule. If 'the' refers to > the superproject holding this submodule ('sub' holding 'nested'), > the path would be expected to be path='nested'. > (b) In case 'the' superproject is referring to the toplevel, which > is the superproject in which the original command was invoked, > then path is expected to be path='sub/nested'. > (c) The documentation explains $path as [...] "relative to the > superproject", following 091a6eb0fe (submodule: drop the > top-level requirement, 2013-06-16), such that the nested submodule > would be expected as path='../sub/nested', when "the" superproject > is the superproject, where the command was run from > (d) or the value of path='nested' is expected if we take the > intermediate superproject into account. [This is the same as > (a); it highlights that the documentation is not clear, but > technically correct if we were to revert 091a6eb0fe.] > > The behavior for (c) was introduced in 091a6eb0fe (submodule: drop the > top-level requirement, 2013-06-16) the intent for $path seemed to be > relative to $cwd to the submodule worktree, but that did not work for > nested submodules, as the intermittent submodules were not included in ----------------------------^^^^^^^^^^^^ intermediate ATB, Ramsay Jones