Re: [PATCH 19/25] pickaxe -G: set -U0 for diff generation
From: Junio C Hamano <hidden>
Date: 2021-02-03 19:43:38
Ævar Arnfjörð Bjarmason [off-list ref] writes:
I since discovered Junio's f01cae918f (diff: teach --stat/--numstat to honor -U$num, 2011-09-22) (as an aside we have no test for that behavior). I haven't looked carefully, but I don't think we'll have the same issue here, as pickaxe currently doesn't care about whether something is on the + or - line, when briefly looking at the diffstat edge cases it seems that's what differs based on -U<n> for the diffstat.
With -U0 or different <n> in general, the matching between preimage and postimage may become different, and both -U3 (usual) and -U0 may express the same change "correctly" from the point of view of a program like "git apply", but humans would see them as different patches, and "diffstat" that counts number of +/- would give different results. The patch IDs may also be different. The old commit was to pessimize the logic (because we do not need context just to count +/- lines for the purpose of diffstat) to match human expectations. They expect "'diffstat' must be counting 'diff -p' output" and we were counting "diff -p -U0" instead, resulting in different numbers. With internally using -U0, the updated "pickaxe -G" is likely to get the same complaints: "'pickaxe -G<token>' found this commit, but in the 'git show' output, the token does not seem to be affected". You'd respond to "try 'git show -U0' and now you'd see the <token>", but again that is probably breaking human expectations.