Subject: Re: [PATCH] ls-files: support --recurse-submodules --stage

From: Junio C Hamano <[email-masked]>
Date: Mon, 21 Feb 2022 10:19:24 -0800

Ævar Arnfjörð Bjarmason <[email-masked]> writes:

> This test though will break, as you can see with:
>
>     GIT_TEST_DEFAULT_HASH=sha256 ./t3007-ls-files-recurse-submodules.sh
>
> So you'll need at least something like:
>
> diff --git a/t/t3007-ls-files-recurse-submodules.sh b/t/t3007-ls-files-recurse-submodules.sh
> index 3d2da360d17..0fe69da8dcf 100755
> --- a/t/t3007-ls-files-recurse-submodules.sh
> +++ b/t/t3007-ls-files-recurse-submodules.sh
> @@ -42,10 +42,10 @@ test_expect_success '--stage' '
>  	echo brigddsv >submodule/c &&
>  	git -C submodule commit -am "update c again" &&
>  
> -	cat >expect <<-\EOF &&
> -	100644 6da7 0	.gitmodules
> -	100644 7898 0	a
> -	100644 6178 0	b/b
> +	cat >expect <<-EOF &&
> +	100644 $(git rev-parse --short=4 HEAD:.gitmodules) 0	.gitmodules
> +	100644 $(git rev-parse --short=4 HEAD:a) 0	a
> +	100644 $(git rev-parse --short=4 HEAD:b/b) 0	b/b
>  	100644 dead9 0	submodule/c
>  	EOF
>  
> But then the problem is that one is dead9 and the other dead6, I was
> just trying to find 4-char prefixes.
>
> But having indulged in all that, I'm now entirely confused about why any
> of this needs to be tested here.
>
> You're adding --stage, which will give us --stage-y output, and it was
> previously incompatible with --recurse-submodules. Having the two
> combine is good!

I think what this is trying to make sure is that it (1) enabled the
combination and (2) uses the object store of the submodule when
disambiguating names of the objects from the submodule, because the
author suspects that the reason why these two options were made
incompatible in the first place was because long time ago there
wasn't a way to ask "here is an object name---please uniquify in the
context of _that_ repository".  So it is understandable to prepare
an object X in a submodule and another object Y in the superproject,
such that the abbreviated name of X in the context of the submodule
is different from the abbreviated name of X in the context of the
superproject (i.e. if X were in the superproject's object store,
because the object names of X and Y share the prefix, it may require
longer prefix to disambiguate from Y), and make sure that the uniquify
is indeed happening in the context of the submodule.

So, you are only concentrating on (1) but forgetting why the author
wants (2).