Squashed 'third_party/git/' content from commit cb71568594
git-subtree-dir: third_party/git git-subtree-split: cb715685942260375e1eb8153b0768a376e4ece7
This commit is contained in:
commit
1b593e1ea4
3629 changed files with 1139935 additions and 0 deletions
157
t/t6012-rev-list-simplify.sh
Executable file
157
t/t6012-rev-list-simplify.sh
Executable file
|
|
@ -0,0 +1,157 @@
|
|||
#!/bin/sh
|
||||
|
||||
test_description='merge simplification'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
note () {
|
||||
git tag "$1"
|
||||
}
|
||||
|
||||
unnote () {
|
||||
git name-rev --tags --stdin | sed -e "s|$OID_REGEX (tags/\([^)]*\)) |\1 |g"
|
||||
}
|
||||
|
||||
#
|
||||
# Create a test repo with interesting commit graph:
|
||||
#
|
||||
# A--B----------G--H--I--K--L
|
||||
# \ \ / /
|
||||
# \ \ / /
|
||||
# C------E---F J
|
||||
# \_/
|
||||
#
|
||||
# The commits are laid out from left-to-right starting with
|
||||
# the root commit A and terminating at the tip commit L.
|
||||
#
|
||||
# There are a few places where we adjust the commit date or
|
||||
# author date to make the --topo-order, --date-order, and
|
||||
# --author-date-order flags produce different output.
|
||||
|
||||
test_expect_success setup '
|
||||
echo "Hi there" >file &&
|
||||
echo "initial" >lost &&
|
||||
git add file lost &&
|
||||
test_tick && git commit -m "Initial file and lost" &&
|
||||
note A &&
|
||||
|
||||
git branch other-branch &&
|
||||
|
||||
git symbolic-ref HEAD refs/heads/unrelated &&
|
||||
git rm -f "*" &&
|
||||
echo "Unrelated branch" >side &&
|
||||
git add side &&
|
||||
test_tick && git commit -m "Side root" &&
|
||||
note J &&
|
||||
git checkout master &&
|
||||
|
||||
echo "Hello" >file &&
|
||||
echo "second" >lost &&
|
||||
git add file lost &&
|
||||
test_tick && GIT_AUTHOR_DATE=$(($test_tick + 120)) git commit -m "Modified file and lost" &&
|
||||
note B &&
|
||||
|
||||
git checkout other-branch &&
|
||||
|
||||
echo "Hello" >file &&
|
||||
>lost &&
|
||||
git add file lost &&
|
||||
test_tick && git commit -m "Modified the file identically" &&
|
||||
note C &&
|
||||
|
||||
echo "This is a stupid example" >another-file &&
|
||||
git add another-file &&
|
||||
test_tick && git commit -m "Add another file" &&
|
||||
note D &&
|
||||
|
||||
test_tick &&
|
||||
test_must_fail git merge -m "merge" master &&
|
||||
>lost && git commit -a -m "merge" &&
|
||||
note E &&
|
||||
|
||||
echo "Yet another" >elif &&
|
||||
git add elif &&
|
||||
test_tick && git commit -m "Irrelevant change" &&
|
||||
note F &&
|
||||
|
||||
git checkout master &&
|
||||
echo "Yet another" >elif &&
|
||||
git add elif &&
|
||||
test_tick && git commit -m "Another irrelevant change" &&
|
||||
note G &&
|
||||
|
||||
test_tick && git merge -m "merge" other-branch &&
|
||||
note H &&
|
||||
|
||||
echo "Final change" >file &&
|
||||
test_tick && git commit -a -m "Final change" &&
|
||||
note I &&
|
||||
|
||||
git checkout master &&
|
||||
test_tick && git merge --allow-unrelated-histories -m "Coolest" unrelated &&
|
||||
note K &&
|
||||
|
||||
echo "Immaterial" >elif &&
|
||||
git add elif &&
|
||||
test_tick && git commit -m "Last" &&
|
||||
note L
|
||||
'
|
||||
|
||||
FMT='tformat:%P %H | %s'
|
||||
|
||||
check_outcome () {
|
||||
outcome=$1
|
||||
shift
|
||||
for c in $1
|
||||
do
|
||||
echo "$c"
|
||||
done >expect &&
|
||||
shift &&
|
||||
param="$*" &&
|
||||
test_expect_$outcome "log $param" '
|
||||
git log --pretty="$FMT" --parents $param |
|
||||
unnote >actual &&
|
||||
sed -e "s/^.* \([^ ]*\) .*/\1/" >check <actual &&
|
||||
test_cmp expect check
|
||||
'
|
||||
}
|
||||
|
||||
check_result () {
|
||||
check_outcome success "$@"
|
||||
}
|
||||
|
||||
check_result 'L K J I H F E D C G B A' --full-history --topo-order
|
||||
check_result 'L K I H G F E D C B J A' --full-history
|
||||
check_result 'L K I H G F E D C B J A' --full-history --date-order
|
||||
check_result 'L K I H G F E D B C J A' --full-history --author-date-order
|
||||
check_result 'K I H E C B A' --full-history -- file
|
||||
check_result 'K I H E C B A' --full-history --topo-order -- file
|
||||
check_result 'K I H E C B A' --full-history --date-order -- file
|
||||
check_result 'K I H E B C A' --full-history --author-date-order -- file
|
||||
check_result 'I E C B A' --simplify-merges -- file
|
||||
check_result 'I E C B A' --simplify-merges --topo-order -- file
|
||||
check_result 'I E C B A' --simplify-merges --date-order -- file
|
||||
check_result 'I E B C A' --simplify-merges --author-date-order -- file
|
||||
check_result 'I B A' -- file
|
||||
check_result 'I B A' --topo-order -- file
|
||||
check_result 'I B A' --date-order -- file
|
||||
check_result 'I B A' --author-date-order -- file
|
||||
check_result 'H' --first-parent -- another-file
|
||||
check_result 'H' --first-parent --topo-order -- another-file
|
||||
|
||||
check_result 'E C B A' --full-history E -- lost
|
||||
test_expect_success 'full history simplification without parent' '
|
||||
printf "%s\n" E C B A >expect &&
|
||||
git log --pretty="$FMT" --full-history E -- lost |
|
||||
unnote >actual &&
|
||||
sed -e "s/^.* \([^ ]*\) .*/\1/" >check <actual &&
|
||||
test_cmp expect check
|
||||
'
|
||||
|
||||
test_expect_success '--full-diff is not affected by --parents' '
|
||||
git log -p --pretty="%H" --full-diff -- file >expected &&
|
||||
git log -p --pretty="%H" --full-diff --parents -- file >actual &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
test_done
|
||||
Loading…
Add table
Add a link
Reference in a new issue