submodule status: correct path handling in recursive submodules
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.
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
			
			
				maint
			
			
		
							parent
							
								
									c1ab00fb26
								
							
						
					
					
						commit
						10450cf72b
					
				|  | @ -1159,6 +1159,7 @@ cmd_status() | ||||||
| 			( | 			( | ||||||
| 				prefix="$displaypath/" | 				prefix="$displaypath/" | ||||||
| 				clear_local_git_env | 				clear_local_git_env | ||||||
|  | 				wt_prefix= | ||||||
| 				cd "$sm_path" && | 				cd "$sm_path" && | ||||||
| 				eval cmd_status | 				eval cmd_status | ||||||
| 			) || | 			) || | ||||||
|  |  | ||||||
|  | @ -277,6 +277,27 @@ test_expect_success 'ensure "status --cached --recursive" preserves the --cached | ||||||
| 	test_cmp expect actual | 	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' ' | test_expect_success 'use "git clone --recursive" to checkout all submodules' ' | ||||||
| 	git clone --recursive super clone4 && | 	git clone --recursive super clone4 && | ||||||
| 	( | 	( | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Stefan Beller
						Stefan Beller