Thread (47 messages) 47 messages, 5 authors, 2021-12-22

Re: [PATCH 2/2] ls-files: add --sparse option

From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2021-12-10 15:22:03

On Fri, Dec 10 2021, Derrick Stolee wrote:
On 12/9/2021 7:50 AM, Ævar Arnfjörð Bjarmason wrote:
quoted
On Wed, Dec 08 2021, Derrick Stolee wrote:
quoted
On 12/8/2021 1:36 PM, Elijah Newren wrote:
quoted
On Wed, Dec 8, 2021 at 10:23 AM Derrick Stolee [off-list ref] wrote:
quoted
On 12/8/2021 12:04 PM, Elijah Newren wrote:
quoted
This actually looks quite nice, though the magic '16' is kind of
annoying.  Could we get rid of that -- perhaps using something to rip
out the diff header, or using comm instead?
What I really want is "remove the first two lines of this file"
Is `tail -n +3` portable?  Looks like we have five uses of tail -n +N
in the testsuite, so it should be okay to use.
Ah, that's the magic incantation. Sounds good.
quoted
quoted
but perhaps "tail -n $(wc -l expect)" would suffice to avoid a
magic number?
That works too.
If the "-n +X" syntax works, then I'll opt for that.
I think it should be per
https://pubs.opengroup.org/onlinepubs/009695299/utilities/tail.html

But isn't that "diff -u" non-portable, per GIT_TEST_CMP. I.e. sometimes
we'll fall back on "cmp" etc.
You're talking about this hunk, right?

if test -z "$GIT_TEST_CMP"
then
	if test -n "$GIT_TEST_CMP_USE_COPIED_CONTEXT"
	then
		GIT_TEST_CMP="$DIFF -c"
	else
		GIT_TEST_CMP="$DIFF -u"
	fi
fi

This only switches from "diff -u" to "diff -c" if the
GIT_TEST_CMP_USE_COPIED_CONTEXT variable is set, but it is not set
by default. Thus, we are using "diff -u" by default throughout.

Please let me know if I'm misreading this.
Yes and no. Yes it's not on by default, but the reason (well, maybe not
*the* reason, but definitely one reason) we have GIT_TEST_CMP is because
-u isn't portable.

It's not in POSIX, and not just in the theoretical sense, e.g. when I
run tests on HP/UX it'll yell at me about not knowing about -u until I
adjust GIT_TEST_CMP.

Thus you can't use "diff -u" as you did upthread without breaking the
test on those platforms, and you can't execute "$GIT_TEST_CMP" either
because it might use -c, and then your "skip the first three lines"
might not hold.

So even if we avoid using "git" for the actual test helpers themselves
usually using it in this case is probably fine, and a neat way out of
this particular hassle without worrying about portability.

So I don't know if we want a diff here, but if so I think it would be
neat to wrap that in say a "test_cmp_diff" which we'd just use as:

	test_cmp_diff a b <<-\EOF
        <unified diff here>
	EOF

Where under the hood we'd just run:

	git diff --no-index a b >actual
	cat >expect &&
	[ munge diff header here? ] &&
	test_cmp expect actual
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help