All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] submodule: test moving recursive submodule
@ 2016-06-28  0:15 Stefan Beller
  2016-06-28  6:13 ` Bart Bogaerts
  0 siblings, 1 reply; 4+ messages in thread
From: Stefan Beller @ 2016-06-28  0:15 UTC (permalink / raw)
  To: bartbogaerts; +Cc: git, Stefan Beller

Signed-off-by: Stefan Beller <sbeller@google.com>
---
This tries to reproduce the error as pointed out in
http://stackoverflow.com/questions/32782382/git-moving-submodules-recursively-nested-submodules
but the tests pass. This still seems to be missing a detail.

Bart any idea how this setup may be different than what you have?
Instead of applying the patch, you can also checkout 
https://github.com/stefanbeller/git/tree/submodule_recursive_mv_test
which is the patch below applied on top of Junios (the maintainer) master branch.
To look around on the filesystem, you can drop "test_pause &&" in a test and
then run the test with `(cd t && ./t7001-mv.sh -v)` (more info how to run tests
in the Git test suite in t/README, maybe -i -v -x are interested)

Thanks,
Stefan

 t/t7001-mv.sh | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/t/t7001-mv.sh b/t/t7001-mv.sh
index 4a2570e..404e5bd 100755
--- a/t/t7001-mv.sh
+++ b/t/t7001-mv.sh
@@ -295,6 +295,28 @@ test_expect_success 'setup submodule' '
 	mkdir -p deep/directory/hierachy &&
 	git submodule add ./. deep/directory/hierachy/sub &&
 	git commit -m "added another submodule" &&
+	mkdir inner_sub &&
+	(
+		cd inner_sub &&
+		git init &&
+		test_commit initial
+	) &&
+	mkdir outer_sub &&
+	(
+		cd outer_sub &&
+		git init &&
+		test_commit initial &&
+		git submodule add ../inner_sub &&
+		git commit -a -m "add an inner submodule"
+	) &&
+	git submodule add ./outer_sub ./deep/outer_sub &&
+	git commit -a -m "add outer sub" &&
+	git -C deep ls-tree HEAD |cut -f 2 >actual &&
+	cat >expect <<-EOF &&
+	directory
+	outer_sub
+	EOF
+	test_cmp expect actual &&
 	git branch submodule
 '
 
@@ -488,6 +510,27 @@ test_expect_success 'moving a submodule in nested directories' '
 		git config -f ../.gitmodules submodule.deep/directory/hierachy/sub.path >../actual &&
 		echo "directory/hierachy/sub" >../expect
 	) &&
+	test_cmp actual expect &&
+	git commit -a -m "mv a submodule in nested dir"
+'
+
+test_expect_success 'moving a submodule with a nested submodule' '
+	git mv deep/outer_sub outer_sub_moved &&
+	# git status would fail if the update of linking git dir to
+	# work dir of the submodule failed.
+	git status &&
+	git config -f .gitmodules submodule.deep/outer_sub.path >actual &&
+	echo "outer_sub_moved" >expect &&
+	test_cmp actual expect
+'
+
+test_expect_success 'moving back the submodule with a nested submodule' '
+	git mv outer_sub_moved deep/outer_sub &&
+	# git status would fail if the update of linking git dir to
+	# work dir of the submodule failed.
+	git status &&
+	git config -f .gitmodules submodule.deep/outer_sub.path >actual &&
+	echo "deep/outer_sub" >expect &&
 	test_cmp actual expect
 '
 
-- 
2.9.0.4.g35eb263.dirty


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] submodule: test moving recursive submodule
  2016-06-28  0:15 [PATCH] submodule: test moving recursive submodule Stefan Beller
@ 2016-06-28  6:13 ` Bart Bogaerts
  2016-06-28  6:28   ` Bart Bogaerts
  0 siblings, 1 reply; 4+ messages in thread
From: Bart Bogaerts @ 2016-06-28  6:13 UTC (permalink / raw)
  To: Stefan Beller; +Cc: git

The only thing I still see that might cause the bug is that there is no

git submodule update --recursive

present in your test cases .
This command creates the .git file in the nested subsubmodule
It is that .git file that is not correctly updated in the move.

So after the line
+       git submodule add ./outer_sub ./deep/outer_sub &&
I would add
+       git submodule update -- recursive &&

2016-06-28 3:15 GMT+03:00 Stefan Beller <sbeller@google.com>:
> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---
> This tries to reproduce the error as pointed out in
> http://stackoverflow.com/questions/32782382/git-moving-submodules-recursively-nested-submodules
> but the tests pass. This still seems to be missing a detail.
>
> Bart any idea how this setup may be different than what you have?
> Instead of applying the patch, you can also checkout
> https://github.com/stefanbeller/git/tree/submodule_recursive_mv_test
> which is the patch below applied on top of Junios (the maintainer) master branch.
> To look around on the filesystem, you can drop "test_pause &&" in a test and
> then run the test with `(cd t && ./t7001-mv.sh -v)` (more info how to run tests
> in the Git test suite in t/README, maybe -i -v -x are interested)
>
> Thanks,
> Stefan
>
>  t/t7001-mv.sh | 43 +++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 43 insertions(+)
>
> diff --git a/t/t7001-mv.sh b/t/t7001-mv.sh
> index 4a2570e..404e5bd 100755
> --- a/t/t7001-mv.sh
> +++ b/t/t7001-mv.sh
> @@ -295,6 +295,28 @@ test_expect_success 'setup submodule' '
>         mkdir -p deep/directory/hierachy &&
>         git submodule add ./. deep/directory/hierachy/sub &&
>         git commit -m "added another submodule" &&
> +       mkdir inner_sub &&
> +       (
> +               cd inner_sub &&
> +               git init &&
> +               test_commit initial
> +       ) &&
> +       mkdir outer_sub &&
> +       (
> +               cd outer_sub &&
> +               git init &&
> +               test_commit initial &&
> +               git submodule add ../inner_sub &&
> +               git commit -a -m "add an inner submodule"
> +       ) &&
> +       git submodule add ./outer_sub ./deep/outer_sub &&
> +       git commit -a -m "add outer sub" &&
> +       git -C deep ls-tree HEAD |cut -f 2 >actual &&
> +       cat >expect <<-EOF &&
> +       directory
> +       outer_sub
> +       EOF
> +       test_cmp expect actual &&
>         git branch submodule
>  '
>
> @@ -488,6 +510,27 @@ test_expect_success 'moving a submodule in nested directories' '
>                 git config -f ../.gitmodules submodule.deep/directory/hierachy/sub.path >../actual &&
>                 echo "directory/hierachy/sub" >../expect
>         ) &&
> +       test_cmp actual expect &&
> +       git commit -a -m "mv a submodule in nested dir"
> +'
> +
> +test_expect_success 'moving a submodule with a nested submodule' '
> +       git mv deep/outer_sub outer_sub_moved &&
> +       # git status would fail if the update of linking git dir to
> +       # work dir of the submodule failed.
> +       git status &&
> +       git config -f .gitmodules submodule.deep/outer_sub.path >actual &&
> +       echo "outer_sub_moved" >expect &&
> +       test_cmp actual expect
> +'
> +
> +test_expect_success 'moving back the submodule with a nested submodule' '
> +       git mv outer_sub_moved deep/outer_sub &&
> +       # git status would fail if the update of linking git dir to
> +       # work dir of the submodule failed.
> +       git status &&
> +       git config -f .gitmodules submodule.deep/outer_sub.path >actual &&
> +       echo "deep/outer_sub" >expect &&
>         test_cmp actual expect
>  '
>
> --
> 2.9.0.4.g35eb263.dirty
>



-- 
Bart Bogaerts

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] submodule: test moving recursive submodule
  2016-06-28  6:13 ` Bart Bogaerts
@ 2016-06-28  6:28   ` Bart Bogaerts
  2016-06-28 17:52     ` Stefan Beller
  0 siblings, 1 reply; 4+ messages in thread
From: Bart Bogaerts @ 2016-06-28  6:28 UTC (permalink / raw)
  To: Stefan Beller; +Cc: git

I dit some more testing.

It is important for the bug to occur that all submodules are initialised.
So my suggestion is not yet complete, you need to add the line

git submodule update --recursive --init




Below is a complete script that show the bug occurring:



mkdir repo1 &&
mkdir repo2 &&

(
  cd repo1 &&
  git init &&
  echo "test" >> test.test &&
  git add . &&
  git commit -m "initial commit"
) &&

(
  cd repo2 &&
  git init &&
  git submodule add ../repo1 &&
  git commit -a -m "added submod"
) &&

#create the directory to test in
(
  mkdir testdir &&
  cd testdir &&
  git init &&
  git submodule add ../repo2 &&
  git commit -m "added full structure" &&
  #important to initialise .git files!
  git submodule update --recursive --init
) &&

(
  cd testdir &&
  mkdir 2015 &&
  git mv repo2 2015 &&
  git status
)

2016-06-28 9:13 GMT+03:00 Bart Bogaerts <bartbogaerts@gmail.com>:
> The only thing I still see that might cause the bug is that there is no
>
> git submodule update --recursive
>
> present in your test cases .
> This command creates the .git file in the nested subsubmodule
> It is that .git file that is not correctly updated in the move.
>
> So after the line
> +       git submodule add ./outer_sub ./deep/outer_sub &&
> I would add
> +       git submodule update -- recursive &&
>
> 2016-06-28 3:15 GMT+03:00 Stefan Beller <sbeller@google.com>:
>> Signed-off-by: Stefan Beller <sbeller@google.com>
>> ---
>> This tries to reproduce the error as pointed out in
>> http://stackoverflow.com/questions/32782382/git-moving-submodules-recursively-nested-submodules
>> but the tests pass. This still seems to be missing a detail.
>>
>> Bart any idea how this setup may be different than what you have?
>> Instead of applying the patch, you can also checkout
>> https://github.com/stefanbeller/git/tree/submodule_recursive_mv_test
>> which is the patch below applied on top of Junios (the maintainer) master branch.
>> To look around on the filesystem, you can drop "test_pause &&" in a test and
>> then run the test with `(cd t && ./t7001-mv.sh -v)` (more info how to run tests
>> in the Git test suite in t/README, maybe -i -v -x are interested)
>>
>> Thanks,
>> Stefan
>>
>>  t/t7001-mv.sh | 43 +++++++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 43 insertions(+)
>>
>> diff --git a/t/t7001-mv.sh b/t/t7001-mv.sh
>> index 4a2570e..404e5bd 100755
>> --- a/t/t7001-mv.sh
>> +++ b/t/t7001-mv.sh
>> @@ -295,6 +295,28 @@ test_expect_success 'setup submodule' '
>>         mkdir -p deep/directory/hierachy &&
>>         git submodule add ./. deep/directory/hierachy/sub &&
>>         git commit -m "added another submodule" &&
>> +       mkdir inner_sub &&
>> +       (
>> +               cd inner_sub &&
>> +               git init &&
>> +               test_commit initial
>> +       ) &&
>> +       mkdir outer_sub &&
>> +       (
>> +               cd outer_sub &&
>> +               git init &&
>> +               test_commit initial &&
>> +               git submodule add ../inner_sub &&
>> +               git commit -a -m "add an inner submodule"
>> +       ) &&
>> +       git submodule add ./outer_sub ./deep/outer_sub &&
>> +       git commit -a -m "add outer sub" &&
>> +       git -C deep ls-tree HEAD |cut -f 2 >actual &&
>> +       cat >expect <<-EOF &&
>> +       directory
>> +       outer_sub
>> +       EOF
>> +       test_cmp expect actual &&
>>         git branch submodule
>>  '
>>
>> @@ -488,6 +510,27 @@ test_expect_success 'moving a submodule in nested directories' '
>>                 git config -f ../.gitmodules submodule.deep/directory/hierachy/sub.path >../actual &&
>>                 echo "directory/hierachy/sub" >../expect
>>         ) &&
>> +       test_cmp actual expect &&
>> +       git commit -a -m "mv a submodule in nested dir"
>> +'
>> +
>> +test_expect_success 'moving a submodule with a nested submodule' '
>> +       git mv deep/outer_sub outer_sub_moved &&
>> +       # git status would fail if the update of linking git dir to
>> +       # work dir of the submodule failed.
>> +       git status &&
>> +       git config -f .gitmodules submodule.deep/outer_sub.path >actual &&
>> +       echo "outer_sub_moved" >expect &&
>> +       test_cmp actual expect
>> +'
>> +
>> +test_expect_success 'moving back the submodule with a nested submodule' '
>> +       git mv outer_sub_moved deep/outer_sub &&
>> +       # git status would fail if the update of linking git dir to
>> +       # work dir of the submodule failed.
>> +       git status &&
>> +       git config -f .gitmodules submodule.deep/outer_sub.path >actual &&
>> +       echo "deep/outer_sub" >expect &&
>>         test_cmp actual expect
>>  '
>>
>> --
>> 2.9.0.4.g35eb263.dirty
>>
>
>
>
> --
> Bart Bogaerts



-- 
Bart Bogaerts

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] submodule: test moving recursive submodule
  2016-06-28  6:28   ` Bart Bogaerts
@ 2016-06-28 17:52     ` Stefan Beller
  0 siblings, 0 replies; 4+ messages in thread
From: Stefan Beller @ 2016-06-28 17:52 UTC (permalink / raw)
  To: Bart Bogaerts; +Cc: git

On Mon, Jun 27, 2016 at 11:28 PM, Bart Bogaerts <bartbogaerts@gmail.com> wrote:
> I dit some more testing.
>
> It is important for the bug to occur that all submodules are initialised.
> So my suggestion is not yet complete, you need to add the line

Oh right. I was completely oblivious to that.

>
> git submodule update --recursive --init

Adding the initialization makes my test cases fail as well.

Thanks,
Stefan

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-06-28 17:52 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-28  0:15 [PATCH] submodule: test moving recursive submodule Stefan Beller
2016-06-28  6:13 ` Bart Bogaerts
2016-06-28  6:28   ` Bart Bogaerts
2016-06-28 17:52     ` Stefan Beller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.