| #!/bin/sh |
| |
| test_description='read-tree D/F conflict corner cases' |
| |
| TEST_PASSES_SANITIZE_LEAK=true |
| . ./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 |