Talk about "git cvsimport" in the cvs migration docs
[alt-git.git] / t / t1000-read-tree-m-3way.sh
blobba207c8bbfe340e1b315d15faf3dfb8b7b9f4eba
1 #!/bin/sh
3 # Copyright (c) 2005 Junio C Hamano
6 test_description='Three way merge with read-tree -m
8 This test tries three-way merge with read-tree -m
10 There is one ancestor (called O for Original) and two branches A
11 and B derived from it. We want to do a 3-way merge between A and
12 B, using O as the common ancestor.
14 merge A O B
16 Decisions are made by comparing contents of O, A and B pathname
17 by pathname. The result is determined by the following guiding
18 principle:
20 - If only A does something to it and B does not touch it, take
21 whatever A does.
23 - If only B does something to it and A does not touch it, take
24 whatever B does.
26 - If both A and B does something but in the same way, take
27 whatever they do.
29 - If A and B does something but different things, we need a
30 3-way merge:
32 - We cannot do anything about the following cases:
34 * O does not have it. A and B both must be adding to the
35 same path independently.
37 * A deletes it. B must be modifying.
39 - Otherwise, A and B are modifying. Run 3-way merge.
41 First, the case matrix.
43 - Vertical axis is for A'\''s actions.
44 - Horizontal axis is for B'\''s actions.
46 .----------------------------------------------------------------.
47 | A B | No Action | Delete | Modify | Add |
48 |------------+------------+------------+------------+------------|
49 | No Action | | | | |
50 | | select O | delete | select B | select B |
51 | | | | | |
52 |------------+------------+------------+------------+------------|
53 | Delete | | | ********** | can |
54 | | delete | delete | merge | not |
55 | | | | | happen |
56 |------------+------------+------------+------------+------------|
57 | Modify | | ********** | ?????????? | can |
58 | | select A | merge | select A=B | not |
59 | | | | merge | happen |
60 |------------+------------+------------+------------+------------|
61 | Add | | can | can | ?????????? |
62 | | select A | not | not | select A=B |
63 | | | happen | happen | merge |
64 .----------------------------------------------------------------.
66 In addition:
68 SS: a special case of MM, where A and B makes the same modification.
69 LL: a special case of AA, where A and B creates the same file.
70 TT: a special case of MM, where A and B makes mergeable changes.
71 DF: a special case, where A makes a directory and B makes a file.
74 . ./test-lib.sh
75 . ../lib-read-tree-m-3way.sh
77 ################################################################
78 # Try merging and showing the various diffs
80 # The tree is dirty at this point.
81 test_expect_failure \
82 '3-way merge with git-read-tree -m' \
83 "git-read-tree -m $tree_O $tree_A $tree_B"
85 # This is done on an empty work directory, which is the normal
86 # merge person behaviour.
87 test_expect_success \
88 '3-way merge with git-read-tree -m' \
89 "rm -fr [NDMALTS][NDMALTSF] Z &&
90 rm .git/index &&
91 git-read-tree -m $tree_O $tree_A $tree_B"
93 # This starts out with the first head, which is the normal
94 # patch submitter behaviour.
95 test_expect_success \
96 '3-way merge with git-read-tree -m' \
97 "git-read-tree $tree_A &&
98 git-checkout-cache -f -u -a &&
99 git-read-tree -m $tree_O $tree_A $tree_B"
101 _x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
102 _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
103 test_expect_success \
104 'git-ls-files --stage of the merge result' \
105 'git-ls-files --stage >current- &&
106 sed -e "s/ $_x40 / X /" <current- >current'
108 cat >expected <<\EOF
109 100644 X 2 AA
110 100644 X 3 AA
111 100644 X 2 AN
112 100644 X 1 DD
113 100644 X 3 DF
114 100644 X 2 DF/DF
115 100644 X 1 DM
116 100644 X 3 DM
117 100644 X 1 DN
118 100644 X 3 DN
119 100644 X 2 LL
120 100644 X 3 LL
121 100644 X 1 MD
122 100644 X 2 MD
123 100644 X 1 MM
124 100644 X 2 MM
125 100644 X 3 MM
126 100644 X 0 MN
127 100644 X 3 NA
128 100644 X 1 ND
129 100644 X 2 ND
130 100644 X 0 NM
131 100644 X 0 NN
132 100644 X 0 SS
133 100644 X 1 TT
134 100644 X 2 TT
135 100644 X 3 TT
136 100644 X 2 Z/AA
137 100644 X 3 Z/AA
138 100644 X 2 Z/AN
139 100644 X 1 Z/DD
140 100644 X 1 Z/DM
141 100644 X 3 Z/DM
142 100644 X 1 Z/DN
143 100644 X 3 Z/DN
144 100644 X 1 Z/MD
145 100644 X 2 Z/MD
146 100644 X 1 Z/MM
147 100644 X 2 Z/MM
148 100644 X 3 Z/MM
149 100644 X 0 Z/MN
150 100644 X 3 Z/NA
151 100644 X 1 Z/ND
152 100644 X 2 Z/ND
153 100644 X 0 Z/NM
154 100644 X 0 Z/NN
157 test_expect_success \
158 'validate merge result' \
159 'diff current expected'
161 test_done