#!/bin/sh test_description='git patch-id' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME . ./test-lib.sh test_expect_success 'setup' ' as="a a a a a a a a" && # eight a test_write_lines $as >foo && test_write_lines $as >bar && git add foo bar && git commit -a -m initial && test_write_lines $as b >foo && test_write_lines $as b >bar && git commit -a -m first && git checkout -b same main && git commit --amend -m same-msg && git checkout -b notsame main && echo c >foo && echo c >bar && git commit --amend -a -m notsame-msg && test_write_lines bar foo >bar-then-foo && test_write_lines foo bar >foo-then-bar ' test_expect_success 'patch-id output is well-formed' ' git log -p -1 >log.output && git patch-id output && grep "^$OID_REGEX $(git rev-parse HEAD)$" output ' #calculate patch id. Make sure output is not empty. calc_patch_id () { patch_name="$1" shift git patch-id "$@" >patch-id.output && sed "s/ .*//" patch-id.output >patch-id_"$patch_name" && test_line_count -gt 0 patch-id_"$patch_name" } get_top_diff () { git log -p -1 "$@" -O bar-then-foo -- } get_patch_id () { get_top_diff "$1" >top-diff.output && calc_patch_id format-patch.output && calc_patch_id same format-patch.output && sed "s/ \$//" format-patch.output | calc_patch_id same && test_cmp patch-id_main patch-id_same ' cmp_patch_id () { if test "$1" = "relevant" then ! test_cmp patch-id_"$2" patch-id_"$3" else test_cmp patch-id_"$2" patch-id_"$3" fi } test_patch_id_file_order () { relevant="$1" shift name="order-${1}-$relevant" shift get_top_diff "main" >top-diff.output && calc_patch_id format-patch.output && calc_patch_id format-patch.output && calc_patch_id nonl <<\EOF diff --git i/a w/a index e69de29..2e65efe 100644 --- i/a +++ w/a @@ -0,0 +1 @@ +a \ No newline at end of file diff --git i/b w/b index e69de29..6178079 100644 --- i/b +++ w/b @@ -0,0 +1 @@ +b EOF cat >withnl <<\EOF diff --git i/a w/a index e69de29..7898192 100644 --- i/a +++ w/a @@ -0,0 +1 @@ +a diff --git i/b w/b index e69de29..6178079 100644 --- i/b +++ w/b @@ -0,0 +1 @@ +b EOF test_expect_success 'patch-id handles no-nl-at-eof markers' ' cat nonl | calc_patch_id nonl && cat withnl | calc_patch_id withnl && test_cmp patch-id_nonl patch-id_withnl ' test_done