|  | #!/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]* $_x40 \([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 |