Stefan Beller <sbeller@xxxxxxxxxx> writes: > The new test which is a replica of the previous test except > that it executes from a sub directory. Prior to this patch > the test failed by having too many '../' prefixed: > > --- expect 2016-03-29 19:02:33.087336115 +0000 > +++ actual 2016-03-29 19:02:33.359343311 +0000 > @@ -1,7 +1,7 @@ > b23f134787d96fae589a6b76da41f4db112fc8db ../nested1 (heads/master) > -+25d56d1ddfb35c3e91ff7d8f12331c2e53147dcc ../nested1/nested2 (file2) > - 5ec83512b76a0b8170b899f8e643913c3e9b72d9 ../nested1/nested2/nested3 (heads/master) > - 509f622a4f36a3e472affcf28fa959174f3dd5b5 ../nested1/nested2/nested3/submodule (heads/master) > ++25d56d1ddfb35c3e91ff7d8f12331c2e53147dcc ../../nested1/nested2 (file2) > + 5ec83512b76a0b8170b899f8e643913c3e9b72d9 ../../../nested1/nested2/nested3 (heads/master) > + 509f622a4f36a3e472affcf28fa959174f3dd5b5 ../../../../nested1/nested2/nested3/submodule (heads/master) > 0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f ../sub1 (0c90624) > 0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f ../sub2 (0c90624) > 509f622a4f36a3e472affcf28fa959174f3dd5b5 ../sub3 (heads/master) > > The path code in question: > displaypath=$(relative_path "$prefix$sm_path") > prefix=$displaypath > if recursive: > eval cmd_status > > That way we change `prefix` each iteration to contain another > '../', because of the the relative_path computation is done > on an already computed relative path. > > We must call relative_path exactly once with `wt_prefix` non empty. > Further calls in recursive instances to to calculate the displaypath > already incorporate the correct prefix from before. Fix the issue by > clearing `wt_prefix` in recursive calls. OK, nicely analyzed and explained. > Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> > --- > git-submodule.sh | 1 + > t/t7407-submodule-foreach.sh | 21 +++++++++++++++++++++ > 2 files changed, 22 insertions(+) > > diff --git a/git-submodule.sh b/git-submodule.sh > index fdb5fbd..11ed32a 100755 > --- a/git-submodule.sh > +++ b/git-submodule.sh > @@ -1160,6 +1160,7 @@ cmd_status() > ( > prefix="$displaypath/" > clear_local_git_env > + wt_prefix= > cd "$sm_path" && > eval cmd_status > ) || Makes sense. Thanks. > diff --git a/t/t7407-submodule-foreach.sh b/t/t7407-submodule-foreach.sh > index 776b349..4b35e12 100755 > --- a/t/t7407-submodule-foreach.sh > +++ b/t/t7407-submodule-foreach.sh > @@ -277,6 +277,27 @@ test_expect_success 'ensure "status --cached --recursive" preserves the --cached > test_cmp expect actual > ' > > +nested2sha1=$(git -C clone3/nested1/nested2 rev-parse HEAD) > + > +cat > expect <<EOF > + $nested1sha1 ../nested1 (heads/master) > ++$nested2sha1 ../nested1/nested2 (file2) > + $nested3sha1 ../nested1/nested2/nested3 (heads/master) > + $submodulesha1 ../nested1/nested2/nested3/submodule (heads/master) > + $sub1sha1 ../sub1 ($sub1sha1_short) > + $sub2sha1 ../sub2 ($sub2sha1_short) > + $sub3sha1 ../sub3 (heads/master) > +EOF > + > +test_expect_success 'test "status --recursive" from sub directory' ' > + ( > + cd clone3 && > + mkdir tmp && cd tmp && > + git submodule status --recursive > ../../actual > + ) && > + test_cmp expect actual > +' > + > test_expect_success 'use "git clone --recursive" to checkout all submodules' ' > git clone --recursive super clone4 && > ( -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html