| #!/bin/sh | |
| test_description='read-tree D/F conflict corner cases' | |
| . ./test-lib.sh | |
| . "$TEST_DIRECTORY"/lib-read-tree.sh | |
| maketree () { | |
| ( | |
| rm -f .git/index .git/index.lock && | |
| git clean -d -f -f -q -x && | |
| name="$1" && | |
| shift && | |
| for it | |
| do | |
| path=$(expr "$it" : '\([^:]*\)') && | |
| mkdir -p $(dirname "$path") && | |
| echo "$it" >"$path" && | |
| git update-index --add "$path" || exit | |
| done && | |
| git tag "$name" $(git write-tree) | |
| ) | |
| } | |
| settree () { | |
| rm -f .git/index .git/index.lock && | |
| git clean -d -f -f -q -x && | |
| git read-tree "$1" && | |
| git checkout-index -f -q -u -a && | |
| git update-index --refresh | |
| } | |
| checkindex () { | |
| git ls-files -s | | |
| sed "s|^[0-7][0-7]* $OID_REGEX \([0-3]\) |\1 |" >current && | |
| cat >expect && | |
| test_cmp expect current | |
| } | |
| test_expect_success setup ' | |
| maketree O-000 a/b-2/c/d a/b/c/d a/x && | |
| maketree A-000 a/b-2/c/d a/b/c/d a/x && | |
| maketree A-001 a/b-2/c/d a/b/c/d a/b/c/e a/x && | |
| maketree B-000 a/b-2/c/d a/b a/x && | |
| maketree O-010 t-0 t/1 t/2 t=3 && | |
| maketree A-010 t-0 t t=3 && | |
| maketree B-010 t/1: t=3: && | |
| maketree O-020 ds/dma/ioat.c ds/dma/ioat_dca.c && | |
| maketree A-020 ds/dma/ioat/Makefile ds/dma/ioat/registers.h && | |
| : | |
| ' | |
| test_expect_success '3-way (1)' ' | |
| settree A-000 && | |
| read_tree_u_must_succeed -m -u O-000 A-000 B-000 && | |
| checkindex <<-EOF | |
| 3 a/b | |
| 0 a/b-2/c/d | |
| 1 a/b/c/d | |
| 2 a/b/c/d | |
| 0 a/x | |
| EOF | |
| ' | |
| test_expect_success '3-way (2)' ' | |
| settree A-001 && | |
| read_tree_u_must_succeed -m -u O-000 A-001 B-000 && | |
| checkindex <<-EOF | |
| 3 a/b | |
| 0 a/b-2/c/d | |
| 1 a/b/c/d | |
| 2 a/b/c/d | |
| 2 a/b/c/e | |
| 0 a/x | |
| EOF | |
| ' | |
| test_expect_success '3-way (3)' ' | |
| settree A-010 && | |
| read_tree_u_must_succeed -m -u O-010 A-010 B-010 && | |
| checkindex <<-EOF | |
| 2 t | |
| 1 t-0 | |
| 2 t-0 | |
| 1 t/1 | |
| 3 t/1 | |
| 1 t/2 | |
| 0 t=3 | |
| EOF | |
| ' | |
| test_expect_success '2-way (1)' ' | |
| settree O-020 && | |
| read_tree_u_must_succeed -m -u O-020 A-020 && | |
| checkindex <<-EOF | |
| 0 ds/dma/ioat/Makefile | |
| 0 ds/dma/ioat/registers.h | |
| EOF | |
| ' | |
| test_done |