Skip to content

Commit

Permalink
patch-id-test: test stable and unstable behaviour
Browse files Browse the repository at this point in the history
Verify that patch ID supports an algorithm
that is stable against diff split and reordering.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Michael S. Tsirkin authored and Junio C Hamano committed Jun 10, 2014
1 parent 30e12b9 commit 8f2514e
Showing 1 changed file with 91 additions and 11 deletions.
102 changes: 91 additions & 11 deletions t/t4204-patch-id.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,44 @@ 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
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 master &&
git commit --amend -m same-msg &&
git checkout -b notsame master &&
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 | git patch-id > output &&
git log -p -1 | git patch-id >output &&
grep "^[a-f0-9]\{40\} $(git rev-parse HEAD)$" output
'

#calculate patch id. Make sure output is not empty.
calc_patch_id () {
git patch-id |
sed "s# .*##" > patch-id_"$1"
name="$1"
shift
git patch-id "$@" |
sed "s/ .*//" >patch-id_"$name" &&
test_line_count -gt 0 patch-id_"$name"
}

get_top_diff () {
git log -p -1 "$@" -O bar-then-foo --
}

get_patch_id () {
git log -p -1 "$1" | git patch-id |
sed "s# .*##" > patch-id_"$1"
get_top_diff "$1" | calc_patch_id "$@"
}

test_expect_success 'patch-id detects equality' '
Expand Down Expand Up @@ -56,6 +73,69 @@ test_expect_success 'whitespace is irrelevant in footer' '
test_cmp patch-id_master 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 "master" | calc_patch_id "$name" "$@" &&
git checkout same &&
git format-patch -1 --stdout -O foo-then-bar |
calc_patch_id "ordered-$name" "$@" &&
cmp_patch_id $relevant "$name" "ordered-$name"

}

# combined test for options: add more tests here to make them
# run with all options
test_patch_id () {
test_patch_id_file_order "$@"
}

# small tests with detailed diagnostic for basic options.
test_expect_success 'file order is irrelevant with --stable' '
test_patch_id_file_order irrelevant --stable --stable
'

test_expect_success 'file order is relevant with --unstable' '
test_patch_id_file_order relevant --unstable --unstable
'

#Now test various option combinations.
test_expect_success 'default is unstable' '
test_patch_id relevant default
'

test_expect_success 'patchid.stable = true is stable' '
test_config patchid.stable true &&
test_patch_id irrelevant patchid.stable=true
'

test_expect_success 'patchid.stable = false is unstable' '
test_config patchid.stable false &&
test_patch_id relevant patchid.stable=false
'

test_expect_success '--unstable overrides patchid.stable = true' '
test_config patchid.stable true &&
test_patch_id relevant patchid.stable=true--unstable --unstable
'

test_expect_success '--stable overrides patchid.stable = false' '
test_config patchid.stable false &&
test_patch_id irrelevant patchid.stable=false--stable --stable
'

test_expect_success 'patch-id supports git-format-patch MIME output' '
get_patch_id master &&
git checkout same &&
Expand Down

0 comments on commit 8f2514e

Please sign in to comment.