##// END OF EJS Templates
test: split tests/test-merge-combination.t into multiple parts...
marmoute -
r46892:e8b0c519 default
parent child Browse files
Show More
@@ -1,157 +1,63 b''
1 Testing recorded "modified" files for merge commit
2 ==================================================
3
4 #require execbit
5
1 6 This file shows what hg says are "modified" files for a merge commit
2 7 (hg log -T {files}), somewhat exhaustively.
3 It shows merges that involves files contents changing, and merges that
4 involve executable bit changing, but not merges with multiple or zero
5 merge ancestors, nor copies/renames, and nor identical file contents
6 with different filelog revisions.
8
9 This test file shows merges that involves executable bit changing, check test-merge-combination-exec-bytes.t
10
11 For merges that involve files contents changing, check test-merge-combination-file-content.t
12
13 For testing of multiple corner case, check test-merge-combination-misc.t
14
15 Case with multiple or zero merge ancestors, copies/renames, and identical file contents
16 with different filelog revisions are not currently covered.
7 17
8 18 $ . $TESTDIR/testlib/merge-combination-util.sh
9 19
10 All the merges of various file contents.
11
12 $ range () {
13 > max=0
14 > for i in $@; do
15 > if [ $i = - ]; then continue; fi
16 > if [ $i -gt $max ]; then max=$i; fi
17 > done
18 > $TESTDIR/seq.py `expr $max + 1`
19 > }
20 $ isgood () { true; }
21 $ createfile () {
22 > if [ -f a ] && [ "`cat a`" = $1 ]
23 > then touch $file
24 > else echo $v > a
25 > fi
26 > }
27
28 $ genmerges
29 1111 : agree on ""
30 1112 : agree on "a"
31 111- : agree on "a"
32 1121 : agree on "a"
33 1122 : agree on ""
34 1123 : agree on "a"
35 112- : agree on "a"
36 11-1 : hg said "", expected "a"
37 11-2 : agree on "a"
38 11-- : agree on ""
39 1211 : agree on "a"
40 1212 : agree on ""
41 1213 : agree on "a"
42 121- : agree on "a"
43 1221 : agree on "a"
44 1222 : agree on ""
45 1223 : agree on "a"
46 122- : agree on "a"
47 1231 C: agree on "a"
48 1232 C: agree on "a"
49 1233 C: agree on "a"
50 1234 C: agree on "a"
51 123- C: agree on "a"
52 12-1 C: agree on "a"
53 12-2 C: hg said "", expected "a"
54 12-3 C: agree on "a"
55 12-- C: agree on "a"
56 1-11 : hg said "", expected "a"
57 1-12 : agree on "a"
58 1-1- : agree on ""
59 1-21 C: agree on "a"
60 1-22 C: hg said "", expected "a"
61 1-23 C: agree on "a"
62 1-2- C: agree on "a"
63 1--1 : agree on "a"
64 1--2 : agree on "a"
65 1--- : agree on ""
66 -111 : agree on ""
67 -112 : agree on "a"
68 -11- : agree on "a"
69 -121 C: agree on "a"
70 -122 C: agree on "a"
71 -123 C: agree on "a"
72 -12- C: agree on "a"
73 -1-1 : agree on ""
74 -1-2 : agree on "a"
75 -1-- : agree on "a"
76 --11 : agree on ""
77 --12 : agree on "a"
78 --1- : agree on "a"
79 ---1 : agree on "a"
80 ---- : agree on ""
81
82 20 All the merges of executable bit.
83 21
84 22 $ range () {
85 23 > max=a
86 24 > for i in $@; do
87 25 > if [ $i = - ]; then continue; fi
88 26 > if [ $i > $max ]; then max=$i; fi
89 27 > done
90 28 > if [ $max = a ]; then echo f; else echo f x; fi
91 29 > }
92 30 $ isgood () { case $line in *f*x*) true;; *) false;; esac; }
93 31 $ createfile () {
94 32 > if [ -f a ] && (([ -x a ] && [ $v = x ]) || (! [ -x a ] && [ $v != x ]))
95 33 > then touch $file
96 34 > else touch a; if [ $v = x ]; then chmod +x a; else chmod -x a; fi
97 35 > fi
98 36 > }
99 37
100 #if execbit
101 38 $ genmerges
102 39 fffx : agree on "a"
103 40 ffxf : agree on "a"
104 41 ffxx : agree on ""
105 42 ffx- : agree on "a"
106 43 ff-x : hg said "", expected "a"
107 44 fxff : hg said "", expected "a"
108 45 fxfx : hg said "a", expected ""
109 46 fxf- : agree on "a"
110 47 fxxf : agree on "a"
111 48 fxxx : agree on ""
112 49 fxx- : agree on "a"
113 50 fx-f : hg said "", expected "a"
114 51 fx-x : hg said "", expected "a"
115 52 fx-- : hg said "", expected "a"
116 53 f-fx : agree on "a"
117 54 f-xf : agree on "a"
118 55 f-xx : hg said "", expected "a"
119 56 f-x- : agree on "a"
120 57 f--x : agree on "a"
121 58 -ffx : agree on "a"
122 59 -fxf C: agree on "a"
123 60 -fxx C: hg said "", expected "a"
124 61 -fx- C: agree on "a"
125 62 -f-x : hg said "", expected "a"
126 63 --fx : agree on "a"
127 #endif
128
129 Files modified or cleanly merged, with no greatest common ancestors:
130
131 $ hg init repo; cd repo
132 $ touch a0 b0; hg commit -qAm 0
133 $ hg up -qr null; touch a1 b1; hg commit -qAm 1
134 $ hg merge -qr 0; rm b*; hg commit -qAm 2
135 $ hg log -r . -T '{files}\n'
136 b0 b1
137 $ cd ../
138 $ rm -rf repo
139
140 A few cases of criss-cross merges involving deletions (listing all
141 such merges is probably too much). Both gcas contain $files, so we
142 expect the final merge to behave like a merge with a single gca
143 containing $files.
144
145 $ hg init repo; cd repo
146 $ files="c1 u1 c2 u2"
147 $ touch $files; hg commit -qAm '0 root'
148 $ for f in $files; do echo f > $f; done; hg commit -qAm '1 gca1'
149 $ hg up -qr0; hg revert -qr 1 --all; hg commit -qAm '2 gca2'
150 $ hg up -qr 1; hg merge -qr 2; rm *1; hg commit -qAm '3 p1'
151 $ hg up -qr 2; hg merge -qr 1; rm *2; hg commit -qAm '4 p2'
152 $ hg merge -qr 3; echo f > u1; echo f > u2; rm -f c1 c2
153 $ hg commit -qAm '5 merge with two gcas'
154 $ hg log -r . -T '{files}\n' # expecting u1 u2
155
156 $ cd ../
157 $ rm -rf repo
@@ -1,157 +1,88 b''
1 Testing recorded "modified" files for merge commit
2 ==================================================
3
1 4 This file shows what hg says are "modified" files for a merge commit
2 5 (hg log -T {files}), somewhat exhaustively.
3 It shows merges that involves files contents changing, and merges that
4 involve executable bit changing, but not merges with multiple or zero
5 merge ancestors, nor copies/renames, and nor identical file contents
6 with different filelog revisions.
6
7 This test file shows merges that involves files contents changing
8
9 For merges taht involves executable bit changing, check test-merge-combination-exec-bytes.t
10
11 For testing of multiple corner case, check test-merge-combination-misc.t
12
13 Case with multiple or zero merge ancestors, copies/renames, and identical file contents
14 with different filelog revisions are not currently covered.
7 15
8 16 $ . $TESTDIR/testlib/merge-combination-util.sh
9 17
10 18 All the merges of various file contents.
11 19
12 20 $ range () {
13 21 > max=0
14 22 > for i in $@; do
15 23 > if [ $i = - ]; then continue; fi
16 24 > if [ $i -gt $max ]; then max=$i; fi
17 25 > done
18 26 > $TESTDIR/seq.py `expr $max + 1`
19 27 > }
20 28 $ isgood () { true; }
21 29 $ createfile () {
22 30 > if [ -f a ] && [ "`cat a`" = $1 ]
23 31 > then touch $file
24 32 > else echo $v > a
25 33 > fi
26 34 > }
27 35
28 36 $ genmerges
29 37 1111 : agree on ""
30 38 1112 : agree on "a"
31 39 111- : agree on "a"
32 40 1121 : agree on "a"
33 41 1122 : agree on ""
34 42 1123 : agree on "a"
35 43 112- : agree on "a"
36 44 11-1 : hg said "", expected "a"
37 45 11-2 : agree on "a"
38 46 11-- : agree on ""
39 47 1211 : agree on "a"
40 48 1212 : agree on ""
41 49 1213 : agree on "a"
42 50 121- : agree on "a"
43 51 1221 : agree on "a"
44 52 1222 : agree on ""
45 53 1223 : agree on "a"
46 54 122- : agree on "a"
47 55 1231 C: agree on "a"
48 56 1232 C: agree on "a"
49 57 1233 C: agree on "a"
50 58 1234 C: agree on "a"
51 59 123- C: agree on "a"
52 60 12-1 C: agree on "a"
53 61 12-2 C: hg said "", expected "a"
54 62 12-3 C: agree on "a"
55 63 12-- C: agree on "a"
56 64 1-11 : hg said "", expected "a"
57 65 1-12 : agree on "a"
58 66 1-1- : agree on ""
59 67 1-21 C: agree on "a"
60 68 1-22 C: hg said "", expected "a"
61 69 1-23 C: agree on "a"
62 70 1-2- C: agree on "a"
63 71 1--1 : agree on "a"
64 72 1--2 : agree on "a"
65 73 1--- : agree on ""
66 74 -111 : agree on ""
67 75 -112 : agree on "a"
68 76 -11- : agree on "a"
69 77 -121 C: agree on "a"
70 78 -122 C: agree on "a"
71 79 -123 C: agree on "a"
72 80 -12- C: agree on "a"
73 81 -1-1 : agree on ""
74 82 -1-2 : agree on "a"
75 83 -1-- : agree on "a"
76 84 --11 : agree on ""
77 85 --12 : agree on "a"
78 86 --1- : agree on "a"
79 87 ---1 : agree on "a"
80 88 ---- : agree on ""
81
82 All the merges of executable bit.
83
84 $ range () {
85 > max=a
86 > for i in $@; do
87 > if [ $i = - ]; then continue; fi
88 > if [ $i > $max ]; then max=$i; fi
89 > done
90 > if [ $max = a ]; then echo f; else echo f x; fi
91 > }
92 $ isgood () { case $line in *f*x*) true;; *) false;; esac; }
93 $ createfile () {
94 > if [ -f a ] && (([ -x a ] && [ $v = x ]) || (! [ -x a ] && [ $v != x ]))
95 > then touch $file
96 > else touch a; if [ $v = x ]; then chmod +x a; else chmod -x a; fi
97 > fi
98 > }
99
100 #if execbit
101 $ genmerges
102 fffx : agree on "a"
103 ffxf : agree on "a"
104 ffxx : agree on ""
105 ffx- : agree on "a"
106 ff-x : hg said "", expected "a"
107 fxff : hg said "", expected "a"
108 fxfx : hg said "a", expected ""
109 fxf- : agree on "a"
110 fxxf : agree on "a"
111 fxxx : agree on ""
112 fxx- : agree on "a"
113 fx-f : hg said "", expected "a"
114 fx-x : hg said "", expected "a"
115 fx-- : hg said "", expected "a"
116 f-fx : agree on "a"
117 f-xf : agree on "a"
118 f-xx : hg said "", expected "a"
119 f-x- : agree on "a"
120 f--x : agree on "a"
121 -ffx : agree on "a"
122 -fxf C: agree on "a"
123 -fxx C: hg said "", expected "a"
124 -fx- C: agree on "a"
125 -f-x : hg said "", expected "a"
126 --fx : agree on "a"
127 #endif
128
129 Files modified or cleanly merged, with no greatest common ancestors:
130
131 $ hg init repo; cd repo
132 $ touch a0 b0; hg commit -qAm 0
133 $ hg up -qr null; touch a1 b1; hg commit -qAm 1
134 $ hg merge -qr 0; rm b*; hg commit -qAm 2
135 $ hg log -r . -T '{files}\n'
136 b0 b1
137 $ cd ../
138 $ rm -rf repo
139
140 A few cases of criss-cross merges involving deletions (listing all
141 such merges is probably too much). Both gcas contain $files, so we
142 expect the final merge to behave like a merge with a single gca
143 containing $files.
144
145 $ hg init repo; cd repo
146 $ files="c1 u1 c2 u2"
147 $ touch $files; hg commit -qAm '0 root'
148 $ for f in $files; do echo f > $f; done; hg commit -qAm '1 gca1'
149 $ hg up -qr0; hg revert -qr 1 --all; hg commit -qAm '2 gca2'
150 $ hg up -qr 1; hg merge -qr 2; rm *1; hg commit -qAm '3 p1'
151 $ hg up -qr 2; hg merge -qr 1; rm *2; hg commit -qAm '4 p2'
152 $ hg merge -qr 3; echo f > u1; echo f > u2; rm -f c1 c2
153 $ hg commit -qAm '5 merge with two gcas'
154 $ hg log -r . -T '{files}\n' # expecting u1 u2
155
156 $ cd ../
157 $ rm -rf repo
@@ -1,157 +1,47 b''
1 Testing recorded "modified" files for merge commit
2 ==================================================
3
1 4 This file shows what hg says are "modified" files for a merge commit
2 5 (hg log -T {files}), somewhat exhaustively.
3 It shows merges that involves files contents changing, and merges that
4 involve executable bit changing, but not merges with multiple or zero
5 merge ancestors, nor copies/renames, and nor identical file contents
6 with different filelog revisions.
6
7 This file test multiple corner case.
8
9 For merges that involve files contents changing, check test-merge-combination-file-content.t
10
11 For merges that involve executable bit changing, check test-merge-combination-exec-bytes.t
12
13
14 Case with multiple or zero merge ancestors, copies/renames, and identical file contents
15 with different filelog revisions are not currently covered.
7 16
8 17 $ . $TESTDIR/testlib/merge-combination-util.sh
9 18
10 All the merges of various file contents.
11
12 $ range () {
13 > max=0
14 > for i in $@; do
15 > if [ $i = - ]; then continue; fi
16 > if [ $i -gt $max ]; then max=$i; fi
17 > done
18 > $TESTDIR/seq.py `expr $max + 1`
19 > }
20 $ isgood () { true; }
21 $ createfile () {
22 > if [ -f a ] && [ "`cat a`" = $1 ]
23 > then touch $file
24 > else echo $v > a
25 > fi
26 > }
27
28 $ genmerges
29 1111 : agree on ""
30 1112 : agree on "a"
31 111- : agree on "a"
32 1121 : agree on "a"
33 1122 : agree on ""
34 1123 : agree on "a"
35 112- : agree on "a"
36 11-1 : hg said "", expected "a"
37 11-2 : agree on "a"
38 11-- : agree on ""
39 1211 : agree on "a"
40 1212 : agree on ""
41 1213 : agree on "a"
42 121- : agree on "a"
43 1221 : agree on "a"
44 1222 : agree on ""
45 1223 : agree on "a"
46 122- : agree on "a"
47 1231 C: agree on "a"
48 1232 C: agree on "a"
49 1233 C: agree on "a"
50 1234 C: agree on "a"
51 123- C: agree on "a"
52 12-1 C: agree on "a"
53 12-2 C: hg said "", expected "a"
54 12-3 C: agree on "a"
55 12-- C: agree on "a"
56 1-11 : hg said "", expected "a"
57 1-12 : agree on "a"
58 1-1- : agree on ""
59 1-21 C: agree on "a"
60 1-22 C: hg said "", expected "a"
61 1-23 C: agree on "a"
62 1-2- C: agree on "a"
63 1--1 : agree on "a"
64 1--2 : agree on "a"
65 1--- : agree on ""
66 -111 : agree on ""
67 -112 : agree on "a"
68 -11- : agree on "a"
69 -121 C: agree on "a"
70 -122 C: agree on "a"
71 -123 C: agree on "a"
72 -12- C: agree on "a"
73 -1-1 : agree on ""
74 -1-2 : agree on "a"
75 -1-- : agree on "a"
76 --11 : agree on ""
77 --12 : agree on "a"
78 --1- : agree on "a"
79 ---1 : agree on "a"
80 ---- : agree on ""
81
82 All the merges of executable bit.
83
84 $ range () {
85 > max=a
86 > for i in $@; do
87 > if [ $i = - ]; then continue; fi
88 > if [ $i > $max ]; then max=$i; fi
89 > done
90 > if [ $max = a ]; then echo f; else echo f x; fi
91 > }
92 $ isgood () { case $line in *f*x*) true;; *) false;; esac; }
93 $ createfile () {
94 > if [ -f a ] && (([ -x a ] && [ $v = x ]) || (! [ -x a ] && [ $v != x ]))
95 > then touch $file
96 > else touch a; if [ $v = x ]; then chmod +x a; else chmod -x a; fi
97 > fi
98 > }
99
100 #if execbit
101 $ genmerges
102 fffx : agree on "a"
103 ffxf : agree on "a"
104 ffxx : agree on ""
105 ffx- : agree on "a"
106 ff-x : hg said "", expected "a"
107 fxff : hg said "", expected "a"
108 fxfx : hg said "a", expected ""
109 fxf- : agree on "a"
110 fxxf : agree on "a"
111 fxxx : agree on ""
112 fxx- : agree on "a"
113 fx-f : hg said "", expected "a"
114 fx-x : hg said "", expected "a"
115 fx-- : hg said "", expected "a"
116 f-fx : agree on "a"
117 f-xf : agree on "a"
118 f-xx : hg said "", expected "a"
119 f-x- : agree on "a"
120 f--x : agree on "a"
121 -ffx : agree on "a"
122 -fxf C: agree on "a"
123 -fxx C: hg said "", expected "a"
124 -fx- C: agree on "a"
125 -f-x : hg said "", expected "a"
126 --fx : agree on "a"
127 #endif
128
129 19 Files modified or cleanly merged, with no greatest common ancestors:
130 20
131 21 $ hg init repo; cd repo
132 22 $ touch a0 b0; hg commit -qAm 0
133 23 $ hg up -qr null; touch a1 b1; hg commit -qAm 1
134 24 $ hg merge -qr 0; rm b*; hg commit -qAm 2
135 25 $ hg log -r . -T '{files}\n'
136 26 b0 b1
137 27 $ cd ../
138 28 $ rm -rf repo
139 29
140 30 A few cases of criss-cross merges involving deletions (listing all
141 31 such merges is probably too much). Both gcas contain $files, so we
142 32 expect the final merge to behave like a merge with a single gca
143 33 containing $files.
144 34
145 35 $ hg init repo; cd repo
146 36 $ files="c1 u1 c2 u2"
147 37 $ touch $files; hg commit -qAm '0 root'
148 38 $ for f in $files; do echo f > $f; done; hg commit -qAm '1 gca1'
149 39 $ hg up -qr0; hg revert -qr 1 --all; hg commit -qAm '2 gca2'
150 40 $ hg up -qr 1; hg merge -qr 2; rm *1; hg commit -qAm '3 p1'
151 41 $ hg up -qr 2; hg merge -qr 1; rm *2; hg commit -qAm '4 p2'
152 42 $ hg merge -qr 3; echo f > u1; echo f > u2; rm -f c1 c2
153 43 $ hg commit -qAm '5 merge with two gcas'
154 44 $ hg log -r . -T '{files}\n' # expecting u1 u2
155 45
156 46 $ cd ../
157 47 $ rm -rf repo
@@ -1,73 +1,73 b''
1 # genmerges is the workhorse of the test-merge-combination.t tests.
1 # genmerges is the workhorse of the test-merge-combination-*.t tests.
2 2
3 3 # Given:
4 4 # - a `range` function describing the possible values for file a
5 5 # - a `isgood` function to filter out uninteresting combination
6 6 # - a `createfile` function to actually write the values for file a on the
7 7 # filesystem
8 8 #
9 9 # it print a series of lines that look like: abcd C: output of -T {files}
10 10 # describing the file a at respectively the base, p2, p1, merge
11 11 # revision. "C" indicates that hg merge had conflicts.
12 12
13 13 genmerges () {
14 14
15 15 (LC_ALL=C type range | grep -q 'function') || (echo >&2 "missing function: range")
16 16 (LC_ALL=C type isgood | grep -q 'function') || (echo >&2 "missing function: isgood")
17 17 (LC_ALL=C type createfile | grep -q 'function') || (echo >&2 "missing function: createfile")
18 18
19 19 for base in `range` -; do
20 20 for r1 in `range $base` -; do
21 21 for r2 in `range $base $r1` -; do
22 22 for m in `range $base $r1 $r2` -; do
23 23 line="$base$r1$r2$m"
24 24 isgood $line || continue
25 25 hg init repo
26 26 cd repo
27 27 make_commit () {
28 28 v=$1; msg=$2; file=$3;
29 29 if [ $v != - ]; then
30 30 createfile $v
31 31 else
32 32 if [ -f a ]
33 33 then rm a
34 34 else touch $file
35 35 fi
36 36 fi
37 37 hg commit -q -Am $msg || exit 123
38 38 }
39 39 echo foo > foo
40 40 make_commit $base base b
41 41 make_commit $r1 r1 c
42 42 hg up -r 0 -q
43 43 make_commit $r2 r2 d
44 44 hg merge -q -r 1 > ../output 2>&1
45 45 if [ $? -ne 0 ]; then rm -f *.orig; hg resolve -m --all -q; fi
46 46 if [ -s ../output ]; then conflicts=" C"; else conflicts=" "; fi
47 47 make_commit $m m e
48 48 if [ $m = $r1 ] && [ $m = $r2 ]
49 49 then expected=
50 50 elif [ $m = $r1 ]
51 51 then if [ $base = $r2 ]
52 52 then expected=
53 53 else expected=a
54 54 fi
55 55 elif [ $m = $r2 ]
56 56 then if [ $base = $r1 ]
57 57 then expected=
58 58 else expected=a
59 59 fi
60 60 else expected=a
61 61 fi
62 62 got=`hg log -r 3 --template '{files}\n' | tr -d 'e '`
63 63 if [ "$got" = "$expected" ]
64 64 then echo "$line$conflicts: agree on \"$got\""
65 65 else echo "$line$conflicts: hg said \"$got\", expected \"$expected\""
66 66 fi
67 67 cd ../
68 68 rm -rf repo
69 69 done
70 70 done
71 71 done
72 72 done
73 73 }
General Comments 0
You need to be logged in to leave comments. Login now