3 test_description='subtree merge strategy'
7 test_expect_success setup '
10 for i in $s; do echo $i; done >hello &&
12 git commit -m initial &&
13 git checkout -b side &&
16 git commit -m second &&
17 git checkout master &&
18 for i in mundo $s; do echo $i; done >hello &&
24 test_expect_success 'subtree available and works like recursive' '
26 git merge -s subtree side &&
27 for i in mundo $s world; do echo $i; done >expect &&
32 test_expect_success 'setup' '
36 echo git-gui > git-gui.sh &&
37 o1=$(git hash-object git-gui.sh) &&
39 git commit -m "initial git-gui" &&
45 o2=$(git hash-object git.c) &&
47 git commit -m "initial git"
50 test_expect_success 'initial merge' '
51 git remote add -f gui ../git-gui &&
52 git merge -s ours --no-commit --allow-unrelated-histories gui/master &&
53 git read-tree --prefix=git-gui/ -u gui/master &&
54 git commit -m "Merge git-gui as our subdirectory" &&
55 git checkout -b work &&
56 git ls-files -s >actual &&
58 echo "100644 $o1 0 git-gui/git-gui.sh" &&
59 echo "100644 $o2 0 git.c"
61 test_cmp expected actual
64 test_expect_success 'merge update' '
66 echo git-gui2 > git-gui.sh &&
67 o3=$(git hash-object git-gui.sh) &&
69 git checkout -b master2 &&
70 git commit -m "update git-gui" &&
72 git pull -s subtree gui master2 &&
73 git ls-files -s >actual &&
75 echo "100644 $o3 0 git-gui/git-gui.sh" &&
76 echo "100644 $o2 0 git.c"
78 test_cmp expected actual
81 test_expect_success 'initial ambiguous subtree' '
83 git reset --hard master &&
84 git checkout -b master2 &&
85 git merge -s ours --no-commit gui/master &&
86 git read-tree --prefix=git-gui2/ -u gui/master &&
87 git commit -m "Merge git-gui2 as our subdirectory" &&
88 git checkout -b work2 &&
89 git ls-files -s >actual &&
91 echo "100644 $o1 0 git-gui/git-gui.sh" &&
92 echo "100644 $o1 0 git-gui2/git-gui.sh" &&
93 echo "100644 $o2 0 git.c"
95 test_cmp expected actual
98 test_expect_success 'merge using explicit' '
100 git reset --hard master2 &&
101 git pull -Xsubtree=git-gui gui master2 &&
102 git ls-files -s >actual &&
104 echo "100644 $o3 0 git-gui/git-gui.sh" &&
105 echo "100644 $o1 0 git-gui2/git-gui.sh" &&
106 echo "100644 $o2 0 git.c"
108 test_cmp expected actual
111 test_expect_success 'merge2 using explicit' '
113 git reset --hard master2 &&
114 git pull -Xsubtree=git-gui2 gui master2 &&
115 git ls-files -s >actual &&
117 echo "100644 $o1 0 git-gui/git-gui.sh" &&
118 echo "100644 $o3 0 git-gui2/git-gui.sh" &&
119 echo "100644 $o2 0 git.c"
121 test_cmp expected actual