Thread (4 messages) 4 messages, 3 authors, 2025-10-16

Re: [PATCH v4] diff: ensure consistent diff behavior with ignore options

From: Lidong Yan <hidden>
Date: 2025-08-08 02:47:37

Possibly related (same subject, not in this thread)

Junio C Hamano [off-list ref] writes:
Lidong Yan [off-list ref] writes:
quoted
In git-diff, options like `-w` and `-I<regex>` require comparing
file contents to determine whether two files are the same, even when
their SHA values differ.
Let's see if we can do something to clarify "the same" here.
Perhaps

... two files are considered equivalent under the specified
"ignore" rules, even when they are not bit-for-bit identical.
Following the above, perhaps replace "identical" with "equivalent".
Equivalent seems to be a good definition, will replace.
Also, ", Add helper" should be ", add a helper", as that comma is
not finishing a sentence, hence the word that follows it is not at
the beginning of the next sentence.
Also the implementation details like the name of the .diff_options
member and the name of the helper function have changed, and the
proposed log message should be updated to match.
Will fix grammar errors and update log message.
As the "dry_run" variable is used only once in this block, we
probably do not want to add it.
Sure, will fix.
We may want to leave a comment to explain why we ignore the error
return from xdi_diff_outf()?  Perhaps like below?

if (o->dry_run)
/*
                        * Unlike the !dry_run case, we need to ignore the
* return value from xdi_diff_outf() here, because
* xdi_diff_outf() takes non-zero return from its
                        * callback function as a sign of error and returns
        * early (which is why we return non-zer from our
* callback, quick_consume()).  Unfortunately,
* xdi_diff_outf() signals an error by returning
* non-zero.
                        */
xdi_diff_outf(&mf1, &mf2, NULL, quick_consume,
     &ecbdata, &xpp, &xecfg);
I think your comment is good enough so I will just copy it.
In this codebase, these "original value of the variable X was this, we
tentatively save that original value away, tweak the variable X to do
something, and restore the saved value to variable X" variables are often
called "saved_X".
Will rename.
Perhaps use test_grep helper shell function, i.e.

test_grep ! "file1" actual &&
I guess this is because test_grep has more useful debugging information.
Will replace.
quoted
+ git rm -f file1
Is this because later tests will break if you leave "file1" in the working
tree and/or in the index?  If so, we should use test_when_finished to make
such a clean-up.  If you insert
Yes, exactly.
test_when_finished "git rm file1; rm -f file1" &&

at the very beginning, before you create file1 with 1..50, when this test
piece finishes executing (whether it completed successfully, or failed in
the middle of the &&-chain), the specified command will run.
Early on Patrict suggested the same thing, I will read test_when_finish
to see how it works.
On the other hand, if the later tests won't mind whether "file1" does or
does not exist in the working tree and/or in the index, it is common to
leave it behind without cleaning it.  When running the test script with the
"-i" option, i.e.

$ sh t4013-diff-various.sh -i -v
Good thing to know. Just curious, I also found that running ./txxx -v causes
failed results and successful results to be mixed together. Do you usually
solve this by using awk to extract the error messages?
quoted
diff --git a/t/t4015-diff-whitespace.sh b/t/t4015-diff-whitespace.sh
index 52e3e476ff..e7be8c5a8f 100755
--- a/t/t4015-diff-whitespace.sh
+++ b/t/t4015-diff-whitespace.sh
@@ -11,7 +11,7 @@ test_description='Test special whitespace in diff engine.
. "$TEST_DIRECTORY"/lib-diff.sh

for opt_res in --patch --quiet -s --stat --shortstat --dirstat=lines \
-       --raw! --name-only! --name-status!
+       --raw --name-only --name-status
do
Wouldn't this make the "if the option is marked with !, tweak the test that
notices these two equivalent paths are not-identical" extra code, whose
beginning part we see below, unnecessary?  The $expect_failure variable
would always be an empty string, so "different but equivalent" test should
see "git diff --exit-code" exit with status 0, right?
Yes, I will remove the optionally set expect_failure part.

Thank you very much for your review,
Lidong
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help