#!/bin/sh test_description='git patch-id' . ./test-lib.sh test_expect_success 'setup' ' test_commit initial foo a && test_commit first foo b && git checkout -b same HEAD^ && test_commit same-msg foo b && git checkout -b notsame HEAD^ && test_commit notsame-msg foo c ' test_expect_success 'patch-id output is well-formed' ' git log -p -1 | git patch-id > output && grep "^[a-f0-9]\{40\} $(git rev-parse HEAD)$" output ' calc_patch_id () { git patch-id | sed "s# .*##" > patch-id_"$1" } get_patch_id () { git log -p -1 "$1" | git patch-id | sed "s# .*##" > patch-id_"$1" } test_expect_success 'patch-id detects equality' ' get_patch_id master && get_patch_id same && test_cmp patch-id_master patch-id_same ' test_expect_success 'patch-id detects inequality' ' get_patch_id master && get_patch_id notsame && ! test_cmp patch-id_master patch-id_notsame ' test_expect_success 'patch-id supports git-format-patch output' ' get_patch_id master && git checkout same && git format-patch -1 --stdout | calc_patch_id same && test_cmp patch-id_master patch-id_same && set `git format-patch -1 --stdout | git patch-id` && test "$2" = `git rev-parse HEAD` ' test_expect_success 'whitespace is irrelevant in footer' ' get_patch_id master && git checkout same && git format-patch -1 --stdout | sed "s/ \$//" | calc_patch_id same && test_cmp patch-id_master patch-id_same ' test_expect_success 'patch-id supports git-format-patch MIME output' ' get_patch_id master && git checkout same && git format-patch -1 --attach --stdout | calc_patch_id same && test_cmp patch-id_master patch-id_same ' cat >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