]> git.ipfire.org Git - thirdparty/git.git/commit - diff.c
patch-id: fix stable patch id for binary / header-only
authorJerry Zhang <jerry@skydio.com>
Mon, 24 Oct 2022 20:07:39 +0000 (20:07 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 24 Oct 2022 22:44:19 +0000 (15:44 -0700)
commit0570be79ead35e47e29ee2587e2c8ea47c091d49
treea3441183faeb2ecb4ff8e854ed4dc0d2c06c5955
parenta0feb8611d4c0b2b5d954efe4e98207f62223436
patch-id: fix stable patch id for binary / header-only

Patch-ids for binary patches are found by hashing the object
ids of the before and after objects in succession. However in
the --stable case, there is a bug where hunks are not flushed
for binary and header-only patch ids, which would always result
in a patch-id of 0000. The --unstable case is currently correct.

Reorder the logic to branch into 3 cases for populating the
patch body: header-only which populates nothing, binary which
populates the object ids, and normal which populates the text
diff. All branches will end up flushing the hunk.

Don't populate the ---a/ and +++b/ lines for binary diffs, to correspond
to those lines not being present in the "git diff" text output.
This is necessary because we advertise that the patch-id calculated
internally and used in format-patch is the same that what the
builtin "git patch-id" would produce when piped from a diff.

Update the test to run on both binary and normal files.

Signed-off-by: Jerry Zhang <jerry@skydio.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c
t/t3419-rebase-patch-id.sh