Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
git/t/t3419-rebase-patch-id.sh
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
executable file
109 lines (90 sloc)
1.92 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
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 |