#!/bin/sh # # ,---E--. *H----------. * marks !TREESAME parent paths # / \ / \* # *A--*B---D--*F-*G---------K-*L-*M # \ /* \ / # `-C-' `-*I-*J # # A creates "file", B and F change it. # Odd merge G takes the old version from B. # I changes it, but J reverts it, so K is TREESAME to both parents. # H and L both change "file", and M merges those changes. test_description='TREESAME and limiting' . ./test-lib.sh note () { git tag "$1" } unnote () { git name-rev --tags --stdin | sed -e "s|$_x40 (tags/\([^)]*\)) |\1 |g" } test_expect_success setup ' test_commit "Initial file" file "Hi there" A && git branch other-branch && test_commit "file=Hello" file "Hello" B && git branch third-branch && git checkout other-branch && test_commit "Added other" other "Hello" C && git checkout master && test_merge D other-branch && git checkout third-branch && test_commit "Third file" third "Nothing" E && git checkout master && test_commit "file=Blah" file "Blah" F && test_tick && git merge --no-commit third-branch && git checkout third-branch file && git commit && note G && git branch fiddler-branch && git checkout -b part2-branch && test_commit "file=Part 2" file "Part 2" H && git checkout fiddler-branch && test_commit "Bad commit" file "Silly" I && test_tick && git revert I && note J && git checkout master && test_tick && git merge --no-ff fiddler-branch && note K test_commit "file=Part 1" file "Part 1" L && test_tick && test_must_fail git merge part2-branch && test_commit M file "Parts 1+2" ' FMT='tformat:%P %H | %s' # could we soup this up to optionally check parents? So "(BA)C" would check # that C is shown and has parents B A. check_outcome () { outcome=$1 shift for c in $1 do echo "$c" done >expect && shift && param="$*" && test_expect_$outcome "log $param" ' git log --format="$FMT" $param | unnote >actual && sed -e "s/^.* \([^ ]*\) .*/\1/" >check