You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
1.9 KiB
109 lines
1.9 KiB
#!/bin/bash |
|
|
|
test_description='git rebase - test patch id computation' |
|
|
|
. ./test-lib.sh |
|
|
|
test_set_prereq NOT_EXPENSIVE |
|
test -n "$GIT_PATCHID_TIMING_TESTS" && test_set_prereq EXPENSIVE |
|
test -x /usr/bin/time && test_set_prereq USR_BIN_TIME |
|
|
|
count() |
|
{ |
|
i=0 |
|
while test $i -lt $1 |
|
do |
|
echo "$i" |
|
i=$(($i+1)) |
|
done |
|
} |
|
|
|
scramble() |
|
{ |
|
i=0 |
|
while read x |
|
do |
|
if test $i -ne 0 |
|
then |
|
echo "$x" |
|
fi |
|
i=$(((i+1) % 10)) |
|
done < "$1" > "$1.new" |
|
mv -f "$1.new" "$1" |
|
} |
|
|
|
run() |
|
{ |
|
echo \$ "$@" |
|
/usr/bin/time "$@" >/dev/null |
|
} |
|
|
|
test_expect_success 'setup' ' |
|
git commit --allow-empty -m initial |
|
git tag root |
|
' |
|
|
|
do_tests() |
|
{ |
|
pr=$1 |
|
nlines=$2 |
|
|
|
test_expect_success $pr "setup: $nlines lines" " |
|
rm -f .gitattributes && |
|
git checkout -q -f master && |
|
git reset --hard root && |
|
count $nlines >file && |
|
git add file && |
|
git commit -q -m initial && |
|
git branch -f other && |
|
|
|
scramble file && |
|
git add file && |
|
git commit -q -m 'change big file' && |
|
|
|
git checkout -q other && |
|
: >newfile && |
|
git add newfile && |
|
git commit -q -m 'add small file' && |
|
|
|
git cherry-pick master >/dev/null 2>&1 |
|
" |
|
|
|
test_debug " |
|
run git diff master^\! |
|
" |
|
|
|
test_expect_success $pr 'setup attributes' " |
|
echo 'file binary' >.gitattributes |
|
" |
|
|
|
test_debug " |
|
run git format-patch --stdout master && |
|
run git format-patch --stdout --ignore-if-in-upstream master |
|
" |
|
|
|
test_expect_success $pr 'detect upstream patch' " |
|
git checkout -q master && |
|
scramble file && |
|
git add file && |
|
git commit -q -m 'change big file again' && |
|
git checkout -q other^{} && |
|
git rebase master && |
|
test_must_fail test -n \"\$(git rev-list master...HEAD~)\" |
|
" |
|
|
|
test_expect_success $pr 'do not drop patch' " |
|
git branch -f squashed master && |
|
git checkout -q -f squashed && |
|
git reset -q --soft HEAD~2 && |
|
git commit -q -m squashed && |
|
git checkout -q other^{} && |
|
test_must_fail git rebase squashed && |
|
rm -rf .git/rebase-apply |
|
" |
|
} |
|
|
|
do_tests NOT_EXPENSIVE 500 |
|
do_tests EXPENSIVE 50000 |
|
|
|
test_done
|
|
|