Re: [PATCH 2/4] submodule: fix recursive execution from non root directory
- From
Jacob Keller <jacob.keller@gmail.com>
- Date
- Mar 24, 2016, 23:41 UTC
- Message-ID
- <CA+P7+xqravWtkXQFC2aRg7=-mOdmQgu6Ci9QeFBMYUoy9YejWA@mail.gmail.com>
- In-Reply-To
- <1458862468-12460-3-git-send-email-sbeller@google.com>
On Thu, Mar 24, 2016 at 4:34 PM, Stefan Beller <sbeller@google.com> wrote:
Show 63 quoted lines
> One of the first things that happens in most submodule sub commands is > > git submodule--helper list --prefix "$wt_prefix" > > Currently the passed --prefix is used for doing path calculation > as if we were in that path relative to the repository root, which is > why we need to pass "$wt_prefix". The more common way in Git however > would be to use > > git -C "$wt_prefix" submodule--helper list > > which I want to change later. That way however does not just > pass the prefix into the submodule command, but also changes > into that directory. > > Say you have the following setup > > repo/ # a superproject repository > repo/untracked/ # an untracked dir in repo/ > repo/sub/ # a submodule > repo/sub/subsub # a submodule of a submodule > > When in repo/untracked/ and invoking "git submodule status --recursive", > the recursed instance of the latter version for listing submodules would > try to change into the directory repo/sub/untracked, which is a bug. > This happens as we cd into the submodule in git-submodule.sh without > clearing wt_prefix, which is the assumed relative path inside the working > directory. > > Most times that directory doesn't exist and we error out. Fix this bug > by clearing wt_prefix, such that any recursive instances of will assume > to operate from the respective root of the respective submodule. > > Signed-off-by: Stefan Beller <sbeller@google.com> > --- > git-submodule.sh | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/git-submodule.sh b/git-submodule.sh > index 536ba68..6b18a03 100755 > --- a/git-submodule.sh > +++ b/git-submodule.sh > @@ -827,6 +827,7 @@ Maybe you want to use 'update --init'?")" > ( > prefix="$(relative_path $prefix$sm_path)/" > clear_local_git_env > + wt_prefix= > cd "$sm_path" && > eval cmd_update > ) > @@ -1159,6 +1160,7 @@ cmd_status() > ( > prefix="$displaypath/" > clear_local_git_env > + wt_prefix= > cd "$sm_path" && > eval cmd_status > ) || > @@ -1240,6 +1242,7 @@ cmd_sync() > > if test -n "$recursive" > then > + wt_prefix=
And here I think I see why we moved the original prefix code up some. This looks good.
Show 6 quoted lines
> eval cmd_sync > fi > ) > -- > 2.8.0.rc4.10.g52f3f33 >
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Regards, Jake