# git diff --submodule=diff fails with submodules in a submodule

5 messages from 2017-03-31 to 2017-03-31. Participants: David Parrish, Stefan Beller, Jacob Keller, Junio C Hamano.
Thread: https://gitlist.dev/t/45566

## David Parrish, 2017-03-31 15:40

Subject: git diff --submodule=diff fails with submodules in a submodule
Message-ID: <CAPd5SoV1F7MMDSRGzrd-7soty=61vnumQ02UtBJs2fwEyv+V3Q@mail.gmail.com>
URL: https://gitlist.dev/e/CAPd5SoV1F7MMDSRGzrd-7soty%3D61vnumQ02UtBJs2fwEyv%2BV3Q%40mail.gmail.com

```
When I try to run `git diff --submodule=diff` in a submodule which has
it's own submodules that have changes I get the error: fatal: bad
object

Let me know if you need an example reproduce the issue.

David

```

## Stefan Beller, 2017-03-31 17:07

Subject: Re: git diff --submodule=diff fails with submodules in a submodule
Message-ID: <CAGZ79kapamr4=C_JQ4Ud2bF6NoXn8qeQR1fYScWB4+-EzEckmQ@mail.gmail.com>
URL: https://gitlist.dev/e/CAGZ79kapamr4%3DC_JQ4Ud2bF6NoXn8qeQR1fYScWB4%2B-EzEckmQ%40mail.gmail.com
In-Reply-To: <CAPd5SoV1F7MMDSRGzrd-7soty=61vnumQ02UtBJs2fwEyv+V3Q@mail.gmail.com>

```
+cc Jacob, who implemented --submodule=diff

On Fri, Mar 31, 2017 at 8:40 AM, David Parrish <daveparrish@gmail.com> wrote:
> When I try to run `git diff --submodule=diff` in a submodule which has
> it's own submodules that have changes I get the error: fatal: bad
> object

Thanks for the bug report!

> Let me know if you need an example reproduce the issue.

I could reproduce it when playing around locally with a submodule in
submodules. I think sub-submodule needs to have its HEAD moved from
the recorded commit.

Thanks,
Stefan

```

## Jacob Keller, 2017-03-31 17:31

Subject: Re: git diff --submodule=diff fails with submodules in a submodule
Message-ID: <CA+P7+xoqWCpySc17104zggLgwx1mc0T+JXybrgd8sQxoQFP-PQ@mail.gmail.com>
URL: https://gitlist.dev/e/CA%2BP7%2BxoqWCpySc17104zggLgwx1mc0T%2BJXybrgd8sQxoQFP-PQ%40mail.gmail.com
In-Reply-To: <CAGZ79kapamr4=C_JQ4Ud2bF6NoXn8qeQR1fYScWB4+-EzEckmQ@mail.gmail.com>

```
On Fri, Mar 31, 2017 at 10:07 AM, Stefan Beller <sbeller@google.com> wrote:
> +cc Jacob, who implemented --submodule=diff
>
> On Fri, Mar 31, 2017 at 8:40 AM, David Parrish <daveparrish@gmail.com> wrote:
>> When I try to run `git diff --submodule=diff` in a submodule which has
>> it's own submodules that have changes I get the error: fatal: bad
>> object
>
> Thanks for the bug report!
>
>> Let me know if you need an example reproduce the issue.
>
> I could reproduce it when playing around locally with a submodule in
> submodules. I think sub-submodule needs to have its HEAD moved from
> the recorded commit.
>
> Thanks,
> Stefan

Hmm. An example reproduction would be helpful. Ideally in the form of
a test ;) But otherwise whatever helps. I will try to look at this,
but I'm  busy for a few days.

Thanks,
Jake

```

## Stefan Beller, 2017-03-31 17:59

Subject: [PATCH] failure with diff --submodule=diff with moved nested submodule HEAD
Message-ID: <20170331175907.17400-1-sbeller@google.com>
URL: https://gitlist.dev/e/20170331175907.17400-1-sbeller%40google.com
In-Reply-To: <CA+P7+xoqWCpySc17104zggLgwx1mc0T+JXybrgd8sQxoQFP-PQ@mail.gmail.com>

```
This fails reliable for me.

Signed-off-by: Stefan Beller <sbeller@google.com>
---
 t/t4060-diff-submodule-option-diff-format.sh | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/t/t4060-diff-submodule-option-diff-format.sh b/t/t4060-diff-submodule-option-diff-format.sh
index 7e23b55ea4..89bced3484 100755
--- a/t/t4060-diff-submodule-option-diff-format.sh
+++ b/t/t4060-diff-submodule-option-diff-format.sh
@@ -746,4 +746,20 @@ test_expect_success 'diff --submodule=diff with .git file' '
 	test_cmp expected actual
 '
 
+test_expect_success 'setup nested submodule' '
+	git submodule add -f ./sm2 &&
+	git commit -a -m "add sm2" &&
+	git -C sm2 submodule add ../sm2 &&
+	git -C sm2 commit -a -m "nested sub"
+'
+
+test_expect_success 'move nested submodule HEAD' '
+	git -C sm2/sm2 commit --allow-empty -m "new HEAD"
+'
+
+test_expect_success 'diff --submodule=diff with moved nested submodule HEAD' '
+	git -C sm2 diff --submodule=diff >actual 2>err &&
+	test_must_be_empty err
+'
+
 test_done
-- 
2.12.2.511.g2abb8caf66


```

## Junio C Hamano, 2017-03-31 19:38

Subject: Re: [PATCH] failure with diff --submodule=diff with moved nested submodule HEAD
Message-ID: <xmqqk275xmmu.fsf@gitster.mtv.corp.google.com>
URL: https://gitlist.dev/e/xmqqk275xmmu.fsf%40gitster.mtv.corp.google.com
In-Reply-To: <20170331175907.17400-1-sbeller@google.com>

```
Stefan Beller <sbeller@google.com> writes:

> This fails reliable for me.
>
> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---

I take it that this is a WIP for the testing half of the patch you
are working on (i.e. you are not just throwing a patch to document
known breakage to be fixed later, in which case these would have
been _expect_failure).

Thanks.

>  t/t4060-diff-submodule-option-diff-format.sh | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
>
> diff --git a/t/t4060-diff-submodule-option-diff-format.sh b/t/t4060-diff-submodule-option-diff-format.sh
> index 7e23b55ea4..89bced3484 100755
> --- a/t/t4060-diff-submodule-option-diff-format.sh
> +++ b/t/t4060-diff-submodule-option-diff-format.sh
> @@ -746,4 +746,20 @@ test_expect_success 'diff --submodule=diff with .git file' '
>  	test_cmp expected actual
>  '
>  
> +test_expect_success 'setup nested submodule' '
> +	git submodule add -f ./sm2 &&
> +	git commit -a -m "add sm2" &&
> +	git -C sm2 submodule add ../sm2 &&
> +	git -C sm2 commit -a -m "nested sub"
> +'
> +
> +test_expect_success 'move nested submodule HEAD' '
> +	git -C sm2/sm2 commit --allow-empty -m "new HEAD"
> +'
> +
> +test_expect_success 'diff --submodule=diff with moved nested submodule HEAD' '
> +	git -C sm2 diff --submodule=diff >actual 2>err &&
> +	test_must_be_empty err
> +'
> +
>  test_done

```
