Re: [PATCH 1/4] submodule: fix recursive path printing from non root directory
- From
Stefan Beller <sbeller@google.com>
- Date
- Mar 25, 2016, 16:54 UTC
- Message-ID
- <CAGZ79kYmVH_6=7y894woObaD4de44d8iUQtcCq6r3grGrMiaxQ@mail.gmail.com>
- In-Reply-To
- <xmqqy4964if7.fsf@gitster.mtv.corp.google.com>
On Fri, Mar 25, 2016 at 9:43 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 26 quoted lines
> Stefan Beller <sbeller@google.com> writes: > >> Recursing into submodules currently works by just calling >> (cd $submodule && eval <command>) for update, sync and status >> command. >> >> 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 being in repo/untracked/ and invoking "git submodule status" >> you would expect output like: >> >> repo/untracked/$ git submodule status --recursive >> <sha1> ../sub (version) >> <sha1> ../sub/subsub (<version>) >> >> We need to take into account that we are in the untracked/ dir, >> so we need to prepend ../ to the paths. By using relative_path >> to compute the prefix, we'll have that output. > > tests to demonstrate existing breakage and protect the fix from > future breakages would be needed, no?
I realize this is worded slightly wrong. The bugs described in patch 1&2 would only occur if we'd apply patch 3 without them. So currently there is no bug.
We currently do have tests for that, e.g. t7403, '"git submodule sync" should update submodule URLs - subdirectory'
In patch 4 I added tests for "git submodule update" and enhanced tests for the sync command.
Show 35 quoted lines
> >> >> Signed-off-by: Stefan Beller <sbeller@google.com> >> --- >> git-submodule.sh | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/git-submodule.sh b/git-submodule.sh >> index 43c68de..536ba68 100755 >> --- a/git-submodule.sh >> +++ b/git-submodule.sh >> @@ -825,7 +825,7 @@ Maybe you want to use 'update --init'?")" >> if test -n "$recursive" >> then >> ( >> - prefix="$prefix$sm_path/" >> + prefix="$(relative_path $prefix$sm_path)/" >> clear_local_git_env >> cd "$sm_path" && >> eval cmd_update >> @@ -1233,13 +1233,13 @@ cmd_sync() >> then >> ( >> clear_local_git_env >> + prefix=$(relative_path "$prefix$sm_path/") >> cd "$sm_path" >> remote=$(get_default_remote) >> git config remote."$remote".url "$sub_origin_url" >> >> if test -n "$recursive" >> then >> - prefix="$prefix$sm_path/" >> eval cmd_sync >> fi >> )