| #!/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 |