##// END OF EJS Templates
debugindex: rename the parent column to mention nodeid...
marmoute -
r50147:4141951d default
parent child Browse files
Show More
@@ -1,51 +1,55 b''
1 # revlogutils/debug.py - utility used for revlog debuging
1 # revlogutils/debug.py - utility used for revlog debuging
2 #
2 #
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
4 # Copyright 2022 Octobus <contact@octobus.net>
4 # Copyright 2022 Octobus <contact@octobus.net>
5 #
5 #
6 # This software may be used and distributed according to the terms of the
6 # This software may be used and distributed according to the terms of the
7 # GNU General Public License version 2 or any later version.
7 # GNU General Public License version 2 or any later version.
8
8
9 from .. import (
9 from .. import (
10 node as nodemod,
10 node as nodemod,
11 )
11 )
12
12
13
13
14 def debug_index(
14 def debug_index(
15 ui,
15 ui,
16 repo,
16 repo,
17 formatter,
17 formatter,
18 revlog,
18 revlog,
19 full_node,
19 full_node,
20 ):
20 ):
21 """display index data for a revlog"""
21 """display index data for a revlog"""
22 if full_node:
22 if full_node:
23 hexfn = nodemod.hex
23 hexfn = nodemod.hex
24 else:
24 else:
25 hexfn = nodemod.short
25 hexfn = nodemod.short
26
26
27 idlen = 12
27 idlen = 12
28 for i in revlog:
28 for i in revlog:
29 idlen = len(hexfn(revlog.node(i)))
29 idlen = len(hexfn(revlog.node(i)))
30 break
30 break
31
31
32 fm = formatter
32 fm = formatter
33
33
34 fm.plain(
34 fm.plain(
35 b' rev linkrev %s %s %s\n'
35 b' rev linkrev %s %s %s\n'
36 % (b'nodeid'.rjust(idlen), b'p1'.rjust(idlen), b'p2'.rjust(idlen))
36 % (
37 b'nodeid'.rjust(idlen),
38 b'p1-nodeid'.rjust(idlen),
39 b'p2-nodeid'.rjust(idlen),
40 )
37 )
41 )
38
42
39 for rev in revlog:
43 for rev in revlog:
40 node = revlog.node(rev)
44 node = revlog.node(rev)
41 parents = revlog.parents(node)
45 parents = revlog.parents(node)
42
46
43 fm.startitem()
47 fm.startitem()
44 fm.write(b'rev', b'%6d ', rev)
48 fm.write(b'rev', b'%6d ', rev)
45 fm.write(b'linkrev', b'%7d ', revlog.linkrev(rev))
49 fm.write(b'linkrev', b'%7d ', revlog.linkrev(rev))
46 fm.write(b'node', b'%s ', hexfn(node))
50 fm.write(b'node', b'%s ', hexfn(node))
47 fm.write(b'p1', b'%s ', hexfn(parents[0]))
51 fm.write(b'p1', b'%s ', hexfn(parents[0]))
48 fm.write(b'p2', b'%s', hexfn(parents[1]))
52 fm.write(b'p2', b'%s', hexfn(parents[1]))
49 fm.plain(b'\n')
53 fm.plain(b'\n')
50
54
51 fm.end()
55 fm.end()
@@ -1,57 +1,57 b''
1 #require execbit
1 #require execbit
2
2
3 b51a8138292a introduced a regression where we would mention in the
3 b51a8138292a introduced a regression where we would mention in the
4 changelog executable files added by the second parent of a merge. Test
4 changelog executable files added by the second parent of a merge. Test
5 that that doesn't happen anymore
5 that that doesn't happen anymore
6
6
7 $ hg init repo
7 $ hg init repo
8 $ cd repo
8 $ cd repo
9 $ echo foo > foo
9 $ echo foo > foo
10 $ hg ci -qAm 'add foo'
10 $ hg ci -qAm 'add foo'
11
11
12 $ echo bar > bar
12 $ echo bar > bar
13 $ chmod +x bar
13 $ chmod +x bar
14 $ hg ci -qAm 'add bar'
14 $ hg ci -qAm 'add bar'
15
15
16 manifest of p2:
16 manifest of p2:
17
17
18 $ hg manifest
18 $ hg manifest
19 bar
19 bar
20 foo
20 foo
21
21
22 $ hg up -qC 0
22 $ hg up -qC 0
23 $ echo >> foo
23 $ echo >> foo
24 $ hg ci -m 'change foo'
24 $ hg ci -m 'change foo'
25 created new head
25 created new head
26
26
27 manifest of p1:
27 manifest of p1:
28
28
29 $ hg manifest
29 $ hg manifest
30 foo
30 foo
31
31
32 $ hg merge
32 $ hg merge
33 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
33 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
34 (branch merge, don't forget to commit)
34 (branch merge, don't forget to commit)
35 $ chmod +x foo
35 $ chmod +x foo
36 $ hg ci -m 'merge'
36 $ hg ci -m 'merge'
37
37
38 this should not mention bar but should mention foo:
38 this should not mention bar but should mention foo:
39
39
40 $ hg tip -v
40 $ hg tip -v
41 changeset: 3:c53d17ff3380
41 changeset: 3:c53d17ff3380
42 tag: tip
42 tag: tip
43 parent: 2:ed1b79f46b9a
43 parent: 2:ed1b79f46b9a
44 parent: 1:d394a8db219b
44 parent: 1:d394a8db219b
45 user: test
45 user: test
46 date: Thu Jan 01 00:00:00 1970 +0000
46 date: Thu Jan 01 00:00:00 1970 +0000
47 files: foo
47 files: foo
48 description:
48 description:
49 merge
49 merge
50
50
51
51
52
52
53 $ hg debugindex bar
53 $ hg debugindex bar
54 rev linkrev nodeid p1 p2
54 rev linkrev nodeid p1-nodeid p2-nodeid
55 0 1 b004912a8510 000000000000 000000000000
55 0 1 b004912a8510 000000000000 000000000000
56
56
57 $ cd ..
57 $ cd ..
@@ -1,254 +1,254 b''
1 $ hg init test
1 $ hg init test
2 $ cd test
2 $ cd test
3
3
4 $ echo 0 >> afile
4 $ echo 0 >> afile
5 $ hg add afile
5 $ hg add afile
6 $ hg commit -m "0.0"
6 $ hg commit -m "0.0"
7
7
8 $ echo 1 >> afile
8 $ echo 1 >> afile
9 $ hg commit -m "0.1"
9 $ hg commit -m "0.1"
10
10
11 $ echo 2 >> afile
11 $ echo 2 >> afile
12 $ hg commit -m "0.2"
12 $ hg commit -m "0.2"
13
13
14 $ echo 3 >> afile
14 $ echo 3 >> afile
15 $ hg commit -m "0.3"
15 $ hg commit -m "0.3"
16
16
17 $ hg update -C 0
17 $ hg update -C 0
18 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
18 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
19
19
20 $ echo 1 >> afile
20 $ echo 1 >> afile
21 $ hg commit -m "1.1"
21 $ hg commit -m "1.1"
22 created new head
22 created new head
23
23
24 $ echo 2 >> afile
24 $ echo 2 >> afile
25 $ hg commit -m "1.2"
25 $ hg commit -m "1.2"
26
26
27 $ echo a line > fred
27 $ echo a line > fred
28 $ echo 3 >> afile
28 $ echo 3 >> afile
29 $ hg add fred
29 $ hg add fred
30 $ hg commit -m "1.3"
30 $ hg commit -m "1.3"
31 $ hg mv afile adifferentfile
31 $ hg mv afile adifferentfile
32 $ hg commit -m "1.3m"
32 $ hg commit -m "1.3m"
33
33
34 $ hg update -C 3
34 $ hg update -C 3
35 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
35 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
36
36
37 $ hg mv afile anotherfile
37 $ hg mv afile anotherfile
38 $ hg commit -m "0.3m"
38 $ hg commit -m "0.3m"
39
39
40 $ hg debugrevlogindex -f 1 afile
40 $ hg debugrevlogindex -f 1 afile
41 rev flag size link p1 p2 nodeid
41 rev flag size link p1 p2 nodeid
42 0 0000 2 0 -1 -1 362fef284ce2
42 0 0000 2 0 -1 -1 362fef284ce2
43 1 0000 4 1 0 -1 125144f7e028
43 1 0000 4 1 0 -1 125144f7e028
44 2 0000 6 2 1 -1 4c982badb186
44 2 0000 6 2 1 -1 4c982badb186
45 3 0000 8 3 2 -1 19b1fc555737
45 3 0000 8 3 2 -1 19b1fc555737
46
46
47 $ hg debugindex adifferentfile
47 $ hg debugindex adifferentfile
48 rev linkrev nodeid p1 p2
48 rev linkrev nodeid p1-nodeid p2-nodeid
49 0 7 2565f3199a74 000000000000 000000000000
49 0 7 2565f3199a74 000000000000 000000000000
50
50
51 $ hg debugindex anotherfile
51 $ hg debugindex anotherfile
52 rev linkrev nodeid p1 p2
52 rev linkrev nodeid p1-nodeid p2-nodeid
53 0 8 2565f3199a74 000000000000 000000000000
53 0 8 2565f3199a74 000000000000 000000000000
54
54
55 $ hg debugindex fred
55 $ hg debugindex fred
56 rev linkrev nodeid p1 p2
56 rev linkrev nodeid p1-nodeid p2-nodeid
57 0 6 12ab3bcc5ea4 000000000000 000000000000
57 0 6 12ab3bcc5ea4 000000000000 000000000000
58
58
59 $ hg debugindex --manifest
59 $ hg debugindex --manifest
60 rev linkrev nodeid p1 p2
60 rev linkrev nodeid p1-nodeid p2-nodeid
61 0 0 43eadb1d2d06 000000000000 000000000000
61 0 0 43eadb1d2d06 000000000000 000000000000
62 1 1 8b89697eba2c 43eadb1d2d06 000000000000
62 1 1 8b89697eba2c 43eadb1d2d06 000000000000
63 2 2 626a32663c2f 8b89697eba2c 000000000000
63 2 2 626a32663c2f 8b89697eba2c 000000000000
64 3 3 f54c32f13478 626a32663c2f 000000000000
64 3 3 f54c32f13478 626a32663c2f 000000000000
65 4 6 de68e904d169 626a32663c2f 000000000000
65 4 6 de68e904d169 626a32663c2f 000000000000
66 5 7 09bb521d218d de68e904d169 000000000000
66 5 7 09bb521d218d de68e904d169 000000000000
67 6 8 1fde233dfb0f f54c32f13478 000000000000
67 6 8 1fde233dfb0f f54c32f13478 000000000000
68
68
69 $ hg verify
69 $ hg verify
70 checking changesets
70 checking changesets
71 checking manifests
71 checking manifests
72 crosschecking files in changesets and manifests
72 crosschecking files in changesets and manifests
73 checking files
73 checking files
74 checked 9 changesets with 7 changes to 4 files
74 checked 9 changesets with 7 changes to 4 files
75
75
76 $ cd ..
76 $ cd ..
77
77
78 $ for i in 0 1 2 3 4 5 6 7 8; do
78 $ for i in 0 1 2 3 4 5 6 7 8; do
79 > echo
79 > echo
80 > echo ---- hg clone -r "$i" test test-"$i"
80 > echo ---- hg clone -r "$i" test test-"$i"
81 > hg clone -r "$i" test test-"$i"
81 > hg clone -r "$i" test test-"$i"
82 > cd test-"$i"
82 > cd test-"$i"
83 > hg verify
83 > hg verify
84 > cd ..
84 > cd ..
85 > done
85 > done
86
86
87 ---- hg clone -r 0 test test-0
87 ---- hg clone -r 0 test test-0
88 adding changesets
88 adding changesets
89 adding manifests
89 adding manifests
90 adding file changes
90 adding file changes
91 added 1 changesets with 1 changes to 1 files
91 added 1 changesets with 1 changes to 1 files
92 new changesets f9ee2f85a263
92 new changesets f9ee2f85a263
93 updating to branch default
93 updating to branch default
94 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
94 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
95 checking changesets
95 checking changesets
96 checking manifests
96 checking manifests
97 crosschecking files in changesets and manifests
97 crosschecking files in changesets and manifests
98 checking files
98 checking files
99 checked 1 changesets with 1 changes to 1 files
99 checked 1 changesets with 1 changes to 1 files
100
100
101 ---- hg clone -r 1 test test-1
101 ---- hg clone -r 1 test test-1
102 adding changesets
102 adding changesets
103 adding manifests
103 adding manifests
104 adding file changes
104 adding file changes
105 added 2 changesets with 2 changes to 1 files
105 added 2 changesets with 2 changes to 1 files
106 new changesets f9ee2f85a263:34c2bf6b0626
106 new changesets f9ee2f85a263:34c2bf6b0626
107 updating to branch default
107 updating to branch default
108 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
108 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
109 checking changesets
109 checking changesets
110 checking manifests
110 checking manifests
111 crosschecking files in changesets and manifests
111 crosschecking files in changesets and manifests
112 checking files
112 checking files
113 checked 2 changesets with 2 changes to 1 files
113 checked 2 changesets with 2 changes to 1 files
114
114
115 ---- hg clone -r 2 test test-2
115 ---- hg clone -r 2 test test-2
116 adding changesets
116 adding changesets
117 adding manifests
117 adding manifests
118 adding file changes
118 adding file changes
119 added 3 changesets with 3 changes to 1 files
119 added 3 changesets with 3 changes to 1 files
120 new changesets f9ee2f85a263:e38ba6f5b7e0
120 new changesets f9ee2f85a263:e38ba6f5b7e0
121 updating to branch default
121 updating to branch default
122 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
122 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
123 checking changesets
123 checking changesets
124 checking manifests
124 checking manifests
125 crosschecking files in changesets and manifests
125 crosschecking files in changesets and manifests
126 checking files
126 checking files
127 checked 3 changesets with 3 changes to 1 files
127 checked 3 changesets with 3 changes to 1 files
128
128
129 ---- hg clone -r 3 test test-3
129 ---- hg clone -r 3 test test-3
130 adding changesets
130 adding changesets
131 adding manifests
131 adding manifests
132 adding file changes
132 adding file changes
133 added 4 changesets with 4 changes to 1 files
133 added 4 changesets with 4 changes to 1 files
134 new changesets f9ee2f85a263:eebf5a27f8ca
134 new changesets f9ee2f85a263:eebf5a27f8ca
135 updating to branch default
135 updating to branch default
136 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
136 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
137 checking changesets
137 checking changesets
138 checking manifests
138 checking manifests
139 crosschecking files in changesets and manifests
139 crosschecking files in changesets and manifests
140 checking files
140 checking files
141 checked 4 changesets with 4 changes to 1 files
141 checked 4 changesets with 4 changes to 1 files
142
142
143 ---- hg clone -r 4 test test-4
143 ---- hg clone -r 4 test test-4
144 adding changesets
144 adding changesets
145 adding manifests
145 adding manifests
146 adding file changes
146 adding file changes
147 added 2 changesets with 2 changes to 1 files
147 added 2 changesets with 2 changes to 1 files
148 new changesets f9ee2f85a263:095197eb4973
148 new changesets f9ee2f85a263:095197eb4973
149 updating to branch default
149 updating to branch default
150 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
150 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
151 checking changesets
151 checking changesets
152 checking manifests
152 checking manifests
153 crosschecking files in changesets and manifests
153 crosschecking files in changesets and manifests
154 checking files
154 checking files
155 checked 2 changesets with 2 changes to 1 files
155 checked 2 changesets with 2 changes to 1 files
156
156
157 ---- hg clone -r 5 test test-5
157 ---- hg clone -r 5 test test-5
158 adding changesets
158 adding changesets
159 adding manifests
159 adding manifests
160 adding file changes
160 adding file changes
161 added 3 changesets with 3 changes to 1 files
161 added 3 changesets with 3 changes to 1 files
162 new changesets f9ee2f85a263:1bb50a9436a7
162 new changesets f9ee2f85a263:1bb50a9436a7
163 updating to branch default
163 updating to branch default
164 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
164 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
165 checking changesets
165 checking changesets
166 checking manifests
166 checking manifests
167 crosschecking files in changesets and manifests
167 crosschecking files in changesets and manifests
168 checking files
168 checking files
169 checked 3 changesets with 3 changes to 1 files
169 checked 3 changesets with 3 changes to 1 files
170
170
171 ---- hg clone -r 6 test test-6
171 ---- hg clone -r 6 test test-6
172 adding changesets
172 adding changesets
173 adding manifests
173 adding manifests
174 adding file changes
174 adding file changes
175 added 4 changesets with 5 changes to 2 files
175 added 4 changesets with 5 changes to 2 files
176 new changesets f9ee2f85a263:7373c1169842
176 new changesets f9ee2f85a263:7373c1169842
177 updating to branch default
177 updating to branch default
178 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
178 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
179 checking changesets
179 checking changesets
180 checking manifests
180 checking manifests
181 crosschecking files in changesets and manifests
181 crosschecking files in changesets and manifests
182 checking files
182 checking files
183 checked 4 changesets with 5 changes to 2 files
183 checked 4 changesets with 5 changes to 2 files
184
184
185 ---- hg clone -r 7 test test-7
185 ---- hg clone -r 7 test test-7
186 adding changesets
186 adding changesets
187 adding manifests
187 adding manifests
188 adding file changes
188 adding file changes
189 added 5 changesets with 6 changes to 3 files
189 added 5 changesets with 6 changes to 3 files
190 new changesets f9ee2f85a263:a6a34bfa0076
190 new changesets f9ee2f85a263:a6a34bfa0076
191 updating to branch default
191 updating to branch default
192 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
192 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
193 checking changesets
193 checking changesets
194 checking manifests
194 checking manifests
195 crosschecking files in changesets and manifests
195 crosschecking files in changesets and manifests
196 checking files
196 checking files
197 checked 5 changesets with 6 changes to 3 files
197 checked 5 changesets with 6 changes to 3 files
198
198
199 ---- hg clone -r 8 test test-8
199 ---- hg clone -r 8 test test-8
200 adding changesets
200 adding changesets
201 adding manifests
201 adding manifests
202 adding file changes
202 adding file changes
203 added 5 changesets with 5 changes to 2 files
203 added 5 changesets with 5 changes to 2 files
204 new changesets f9ee2f85a263:aa35859c02ea
204 new changesets f9ee2f85a263:aa35859c02ea
205 updating to branch default
205 updating to branch default
206 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
206 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
207 checking changesets
207 checking changesets
208 checking manifests
208 checking manifests
209 crosschecking files in changesets and manifests
209 crosschecking files in changesets and manifests
210 checking files
210 checking files
211 checked 5 changesets with 5 changes to 2 files
211 checked 5 changesets with 5 changes to 2 files
212
212
213 $ cd test-8
213 $ cd test-8
214 $ hg pull ../test-7
214 $ hg pull ../test-7
215 pulling from ../test-7
215 pulling from ../test-7
216 searching for changes
216 searching for changes
217 adding changesets
217 adding changesets
218 adding manifests
218 adding manifests
219 adding file changes
219 adding file changes
220 added 4 changesets with 2 changes to 3 files (+1 heads)
220 added 4 changesets with 2 changes to 3 files (+1 heads)
221 new changesets 095197eb4973:a6a34bfa0076
221 new changesets 095197eb4973:a6a34bfa0076
222 (run 'hg heads' to see heads, 'hg merge' to merge)
222 (run 'hg heads' to see heads, 'hg merge' to merge)
223 $ hg verify
223 $ hg verify
224 checking changesets
224 checking changesets
225 checking manifests
225 checking manifests
226 crosschecking files in changesets and manifests
226 crosschecking files in changesets and manifests
227 checking files
227 checking files
228 checked 9 changesets with 7 changes to 4 files
228 checked 9 changesets with 7 changes to 4 files
229 $ cd ..
229 $ cd ..
230
230
231 $ hg clone test test-9
231 $ hg clone test test-9
232 updating to branch default
232 updating to branch default
233 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
233 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
234 $ cd test-9
234 $ cd test-9
235 $ hg branch foobar
235 $ hg branch foobar
236 marked working directory as branch foobar
236 marked working directory as branch foobar
237 (branches are permanent and global, did you want a bookmark?)
237 (branches are permanent and global, did you want a bookmark?)
238 $ echo file2 >> file2
238 $ echo file2 >> file2
239 $ hg add file2
239 $ hg add file2
240 $ hg commit -m "changeset9"
240 $ hg commit -m "changeset9"
241 $ echo file3 >> file3
241 $ echo file3 >> file3
242 $ hg add file3
242 $ hg add file3
243 $ hg commit -m "changeset10"
243 $ hg commit -m "changeset10"
244 $ cd ..
244 $ cd ..
245 $ hg clone -r 9 -u foobar test-9 test-10
245 $ hg clone -r 9 -u foobar test-9 test-10
246 adding changesets
246 adding changesets
247 adding manifests
247 adding manifests
248 adding file changes
248 adding file changes
249 added 6 changesets with 6 changes to 3 files
249 added 6 changesets with 6 changes to 3 files
250 new changesets f9ee2f85a263:7100abb79635
250 new changesets f9ee2f85a263:7100abb79635
251 updating to branch foobar
251 updating to branch foobar
252 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
252 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
253
253
254
254
@@ -1,1330 +1,1330 b''
1 $ hg init
1 $ hg init
2
2
3 Setup:
3 Setup:
4
4
5 $ echo a >> a
5 $ echo a >> a
6 $ hg ci -Am 'base'
6 $ hg ci -Am 'base'
7 adding a
7 adding a
8
8
9 Refuse to amend public csets:
9 Refuse to amend public csets:
10
10
11 $ hg phase -r . -p
11 $ hg phase -r . -p
12 $ hg ci --amend
12 $ hg ci --amend
13 abort: cannot amend public changesets: ad120869acf0
13 abort: cannot amend public changesets: ad120869acf0
14 (see 'hg help phases' for details)
14 (see 'hg help phases' for details)
15 [10]
15 [10]
16 $ hg phase -r . -f -d
16 $ hg phase -r . -f -d
17
17
18 $ echo a >> a
18 $ echo a >> a
19 $ hg ci -Am 'base1'
19 $ hg ci -Am 'base1'
20
20
21 Nothing to amend:
21 Nothing to amend:
22
22
23 $ hg ci --amend -m 'base1'
23 $ hg ci --amend -m 'base1'
24 nothing changed
24 nothing changed
25 [1]
25 [1]
26
26
27 $ cat >> $HGRCPATH <<EOF
27 $ cat >> $HGRCPATH <<EOF
28 > [hooks]
28 > [hooks]
29 > pretxncommit.foo = sh -c "echo \\"pretxncommit \$HG_NODE\\"; hg id -r \$HG_NODE"
29 > pretxncommit.foo = sh -c "echo \\"pretxncommit \$HG_NODE\\"; hg id -r \$HG_NODE"
30 > EOF
30 > EOF
31
31
32 Amending changeset with changes in working dir:
32 Amending changeset with changes in working dir:
33 (and check that --message does not trigger an editor)
33 (and check that --message does not trigger an editor)
34
34
35 $ echo a >> a
35 $ echo a >> a
36 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend -m 'amend base1'
36 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend -m 'amend base1'
37 pretxncommit 43f1ba15f28a50abf0aae529cf8a16bfced7b149
37 pretxncommit 43f1ba15f28a50abf0aae529cf8a16bfced7b149
38 43f1ba15f28a tip
38 43f1ba15f28a tip
39 saved backup bundle to $TESTTMP/.hg/strip-backup/489edb5b847d-5ab4f721-amend.hg
39 saved backup bundle to $TESTTMP/.hg/strip-backup/489edb5b847d-5ab4f721-amend.hg
40 $ echo 'pretxncommit.foo = ' >> $HGRCPATH
40 $ echo 'pretxncommit.foo = ' >> $HGRCPATH
41 $ hg diff -c .
41 $ hg diff -c .
42 diff -r ad120869acf0 -r 43f1ba15f28a a
42 diff -r ad120869acf0 -r 43f1ba15f28a a
43 --- a/a Thu Jan 01 00:00:00 1970 +0000
43 --- a/a Thu Jan 01 00:00:00 1970 +0000
44 +++ b/a Thu Jan 01 00:00:00 1970 +0000
44 +++ b/a Thu Jan 01 00:00:00 1970 +0000
45 @@ -1,1 +1,3 @@
45 @@ -1,1 +1,3 @@
46 a
46 a
47 +a
47 +a
48 +a
48 +a
49 $ hg log
49 $ hg log
50 changeset: 1:43f1ba15f28a
50 changeset: 1:43f1ba15f28a
51 tag: tip
51 tag: tip
52 user: test
52 user: test
53 date: Thu Jan 01 00:00:00 1970 +0000
53 date: Thu Jan 01 00:00:00 1970 +0000
54 summary: amend base1
54 summary: amend base1
55
55
56 changeset: 0:ad120869acf0
56 changeset: 0:ad120869acf0
57 user: test
57 user: test
58 date: Thu Jan 01 00:00:00 1970 +0000
58 date: Thu Jan 01 00:00:00 1970 +0000
59 summary: base
59 summary: base
60
60
61
61
62 Check proper abort for empty message
62 Check proper abort for empty message
63
63
64 $ cat > editor.sh << '__EOF__'
64 $ cat > editor.sh << '__EOF__'
65 > #!/bin/sh
65 > #!/bin/sh
66 > echo "" > "$1"
66 > echo "" > "$1"
67 > __EOF__
67 > __EOF__
68
68
69 Update the existing file to ensure that the dirstate is not in pending state
69 Update the existing file to ensure that the dirstate is not in pending state
70 (where the status of some files in the working copy is not known yet). This in
70 (where the status of some files in the working copy is not known yet). This in
71 turn ensures that when the transaction is aborted due to an empty message during
71 turn ensures that when the transaction is aborted due to an empty message during
72 the amend, there should be no rollback.
72 the amend, there should be no rollback.
73 $ echo a >> a
73 $ echo a >> a
74
74
75 $ echo b > b
75 $ echo b > b
76 $ hg add b
76 $ hg add b
77 $ hg summary
77 $ hg summary
78 parent: 1:43f1ba15f28a tip
78 parent: 1:43f1ba15f28a tip
79 amend base1
79 amend base1
80 branch: default
80 branch: default
81 commit: 1 modified, 1 added, 1 unknown
81 commit: 1 modified, 1 added, 1 unknown
82 update: (current)
82 update: (current)
83 phases: 2 draft
83 phases: 2 draft
84 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend
84 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend
85 abort: empty commit message
85 abort: empty commit message
86 [10]
86 [10]
87 $ hg summary
87 $ hg summary
88 parent: 1:43f1ba15f28a tip
88 parent: 1:43f1ba15f28a tip
89 amend base1
89 amend base1
90 branch: default
90 branch: default
91 commit: 1 modified, 1 added, 1 unknown
91 commit: 1 modified, 1 added, 1 unknown
92 update: (current)
92 update: (current)
93 phases: 2 draft
93 phases: 2 draft
94
94
95 Add new file along with modified existing file:
95 Add new file along with modified existing file:
96 $ hg ci --amend -m 'amend base1 new file'
96 $ hg ci --amend -m 'amend base1 new file'
97 saved backup bundle to $TESTTMP/.hg/strip-backup/43f1ba15f28a-007467c2-amend.hg
97 saved backup bundle to $TESTTMP/.hg/strip-backup/43f1ba15f28a-007467c2-amend.hg
98
98
99 Remove file that was added in amended commit:
99 Remove file that was added in amended commit:
100 (and test logfile option)
100 (and test logfile option)
101 (and test that logfile option do not trigger an editor)
101 (and test that logfile option do not trigger an editor)
102
102
103 $ hg rm b
103 $ hg rm b
104 $ echo 'amend base1 remove new file' > ../logfile
104 $ echo 'amend base1 remove new file' > ../logfile
105 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg ci --amend --logfile ../logfile
105 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg ci --amend --logfile ../logfile
106 saved backup bundle to $TESTTMP/.hg/strip-backup/c16295aaf401-1ada9901-amend.hg
106 saved backup bundle to $TESTTMP/.hg/strip-backup/c16295aaf401-1ada9901-amend.hg
107
107
108 $ hg cat b
108 $ hg cat b
109 b: no such file in rev 47343646fa3d
109 b: no such file in rev 47343646fa3d
110 [1]
110 [1]
111
111
112 No changes, just a different message:
112 No changes, just a different message:
113
113
114 $ hg ci -v --amend -m 'no changes, new message'
114 $ hg ci -v --amend -m 'no changes, new message'
115 amending changeset 47343646fa3d
115 amending changeset 47343646fa3d
116 copying changeset 47343646fa3d to ad120869acf0
116 copying changeset 47343646fa3d to ad120869acf0
117 committing files:
117 committing files:
118 a
118 a
119 committing manifest
119 committing manifest
120 committing changelog
120 committing changelog
121 1 changesets found
121 1 changesets found
122 uncompressed size of bundle content:
122 uncompressed size of bundle content:
123 254 (changelog)
123 254 (changelog)
124 163 (manifests)
124 163 (manifests)
125 131 a
125 131 a
126 saved backup bundle to $TESTTMP/.hg/strip-backup/47343646fa3d-c2758885-amend.hg
126 saved backup bundle to $TESTTMP/.hg/strip-backup/47343646fa3d-c2758885-amend.hg
127 1 changesets found
127 1 changesets found
128 uncompressed size of bundle content:
128 uncompressed size of bundle content:
129 250 (changelog)
129 250 (changelog)
130 163 (manifests)
130 163 (manifests)
131 131 a
131 131 a
132 adding branch
132 adding branch
133 adding changesets
133 adding changesets
134 adding manifests
134 adding manifests
135 adding file changes
135 adding file changes
136 added 1 changesets with 1 changes to 1 files
136 added 1 changesets with 1 changes to 1 files
137 committed changeset 1:401431e913a1
137 committed changeset 1:401431e913a1
138 $ hg diff -c .
138 $ hg diff -c .
139 diff -r ad120869acf0 -r 401431e913a1 a
139 diff -r ad120869acf0 -r 401431e913a1 a
140 --- a/a Thu Jan 01 00:00:00 1970 +0000
140 --- a/a Thu Jan 01 00:00:00 1970 +0000
141 +++ b/a Thu Jan 01 00:00:00 1970 +0000
141 +++ b/a Thu Jan 01 00:00:00 1970 +0000
142 @@ -1,1 +1,4 @@
142 @@ -1,1 +1,4 @@
143 a
143 a
144 +a
144 +a
145 +a
145 +a
146 +a
146 +a
147 $ hg log
147 $ hg log
148 changeset: 1:401431e913a1
148 changeset: 1:401431e913a1
149 tag: tip
149 tag: tip
150 user: test
150 user: test
151 date: Thu Jan 01 00:00:00 1970 +0000
151 date: Thu Jan 01 00:00:00 1970 +0000
152 summary: no changes, new message
152 summary: no changes, new message
153
153
154 changeset: 0:ad120869acf0
154 changeset: 0:ad120869acf0
155 user: test
155 user: test
156 date: Thu Jan 01 00:00:00 1970 +0000
156 date: Thu Jan 01 00:00:00 1970 +0000
157 summary: base
157 summary: base
158
158
159
159
160 Disable default date on commit so when -d isn't given, the old date is preserved:
160 Disable default date on commit so when -d isn't given, the old date is preserved:
161
161
162 $ echo '[defaults]' >> $HGRCPATH
162 $ echo '[defaults]' >> $HGRCPATH
163 $ echo 'commit=' >> $HGRCPATH
163 $ echo 'commit=' >> $HGRCPATH
164
164
165 Test -u/-d:
165 Test -u/-d:
166
166
167 $ cat > .hg/checkeditform.sh <<EOF
167 $ cat > .hg/checkeditform.sh <<EOF
168 > env | grep HGEDITFORM
168 > env | grep HGEDITFORM
169 > true
169 > true
170 > EOF
170 > EOF
171 $ HGEDITOR="sh .hg/checkeditform.sh" hg ci --amend -u foo -d '1 0'
171 $ HGEDITOR="sh .hg/checkeditform.sh" hg ci --amend -u foo -d '1 0'
172 HGEDITFORM=commit.amend.normal
172 HGEDITFORM=commit.amend.normal
173 saved backup bundle to $TESTTMP/.hg/strip-backup/401431e913a1-5e8e532c-amend.hg
173 saved backup bundle to $TESTTMP/.hg/strip-backup/401431e913a1-5e8e532c-amend.hg
174 $ echo a >> a
174 $ echo a >> a
175 $ hg ci --amend -u foo -d '1 0'
175 $ hg ci --amend -u foo -d '1 0'
176 saved backup bundle to $TESTTMP/.hg/strip-backup/d96b1d28ae33-677e0afb-amend.hg
176 saved backup bundle to $TESTTMP/.hg/strip-backup/d96b1d28ae33-677e0afb-amend.hg
177 $ hg log -r .
177 $ hg log -r .
178 changeset: 1:a9a13940fc03
178 changeset: 1:a9a13940fc03
179 tag: tip
179 tag: tip
180 user: foo
180 user: foo
181 date: Thu Jan 01 00:00:01 1970 +0000
181 date: Thu Jan 01 00:00:01 1970 +0000
182 summary: no changes, new message
182 summary: no changes, new message
183
183
184
184
185 Open editor with old commit message if a message isn't given otherwise:
185 Open editor with old commit message if a message isn't given otherwise:
186
186
187 $ cat > editor.sh << '__EOF__'
187 $ cat > editor.sh << '__EOF__'
188 > #!/bin/sh
188 > #!/bin/sh
189 > cat $1
189 > cat $1
190 > echo "another precious commit message" > "$1"
190 > echo "another precious commit message" > "$1"
191 > __EOF__
191 > __EOF__
192
192
193 at first, test saving last-message.txt
193 at first, test saving last-message.txt
194
194
195 $ cat > .hg/hgrc << '__EOF__'
195 $ cat > .hg/hgrc << '__EOF__'
196 > [hooks]
196 > [hooks]
197 > pretxncommit.test-saving-last-message = false
197 > pretxncommit.test-saving-last-message = false
198 > __EOF__
198 > __EOF__
199
199
200 $ rm -f .hg/last-message.txt
200 $ rm -f .hg/last-message.txt
201 $ hg commit --amend -v -m "message given from command line"
201 $ hg commit --amend -v -m "message given from command line"
202 amending changeset a9a13940fc03
202 amending changeset a9a13940fc03
203 copying changeset a9a13940fc03 to ad120869acf0
203 copying changeset a9a13940fc03 to ad120869acf0
204 committing files:
204 committing files:
205 a
205 a
206 committing manifest
206 committing manifest
207 committing changelog
207 committing changelog
208 running hook pretxncommit.test-saving-last-message: false
208 running hook pretxncommit.test-saving-last-message: false
209 transaction abort!
209 transaction abort!
210 rollback completed
210 rollback completed
211 abort: pretxncommit.test-saving-last-message hook exited with status 1
211 abort: pretxncommit.test-saving-last-message hook exited with status 1
212 [40]
212 [40]
213 $ cat .hg/last-message.txt
213 $ cat .hg/last-message.txt
214 message given from command line (no-eol)
214 message given from command line (no-eol)
215
215
216 $ rm -f .hg/last-message.txt
216 $ rm -f .hg/last-message.txt
217 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend -v
217 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend -v
218 amending changeset a9a13940fc03
218 amending changeset a9a13940fc03
219 copying changeset a9a13940fc03 to ad120869acf0
219 copying changeset a9a13940fc03 to ad120869acf0
220 no changes, new message
220 no changes, new message
221
221
222
222
223 HG: Enter commit message. Lines beginning with 'HG:' are removed.
223 HG: Enter commit message. Lines beginning with 'HG:' are removed.
224 HG: Leave message empty to abort commit.
224 HG: Leave message empty to abort commit.
225 HG: --
225 HG: --
226 HG: user: foo
226 HG: user: foo
227 HG: branch 'default'
227 HG: branch 'default'
228 HG: changed a
228 HG: changed a
229 committing files:
229 committing files:
230 a
230 a
231 committing manifest
231 committing manifest
232 committing changelog
232 committing changelog
233 running hook pretxncommit.test-saving-last-message: false
233 running hook pretxncommit.test-saving-last-message: false
234 transaction abort!
234 transaction abort!
235 rollback completed
235 rollback completed
236 abort: pretxncommit.test-saving-last-message hook exited with status 1
236 abort: pretxncommit.test-saving-last-message hook exited with status 1
237 [40]
237 [40]
238
238
239 $ cat .hg/last-message.txt
239 $ cat .hg/last-message.txt
240 another precious commit message
240 another precious commit message
241
241
242 $ cat > .hg/hgrc << '__EOF__'
242 $ cat > .hg/hgrc << '__EOF__'
243 > [hooks]
243 > [hooks]
244 > pretxncommit.test-saving-last-message =
244 > pretxncommit.test-saving-last-message =
245 > __EOF__
245 > __EOF__
246
246
247 then, test editing custom commit message
247 then, test editing custom commit message
248
248
249 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend -v
249 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend -v
250 amending changeset a9a13940fc03
250 amending changeset a9a13940fc03
251 copying changeset a9a13940fc03 to ad120869acf0
251 copying changeset a9a13940fc03 to ad120869acf0
252 no changes, new message
252 no changes, new message
253
253
254
254
255 HG: Enter commit message. Lines beginning with 'HG:' are removed.
255 HG: Enter commit message. Lines beginning with 'HG:' are removed.
256 HG: Leave message empty to abort commit.
256 HG: Leave message empty to abort commit.
257 HG: --
257 HG: --
258 HG: user: foo
258 HG: user: foo
259 HG: branch 'default'
259 HG: branch 'default'
260 HG: changed a
260 HG: changed a
261 committing files:
261 committing files:
262 a
262 a
263 committing manifest
263 committing manifest
264 committing changelog
264 committing changelog
265 1 changesets found
265 1 changesets found
266 uncompressed size of bundle content:
266 uncompressed size of bundle content:
267 249 (changelog)
267 249 (changelog)
268 163 (manifests)
268 163 (manifests)
269 133 a
269 133 a
270 saved backup bundle to $TESTTMP/.hg/strip-backup/a9a13940fc03-7c2e8674-amend.hg
270 saved backup bundle to $TESTTMP/.hg/strip-backup/a9a13940fc03-7c2e8674-amend.hg
271 1 changesets found
271 1 changesets found
272 uncompressed size of bundle content:
272 uncompressed size of bundle content:
273 257 (changelog)
273 257 (changelog)
274 163 (manifests)
274 163 (manifests)
275 133 a
275 133 a
276 adding branch
276 adding branch
277 adding changesets
277 adding changesets
278 adding manifests
278 adding manifests
279 adding file changes
279 adding file changes
280 added 1 changesets with 1 changes to 1 files
280 added 1 changesets with 1 changes to 1 files
281 committed changeset 1:64a124ba1b44
281 committed changeset 1:64a124ba1b44
282
282
283 Same, but with changes in working dir (different code path):
283 Same, but with changes in working dir (different code path):
284
284
285 $ echo a >> a
285 $ echo a >> a
286 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend -v
286 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend -v
287 amending changeset 64a124ba1b44
287 amending changeset 64a124ba1b44
288 another precious commit message
288 another precious commit message
289
289
290
290
291 HG: Enter commit message. Lines beginning with 'HG:' are removed.
291 HG: Enter commit message. Lines beginning with 'HG:' are removed.
292 HG: Leave message empty to abort commit.
292 HG: Leave message empty to abort commit.
293 HG: --
293 HG: --
294 HG: user: foo
294 HG: user: foo
295 HG: branch 'default'
295 HG: branch 'default'
296 HG: changed a
296 HG: changed a
297 committing files:
297 committing files:
298 a
298 a
299 committing manifest
299 committing manifest
300 committing changelog
300 committing changelog
301 1 changesets found
301 1 changesets found
302 uncompressed size of bundle content:
302 uncompressed size of bundle content:
303 257 (changelog)
303 257 (changelog)
304 163 (manifests)
304 163 (manifests)
305 133 a
305 133 a
306 saved backup bundle to $TESTTMP/.hg/strip-backup/64a124ba1b44-10374b8f-amend.hg
306 saved backup bundle to $TESTTMP/.hg/strip-backup/64a124ba1b44-10374b8f-amend.hg
307 1 changesets found
307 1 changesets found
308 uncompressed size of bundle content:
308 uncompressed size of bundle content:
309 257 (changelog)
309 257 (changelog)
310 163 (manifests)
310 163 (manifests)
311 135 a
311 135 a
312 adding branch
312 adding branch
313 adding changesets
313 adding changesets
314 adding manifests
314 adding manifests
315 adding file changes
315 adding file changes
316 added 1 changesets with 1 changes to 1 files
316 added 1 changesets with 1 changes to 1 files
317 committed changeset 1:7892795b8e38
317 committed changeset 1:7892795b8e38
318
318
319 $ rm editor.sh
319 $ rm editor.sh
320 $ hg log -r .
320 $ hg log -r .
321 changeset: 1:7892795b8e38
321 changeset: 1:7892795b8e38
322 tag: tip
322 tag: tip
323 user: foo
323 user: foo
324 date: Thu Jan 01 00:00:01 1970 +0000
324 date: Thu Jan 01 00:00:01 1970 +0000
325 summary: another precious commit message
325 summary: another precious commit message
326
326
327
327
328 Moving bookmarks, preserve active bookmark:
328 Moving bookmarks, preserve active bookmark:
329
329
330 $ hg book book1
330 $ hg book book1
331 $ hg book book2
331 $ hg book book2
332 $ hg ci --amend -m 'move bookmarks'
332 $ hg ci --amend -m 'move bookmarks'
333 saved backup bundle to $TESTTMP/.hg/strip-backup/7892795b8e38-3fb46217-amend.hg
333 saved backup bundle to $TESTTMP/.hg/strip-backup/7892795b8e38-3fb46217-amend.hg
334 $ hg book
334 $ hg book
335 book1 1:8311f17e2616
335 book1 1:8311f17e2616
336 * book2 1:8311f17e2616
336 * book2 1:8311f17e2616
337 $ echo a >> a
337 $ echo a >> a
338 $ hg ci --amend -m 'move bookmarks'
338 $ hg ci --amend -m 'move bookmarks'
339 saved backup bundle to $TESTTMP/.hg/strip-backup/8311f17e2616-f0504fe3-amend.hg
339 saved backup bundle to $TESTTMP/.hg/strip-backup/8311f17e2616-f0504fe3-amend.hg
340 $ hg book
340 $ hg book
341 book1 1:a3b65065808c
341 book1 1:a3b65065808c
342 * book2 1:a3b65065808c
342 * book2 1:a3b65065808c
343
343
344 abort does not loose bookmarks
344 abort does not loose bookmarks
345
345
346 $ cat > editor.sh << '__EOF__'
346 $ cat > editor.sh << '__EOF__'
347 > #!/bin/sh
347 > #!/bin/sh
348 > echo "" > "$1"
348 > echo "" > "$1"
349 > __EOF__
349 > __EOF__
350 $ echo a >> a
350 $ echo a >> a
351 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend
351 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend
352 abort: empty commit message
352 abort: empty commit message
353 [10]
353 [10]
354 $ hg book
354 $ hg book
355 book1 1:a3b65065808c
355 book1 1:a3b65065808c
356 * book2 1:a3b65065808c
356 * book2 1:a3b65065808c
357 $ hg revert -Caq
357 $ hg revert -Caq
358 $ rm editor.sh
358 $ rm editor.sh
359
359
360 $ echo '[defaults]' >> $HGRCPATH
360 $ echo '[defaults]' >> $HGRCPATH
361 $ echo "commit=-d '0 0'" >> $HGRCPATH
361 $ echo "commit=-d '0 0'" >> $HGRCPATH
362
362
363 Moving branches:
363 Moving branches:
364
364
365 $ hg branch foo
365 $ hg branch foo
366 marked working directory as branch foo
366 marked working directory as branch foo
367 (branches are permanent and global, did you want a bookmark?)
367 (branches are permanent and global, did you want a bookmark?)
368 $ echo a >> a
368 $ echo a >> a
369 $ hg ci -m 'branch foo'
369 $ hg ci -m 'branch foo'
370 $ hg branch default -f
370 $ hg branch default -f
371 marked working directory as branch default
371 marked working directory as branch default
372 $ hg ci --amend -m 'back to default'
372 $ hg ci --amend -m 'back to default'
373 saved backup bundle to $TESTTMP/.hg/strip-backup/f8339a38efe1-c18453c9-amend.hg
373 saved backup bundle to $TESTTMP/.hg/strip-backup/f8339a38efe1-c18453c9-amend.hg
374 $ hg branches
374 $ hg branches
375 default 2:9c07515f2650
375 default 2:9c07515f2650
376
376
377 Close branch:
377 Close branch:
378
378
379 $ hg up -q 0
379 $ hg up -q 0
380 $ echo b >> b
380 $ echo b >> b
381 $ hg branch foo
381 $ hg branch foo
382 marked working directory as branch foo
382 marked working directory as branch foo
383 (branches are permanent and global, did you want a bookmark?)
383 (branches are permanent and global, did you want a bookmark?)
384 $ hg ci -Am 'fork'
384 $ hg ci -Am 'fork'
385 adding b
385 adding b
386 $ echo b >> b
386 $ echo b >> b
387 $ hg ci -mb
387 $ hg ci -mb
388 $ hg ci --amend --close-branch -m 'closing branch foo'
388 $ hg ci --amend --close-branch -m 'closing branch foo'
389 saved backup bundle to $TESTTMP/.hg/strip-backup/c962248fa264-54245dc7-amend.hg
389 saved backup bundle to $TESTTMP/.hg/strip-backup/c962248fa264-54245dc7-amend.hg
390
390
391 Same thing, different code path:
391 Same thing, different code path:
392
392
393 $ echo b >> b
393 $ echo b >> b
394 $ hg ci -m 'reopen branch'
394 $ hg ci -m 'reopen branch'
395 reopening closed branch head 4
395 reopening closed branch head 4
396 $ echo b >> b
396 $ echo b >> b
397 $ hg ci --amend --close-branch
397 $ hg ci --amend --close-branch
398 saved backup bundle to $TESTTMP/.hg/strip-backup/027371728205-b900d9fa-amend.hg
398 saved backup bundle to $TESTTMP/.hg/strip-backup/027371728205-b900d9fa-amend.hg
399 $ hg branches
399 $ hg branches
400 default 2:9c07515f2650
400 default 2:9c07515f2650
401
401
402 Refuse to amend during a merge:
402 Refuse to amend during a merge:
403
403
404 $ hg up -q default
404 $ hg up -q default
405 $ hg merge foo
405 $ hg merge foo
406 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
406 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
407 (branch merge, don't forget to commit)
407 (branch merge, don't forget to commit)
408 $ hg ci --amend
408 $ hg ci --amend
409 abort: cannot amend changesets while merging
409 abort: cannot amend changesets while merging
410 [20]
410 [20]
411 $ hg ci -m 'merge'
411 $ hg ci -m 'merge'
412
412
413 Refuse to amend if there is a merge conflict (issue5805):
413 Refuse to amend if there is a merge conflict (issue5805):
414
414
415 $ hg up -q foo
415 $ hg up -q foo
416 $ echo c > a
416 $ echo c > a
417 $ hg up default -t :fail
417 $ hg up default -t :fail
418 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
418 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
419 use 'hg resolve' to retry unresolved file merges
419 use 'hg resolve' to retry unresolved file merges
420 [1]
420 [1]
421 $ hg resolve -l
421 $ hg resolve -l
422 U a
422 U a
423
423
424 $ hg ci --amend
424 $ hg ci --amend
425 abort: unresolved merge conflicts (see 'hg help resolve')
425 abort: unresolved merge conflicts (see 'hg help resolve')
426 [20]
426 [20]
427
427
428 $ hg up -qC .
428 $ hg up -qC .
429
429
430 Follow copies/renames:
430 Follow copies/renames:
431
431
432 $ hg mv b c
432 $ hg mv b c
433 $ hg ci -m 'b -> c'
433 $ hg ci -m 'b -> c'
434 $ hg mv c d
434 $ hg mv c d
435 $ hg ci --amend -m 'b -> d'
435 $ hg ci --amend -m 'b -> d'
436 saved backup bundle to $TESTTMP/.hg/strip-backup/42f3f27a067d-f23cc9f7-amend.hg
436 saved backup bundle to $TESTTMP/.hg/strip-backup/42f3f27a067d-f23cc9f7-amend.hg
437 $ hg st --rev '.^' --copies d
437 $ hg st --rev '.^' --copies d
438 A d
438 A d
439 b
439 b
440 $ hg cp d e
440 $ hg cp d e
441 $ hg ci -m 'e = d'
441 $ hg ci -m 'e = d'
442 $ hg cp e f
442 $ hg cp e f
443 $ hg ci --amend -m 'f = d'
443 $ hg ci --amend -m 'f = d'
444 saved backup bundle to $TESTTMP/.hg/strip-backup/9198f73182d5-251d584a-amend.hg
444 saved backup bundle to $TESTTMP/.hg/strip-backup/9198f73182d5-251d584a-amend.hg
445 $ hg st --rev '.^' --copies f
445 $ hg st --rev '.^' --copies f
446 A f
446 A f
447 d
447 d
448
448
449 $ mv f f.orig
449 $ mv f f.orig
450 $ hg rm -A f
450 $ hg rm -A f
451 $ hg ci -m removef
451 $ hg ci -m removef
452 $ hg cp a f
452 $ hg cp a f
453 $ mv f.orig f
453 $ mv f.orig f
454 $ hg ci --amend -m replacef
454 $ hg ci --amend -m replacef
455 saved backup bundle to $TESTTMP/.hg/strip-backup/f0993ab6b482-eda301bf-amend.hg
455 saved backup bundle to $TESTTMP/.hg/strip-backup/f0993ab6b482-eda301bf-amend.hg
456 $ hg st --change . --copies
456 $ hg st --change . --copies
457 $ hg log -r . --template "{file_copies}\n"
457 $ hg log -r . --template "{file_copies}\n"
458
458
459
459
460 Move added file (issue3410):
460 Move added file (issue3410):
461
461
462 $ echo g >> g
462 $ echo g >> g
463 $ hg ci -Am g
463 $ hg ci -Am g
464 adding g
464 adding g
465 $ hg mv g h
465 $ hg mv g h
466 $ hg ci --amend
466 $ hg ci --amend
467 saved backup bundle to $TESTTMP/.hg/strip-backup/58585e3f095c-0f5ebcda-amend.hg
467 saved backup bundle to $TESTTMP/.hg/strip-backup/58585e3f095c-0f5ebcda-amend.hg
468 $ hg st --change . --copies h
468 $ hg st --change . --copies h
469 A h
469 A h
470 $ hg log -r . --template "{file_copies}\n"
470 $ hg log -r . --template "{file_copies}\n"
471
471
472
472
473 Can't rollback an amend:
473 Can't rollback an amend:
474
474
475 $ hg rollback
475 $ hg rollback
476 no rollback information available
476 no rollback information available
477 [1]
477 [1]
478
478
479 Preserve extra dict (issue3430):
479 Preserve extra dict (issue3430):
480
480
481 $ hg branch a
481 $ hg branch a
482 marked working directory as branch a
482 marked working directory as branch a
483 (branches are permanent and global, did you want a bookmark?)
483 (branches are permanent and global, did you want a bookmark?)
484 $ echo a >> a
484 $ echo a >> a
485 $ hg ci -ma
485 $ hg ci -ma
486 $ hg ci --amend -m "a'"
486 $ hg ci --amend -m "a'"
487 saved backup bundle to $TESTTMP/.hg/strip-backup/39a162f1d65e-9dfe13d8-amend.hg
487 saved backup bundle to $TESTTMP/.hg/strip-backup/39a162f1d65e-9dfe13d8-amend.hg
488 $ hg log -r . --template "{branch}\n"
488 $ hg log -r . --template "{branch}\n"
489 a
489 a
490 $ hg ci --amend -m "a''"
490 $ hg ci --amend -m "a''"
491 saved backup bundle to $TESTTMP/.hg/strip-backup/d5ca7b1ac72b-0b4c1a34-amend.hg
491 saved backup bundle to $TESTTMP/.hg/strip-backup/d5ca7b1ac72b-0b4c1a34-amend.hg
492 $ hg log -r . --template "{branch}\n"
492 $ hg log -r . --template "{branch}\n"
493 a
493 a
494
494
495 Also preserve other entries in the dict that are in the old commit,
495 Also preserve other entries in the dict that are in the old commit,
496 first graft something so there's an additional entry:
496 first graft something so there's an additional entry:
497
497
498 $ hg up 0 -q
498 $ hg up 0 -q
499 $ echo z > z
499 $ echo z > z
500 $ hg ci -Am 'fork'
500 $ hg ci -Am 'fork'
501 adding z
501 adding z
502 created new head
502 created new head
503 $ hg up 11
503 $ hg up 11
504 5 files updated, 0 files merged, 1 files removed, 0 files unresolved
504 5 files updated, 0 files merged, 1 files removed, 0 files unresolved
505 $ hg graft 12
505 $ hg graft 12
506 grafting 12:2647734878ef "fork" (tip)
506 grafting 12:2647734878ef "fork" (tip)
507 $ hg ci --amend -m 'graft amend'
507 $ hg ci --amend -m 'graft amend'
508 saved backup bundle to $TESTTMP/.hg/strip-backup/fe8c6f7957ca-25638666-amend.hg
508 saved backup bundle to $TESTTMP/.hg/strip-backup/fe8c6f7957ca-25638666-amend.hg
509 $ hg log -r . --debug | grep extra
509 $ hg log -r . --debug | grep extra
510 extra: amend_source=fe8c6f7957ca1665ed77496ed7a07657d469ac60
510 extra: amend_source=fe8c6f7957ca1665ed77496ed7a07657d469ac60
511 extra: branch=a
511 extra: branch=a
512 extra: source=2647734878ef0236dda712fae9c1651cf694ea8a
512 extra: source=2647734878ef0236dda712fae9c1651cf694ea8a
513
513
514 Preserve phase
514 Preserve phase
515
515
516 $ hg phase '.^::.'
516 $ hg phase '.^::.'
517 11: draft
517 11: draft
518 13: draft
518 13: draft
519 $ hg phase --secret --force .
519 $ hg phase --secret --force .
520 $ hg phase '.^::.'
520 $ hg phase '.^::.'
521 11: draft
521 11: draft
522 13: secret
522 13: secret
523 $ hg commit --amend -m 'amend for phase' -q
523 $ hg commit --amend -m 'amend for phase' -q
524 $ hg phase '.^::.'
524 $ hg phase '.^::.'
525 11: draft
525 11: draft
526 13: secret
526 13: secret
527
527
528 Test amend with obsolete
528 Test amend with obsolete
529 ---------------------------
529 ---------------------------
530
530
531 Enable obsolete
531 Enable obsolete
532
532
533 $ cat >> $HGRCPATH << EOF
533 $ cat >> $HGRCPATH << EOF
534 > [experimental]
534 > [experimental]
535 > evolution.createmarkers=True
535 > evolution.createmarkers=True
536 > evolution.allowunstable=True
536 > evolution.allowunstable=True
537 > EOF
537 > EOF
538
538
539 Amend with no files changes
539 Amend with no files changes
540
540
541 $ hg id -n
541 $ hg id -n
542 13
542 13
543 $ hg ci --amend -m 'babar'
543 $ hg ci --amend -m 'babar'
544 $ hg id -n
544 $ hg id -n
545 14
545 14
546 $ hg log -Gl 3 --style=compact
546 $ hg log -Gl 3 --style=compact
547 @ 14[tip]:11 682950e85999 1970-01-01 00:00 +0000 test
547 @ 14[tip]:11 682950e85999 1970-01-01 00:00 +0000 test
548 | babar
548 | babar
549 |
549 |
550 | o 12:0 2647734878ef 1970-01-01 00:00 +0000 test
550 | o 12:0 2647734878ef 1970-01-01 00:00 +0000 test
551 | | fork
551 | | fork
552 | ~
552 | ~
553 o 11 0ddb275cfad1 1970-01-01 00:00 +0000 test
553 o 11 0ddb275cfad1 1970-01-01 00:00 +0000 test
554 | a''
554 | a''
555 ~
555 ~
556 $ hg log -Gl 4 --hidden --style=compact
556 $ hg log -Gl 4 --hidden --style=compact
557 @ 14[tip]:11 682950e85999 1970-01-01 00:00 +0000 test
557 @ 14[tip]:11 682950e85999 1970-01-01 00:00 +0000 test
558 | babar
558 | babar
559 |
559 |
560 | x 13:11 5167600b0f7a 1970-01-01 00:00 +0000 test
560 | x 13:11 5167600b0f7a 1970-01-01 00:00 +0000 test
561 |/ amend for phase
561 |/ amend for phase
562 |
562 |
563 | o 12:0 2647734878ef 1970-01-01 00:00 +0000 test
563 | o 12:0 2647734878ef 1970-01-01 00:00 +0000 test
564 | | fork
564 | | fork
565 | ~
565 | ~
566 o 11 0ddb275cfad1 1970-01-01 00:00 +0000 test
566 o 11 0ddb275cfad1 1970-01-01 00:00 +0000 test
567 | a''
567 | a''
568 ~
568 ~
569
569
570 Amend with files changes
570 Amend with files changes
571
571
572 (note: the extra commit over 15 is a temporary junk I would be happy to get
572 (note: the extra commit over 15 is a temporary junk I would be happy to get
573 ride of)
573 ride of)
574
574
575 $ echo 'babar' >> a
575 $ echo 'babar' >> a
576 $ hg commit --amend
576 $ hg commit --amend
577 $ hg log -Gl 6 --hidden --style=compact
577 $ hg log -Gl 6 --hidden --style=compact
578 @ 15[tip]:11 a5b42b49b0d5 1970-01-01 00:00 +0000 test
578 @ 15[tip]:11 a5b42b49b0d5 1970-01-01 00:00 +0000 test
579 | babar
579 | babar
580 |
580 |
581 | x 14:11 682950e85999 1970-01-01 00:00 +0000 test
581 | x 14:11 682950e85999 1970-01-01 00:00 +0000 test
582 |/ babar
582 |/ babar
583 |
583 |
584 | x 13:11 5167600b0f7a 1970-01-01 00:00 +0000 test
584 | x 13:11 5167600b0f7a 1970-01-01 00:00 +0000 test
585 |/ amend for phase
585 |/ amend for phase
586 |
586 |
587 | o 12:0 2647734878ef 1970-01-01 00:00 +0000 test
587 | o 12:0 2647734878ef 1970-01-01 00:00 +0000 test
588 | | fork
588 | | fork
589 | ~
589 | ~
590 o 11 0ddb275cfad1 1970-01-01 00:00 +0000 test
590 o 11 0ddb275cfad1 1970-01-01 00:00 +0000 test
591 | a''
591 | a''
592 |
592 |
593 o 10 5fa75032e226 1970-01-01 00:00 +0000 test
593 o 10 5fa75032e226 1970-01-01 00:00 +0000 test
594 | g
594 | g
595 ~
595 ~
596
596
597
597
598 Test that amend does not make it easy to create obsolescence cycle
598 Test that amend does not make it easy to create obsolescence cycle
599 ---------------------------------------------------------------------
599 ---------------------------------------------------------------------
600
600
601 $ hg id -r 14 --hidden
601 $ hg id -r 14 --hidden
602 682950e85999 (a)
602 682950e85999 (a)
603 $ hg revert -ar 14 --hidden
603 $ hg revert -ar 14 --hidden
604 reverting a
604 reverting a
605 $ hg commit --amend
605 $ hg commit --amend
606 $ hg id
606 $ hg id
607 37973c7e0b61 (a) tip
607 37973c7e0b61 (a) tip
608
608
609 Test that rewriting leaving instability behind is allowed
609 Test that rewriting leaving instability behind is allowed
610 ---------------------------------------------------------------------
610 ---------------------------------------------------------------------
611
611
612 $ hg up '.^'
612 $ hg up '.^'
613 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
613 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
614 $ echo 'b' >> a
614 $ echo 'b' >> a
615 $ hg log --style compact -r 'children(.)'
615 $ hg log --style compact -r 'children(.)'
616 16[tip]:11 37973c7e0b61 1970-01-01 00:00 +0000 test
616 16[tip]:11 37973c7e0b61 1970-01-01 00:00 +0000 test
617 babar
617 babar
618
618
619 $ hg commit --amend
619 $ hg commit --amend
620 1 new orphan changesets
620 1 new orphan changesets
621 $ hg log -r 'orphan()'
621 $ hg log -r 'orphan()'
622 changeset: 16:37973c7e0b61
622 changeset: 16:37973c7e0b61
623 branch: a
623 branch: a
624 parent: 11:0ddb275cfad1
624 parent: 11:0ddb275cfad1
625 user: test
625 user: test
626 date: Thu Jan 01 00:00:00 1970 +0000
626 date: Thu Jan 01 00:00:00 1970 +0000
627 instability: orphan
627 instability: orphan
628 summary: babar
628 summary: babar
629
629
630
630
631 Amend a merge changeset (with renames and conflicts from the second parent):
631 Amend a merge changeset (with renames and conflicts from the second parent):
632
632
633 $ hg up -q default
633 $ hg up -q default
634 $ hg branch -q bar
634 $ hg branch -q bar
635 $ hg cp a aa
635 $ hg cp a aa
636 $ hg mv z zz
636 $ hg mv z zz
637 $ echo cc > cc
637 $ echo cc > cc
638 $ hg add cc
638 $ hg add cc
639 $ hg ci -m aazzcc
639 $ hg ci -m aazzcc
640 $ hg up -q default
640 $ hg up -q default
641 $ echo a >> a
641 $ echo a >> a
642 $ echo dd > cc
642 $ echo dd > cc
643 $ hg add cc
643 $ hg add cc
644 $ hg ci -m aa
644 $ hg ci -m aa
645 $ hg merge -q bar
645 $ hg merge -q bar
646 warning: conflicts while merging cc! (edit, then use 'hg resolve --mark')
646 warning: conflicts while merging cc! (edit, then use 'hg resolve --mark')
647 [1]
647 [1]
648 $ hg resolve -m cc
648 $ hg resolve -m cc
649 (no more unresolved files)
649 (no more unresolved files)
650 $ hg ci -m 'merge bar'
650 $ hg ci -m 'merge bar'
651 $ hg log --config diff.git=1 -pr .
651 $ hg log --config diff.git=1 -pr .
652 changeset: 20:5aba7f3726e6
652 changeset: 20:5aba7f3726e6
653 tag: tip
653 tag: tip
654 parent: 19:30d96aeaf27b
654 parent: 19:30d96aeaf27b
655 parent: 18:1aa437659d19
655 parent: 18:1aa437659d19
656 user: test
656 user: test
657 date: Thu Jan 01 00:00:00 1970 +0000
657 date: Thu Jan 01 00:00:00 1970 +0000
658 summary: merge bar
658 summary: merge bar
659
659
660 diff --git a/a b/aa
660 diff --git a/a b/aa
661 copy from a
661 copy from a
662 copy to aa
662 copy to aa
663 diff --git a/cc b/cc
663 diff --git a/cc b/cc
664 --- a/cc
664 --- a/cc
665 +++ b/cc
665 +++ b/cc
666 @@ -1,1 +1,5 @@
666 @@ -1,1 +1,5 @@
667 +<<<<<<< working copy: 30d96aeaf27b - test: aa
667 +<<<<<<< working copy: 30d96aeaf27b - test: aa
668 dd
668 dd
669 +=======
669 +=======
670 +cc
670 +cc
671 +>>>>>>> merge rev: 1aa437659d19 bar - test: aazzcc
671 +>>>>>>> merge rev: 1aa437659d19 bar - test: aazzcc
672 diff --git a/z b/zz
672 diff --git a/z b/zz
673 rename from z
673 rename from z
674 rename to zz
674 rename to zz
675
675
676 $ hg debugrename aa
676 $ hg debugrename aa
677 aa renamed from a:a80d06849b333b8a3d5c445f8ba3142010dcdc9e
677 aa renamed from a:a80d06849b333b8a3d5c445f8ba3142010dcdc9e
678 $ hg debugrename zz
678 $ hg debugrename zz
679 zz renamed from z:69a1b67522704ec122181c0890bd16e9d3e7516a
679 zz renamed from z:69a1b67522704ec122181c0890bd16e9d3e7516a
680 $ hg debugrename cc
680 $ hg debugrename cc
681 cc not renamed
681 cc not renamed
682 $ HGEDITOR="sh .hg/checkeditform.sh" hg ci --amend -m 'merge bar (amend message)' --edit
682 $ HGEDITOR="sh .hg/checkeditform.sh" hg ci --amend -m 'merge bar (amend message)' --edit
683 HGEDITFORM=commit.amend.merge
683 HGEDITFORM=commit.amend.merge
684 $ hg log --config diff.git=1 -pr .
684 $ hg log --config diff.git=1 -pr .
685 changeset: 21:4b0631ef043e
685 changeset: 21:4b0631ef043e
686 tag: tip
686 tag: tip
687 parent: 19:30d96aeaf27b
687 parent: 19:30d96aeaf27b
688 parent: 18:1aa437659d19
688 parent: 18:1aa437659d19
689 user: test
689 user: test
690 date: Thu Jan 01 00:00:00 1970 +0000
690 date: Thu Jan 01 00:00:00 1970 +0000
691 summary: merge bar (amend message)
691 summary: merge bar (amend message)
692
692
693 diff --git a/a b/aa
693 diff --git a/a b/aa
694 copy from a
694 copy from a
695 copy to aa
695 copy to aa
696 diff --git a/cc b/cc
696 diff --git a/cc b/cc
697 --- a/cc
697 --- a/cc
698 +++ b/cc
698 +++ b/cc
699 @@ -1,1 +1,5 @@
699 @@ -1,1 +1,5 @@
700 +<<<<<<< working copy: 30d96aeaf27b - test: aa
700 +<<<<<<< working copy: 30d96aeaf27b - test: aa
701 dd
701 dd
702 +=======
702 +=======
703 +cc
703 +cc
704 +>>>>>>> merge rev: 1aa437659d19 bar - test: aazzcc
704 +>>>>>>> merge rev: 1aa437659d19 bar - test: aazzcc
705 diff --git a/z b/zz
705 diff --git a/z b/zz
706 rename from z
706 rename from z
707 rename to zz
707 rename to zz
708
708
709 $ hg debugrename aa
709 $ hg debugrename aa
710 aa renamed from a:a80d06849b333b8a3d5c445f8ba3142010dcdc9e
710 aa renamed from a:a80d06849b333b8a3d5c445f8ba3142010dcdc9e
711 $ hg debugrename zz
711 $ hg debugrename zz
712 zz renamed from z:69a1b67522704ec122181c0890bd16e9d3e7516a
712 zz renamed from z:69a1b67522704ec122181c0890bd16e9d3e7516a
713 $ hg debugrename cc
713 $ hg debugrename cc
714 cc not renamed
714 cc not renamed
715 $ hg mv zz z
715 $ hg mv zz z
716 $ hg ci --amend -m 'merge bar (undo rename)'
716 $ hg ci --amend -m 'merge bar (undo rename)'
717 $ hg log --config diff.git=1 -pr .
717 $ hg log --config diff.git=1 -pr .
718 changeset: 22:06423be42d60
718 changeset: 22:06423be42d60
719 tag: tip
719 tag: tip
720 parent: 19:30d96aeaf27b
720 parent: 19:30d96aeaf27b
721 parent: 18:1aa437659d19
721 parent: 18:1aa437659d19
722 user: test
722 user: test
723 date: Thu Jan 01 00:00:00 1970 +0000
723 date: Thu Jan 01 00:00:00 1970 +0000
724 summary: merge bar (undo rename)
724 summary: merge bar (undo rename)
725
725
726 diff --git a/a b/aa
726 diff --git a/a b/aa
727 copy from a
727 copy from a
728 copy to aa
728 copy to aa
729 diff --git a/cc b/cc
729 diff --git a/cc b/cc
730 --- a/cc
730 --- a/cc
731 +++ b/cc
731 +++ b/cc
732 @@ -1,1 +1,5 @@
732 @@ -1,1 +1,5 @@
733 +<<<<<<< working copy: 30d96aeaf27b - test: aa
733 +<<<<<<< working copy: 30d96aeaf27b - test: aa
734 dd
734 dd
735 +=======
735 +=======
736 +cc
736 +cc
737 +>>>>>>> merge rev: 1aa437659d19 bar - test: aazzcc
737 +>>>>>>> merge rev: 1aa437659d19 bar - test: aazzcc
738
738
739 $ hg debugrename z
739 $ hg debugrename z
740 z not renamed
740 z not renamed
741
741
742 Amend a merge changeset (with renames during the merge):
742 Amend a merge changeset (with renames during the merge):
743
743
744 $ hg up -q bar
744 $ hg up -q bar
745 $ echo x > x
745 $ echo x > x
746 $ hg add x
746 $ hg add x
747 $ hg ci -m x
747 $ hg ci -m x
748 $ hg up -q default
748 $ hg up -q default
749 $ hg merge -q bar
749 $ hg merge -q bar
750 $ hg mv aa aaa
750 $ hg mv aa aaa
751 $ echo aa >> aaa
751 $ echo aa >> aaa
752 $ hg ci -m 'merge bar again'
752 $ hg ci -m 'merge bar again'
753 $ hg log --config diff.git=1 -pr .
753 $ hg log --config diff.git=1 -pr .
754 changeset: 24:a89974a20457
754 changeset: 24:a89974a20457
755 tag: tip
755 tag: tip
756 parent: 22:06423be42d60
756 parent: 22:06423be42d60
757 parent: 23:4c94d5bc65f5
757 parent: 23:4c94d5bc65f5
758 user: test
758 user: test
759 date: Thu Jan 01 00:00:00 1970 +0000
759 date: Thu Jan 01 00:00:00 1970 +0000
760 summary: merge bar again
760 summary: merge bar again
761
761
762 diff --git a/aa b/aa
762 diff --git a/aa b/aa
763 deleted file mode 100644
763 deleted file mode 100644
764 --- a/aa
764 --- a/aa
765 +++ /dev/null
765 +++ /dev/null
766 @@ -1,2 +0,0 @@
766 @@ -1,2 +0,0 @@
767 -a
767 -a
768 -a
768 -a
769 diff --git a/aaa b/aaa
769 diff --git a/aaa b/aaa
770 new file mode 100644
770 new file mode 100644
771 --- /dev/null
771 --- /dev/null
772 +++ b/aaa
772 +++ b/aaa
773 @@ -0,0 +1,3 @@
773 @@ -0,0 +1,3 @@
774 +a
774 +a
775 +a
775 +a
776 +aa
776 +aa
777 diff --git a/x b/x
777 diff --git a/x b/x
778 new file mode 100644
778 new file mode 100644
779 --- /dev/null
779 --- /dev/null
780 +++ b/x
780 +++ b/x
781 @@ -0,0 +1,1 @@
781 @@ -0,0 +1,1 @@
782 +x
782 +x
783
783
784 $ hg debugrename aaa
784 $ hg debugrename aaa
785 aaa renamed from aa:37d9b5d994eab34eda9c16b195ace52c7b129980
785 aaa renamed from aa:37d9b5d994eab34eda9c16b195ace52c7b129980
786
786
787 Update to p1 with 'aaa' modified. 'aaa' was renamed from 'aa' in p2. 'aa' exists
787 Update to p1 with 'aaa' modified. 'aaa' was renamed from 'aa' in p2. 'aa' exists
788 in p1 too, but it was recorded as copied from p2.
788 in p1 too, but it was recorded as copied from p2.
789 $ echo modified >> aaa
789 $ echo modified >> aaa
790 $ hg co -m '.^' -t :merge3
790 $ hg co -m '.^' -t :merge3
791 file 'aaa' was deleted in other [destination] but was modified in local [working copy].
791 file 'aaa' was deleted in other [destination] but was modified in local [working copy].
792 You can use (c)hanged version, (d)elete, or leave (u)nresolved.
792 You can use (c)hanged version, (d)elete, or leave (u)nresolved.
793 What do you want to do? u
793 What do you want to do? u
794 1 files updated, 0 files merged, 1 files removed, 1 files unresolved
794 1 files updated, 0 files merged, 1 files removed, 1 files unresolved
795 use 'hg resolve' to retry unresolved file merges
795 use 'hg resolve' to retry unresolved file merges
796 [1]
796 [1]
797 $ hg co -C tip
797 $ hg co -C tip
798 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
798 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
799
799
800 $ hg mv aaa aa
800 $ hg mv aaa aa
801 $ hg ci --amend -m 'merge bar again (undo rename)'
801 $ hg ci --amend -m 'merge bar again (undo rename)'
802 $ hg log --config diff.git=1 -pr .
802 $ hg log --config diff.git=1 -pr .
803 changeset: 25:282080768800
803 changeset: 25:282080768800
804 tag: tip
804 tag: tip
805 parent: 22:06423be42d60
805 parent: 22:06423be42d60
806 parent: 23:4c94d5bc65f5
806 parent: 23:4c94d5bc65f5
807 user: test
807 user: test
808 date: Thu Jan 01 00:00:00 1970 +0000
808 date: Thu Jan 01 00:00:00 1970 +0000
809 summary: merge bar again (undo rename)
809 summary: merge bar again (undo rename)
810
810
811 diff --git a/aa b/aa
811 diff --git a/aa b/aa
812 --- a/aa
812 --- a/aa
813 +++ b/aa
813 +++ b/aa
814 @@ -1,2 +1,3 @@
814 @@ -1,2 +1,3 @@
815 a
815 a
816 a
816 a
817 +aa
817 +aa
818 diff --git a/x b/x
818 diff --git a/x b/x
819 new file mode 100644
819 new file mode 100644
820 --- /dev/null
820 --- /dev/null
821 +++ b/x
821 +++ b/x
822 @@ -0,0 +1,1 @@
822 @@ -0,0 +1,1 @@
823 +x
823 +x
824
824
825 $ hg debugrename aa
825 $ hg debugrename aa
826 aa not renamed
826 aa not renamed
827 $ hg debugrename -r '.^' aa
827 $ hg debugrename -r '.^' aa
828 aa renamed from a:a80d06849b333b8a3d5c445f8ba3142010dcdc9e
828 aa renamed from a:a80d06849b333b8a3d5c445f8ba3142010dcdc9e
829
829
830 Amend a merge changeset (with manifest-level conflicts):
830 Amend a merge changeset (with manifest-level conflicts):
831
831
832 $ hg up -q bar
832 $ hg up -q bar
833 $ hg rm aa
833 $ hg rm aa
834 $ hg ci -m 'rm aa'
834 $ hg ci -m 'rm aa'
835 $ hg up -q default
835 $ hg up -q default
836 $ echo aa >> aa
836 $ echo aa >> aa
837 $ hg ci -m aa
837 $ hg ci -m aa
838 $ hg merge -q bar --config ui.interactive=True << EOF
838 $ hg merge -q bar --config ui.interactive=True << EOF
839 > c
839 > c
840 > EOF
840 > EOF
841 file 'aa' was deleted in other [merge rev] but was modified in local [working copy].
841 file 'aa' was deleted in other [merge rev] but was modified in local [working copy].
842 You can use (c)hanged version, (d)elete, or leave (u)nresolved.
842 You can use (c)hanged version, (d)elete, or leave (u)nresolved.
843 What do you want to do? c
843 What do you want to do? c
844 $ hg ci -m 'merge bar (with conflicts)'
844 $ hg ci -m 'merge bar (with conflicts)'
845 $ hg log --config diff.git=1 -pr .
845 $ hg log --config diff.git=1 -pr .
846 changeset: 28:ed15db12298d
846 changeset: 28:ed15db12298d
847 tag: tip
847 tag: tip
848 parent: 27:eb5adec0b43b
848 parent: 27:eb5adec0b43b
849 parent: 26:67db8847a540
849 parent: 26:67db8847a540
850 user: test
850 user: test
851 date: Thu Jan 01 00:00:00 1970 +0000
851 date: Thu Jan 01 00:00:00 1970 +0000
852 summary: merge bar (with conflicts)
852 summary: merge bar (with conflicts)
853
853
854
854
855 $ hg rm aa
855 $ hg rm aa
856 $ hg ci --amend -m 'merge bar (with conflicts, amended)'
856 $ hg ci --amend -m 'merge bar (with conflicts, amended)'
857 $ hg log --config diff.git=1 -pr .
857 $ hg log --config diff.git=1 -pr .
858 changeset: 29:0eeafd043f63
858 changeset: 29:0eeafd043f63
859 tag: tip
859 tag: tip
860 parent: 27:eb5adec0b43b
860 parent: 27:eb5adec0b43b
861 parent: 26:67db8847a540
861 parent: 26:67db8847a540
862 user: test
862 user: test
863 date: Thu Jan 01 00:00:00 1970 +0000
863 date: Thu Jan 01 00:00:00 1970 +0000
864 summary: merge bar (with conflicts, amended)
864 summary: merge bar (with conflicts, amended)
865
865
866 diff --git a/aa b/aa
866 diff --git a/aa b/aa
867 deleted file mode 100644
867 deleted file mode 100644
868 --- a/aa
868 --- a/aa
869 +++ /dev/null
869 +++ /dev/null
870 @@ -1,4 +0,0 @@
870 @@ -1,4 +0,0 @@
871 -a
871 -a
872 -a
872 -a
873 -aa
873 -aa
874 -aa
874 -aa
875
875
876 Issue 3445: amending with --close-branch a commit that created a new head should fail
876 Issue 3445: amending with --close-branch a commit that created a new head should fail
877 This shouldn't be possible:
877 This shouldn't be possible:
878
878
879 $ hg up -q default
879 $ hg up -q default
880 $ hg branch closewithamend
880 $ hg branch closewithamend
881 marked working directory as branch closewithamend
881 marked working directory as branch closewithamend
882 $ echo foo > foo
882 $ echo foo > foo
883 $ hg add foo
883 $ hg add foo
884 $ hg ci -m..
884 $ hg ci -m..
885 $ hg ci --amend --close-branch -m 'closing'
885 $ hg ci --amend --close-branch -m 'closing'
886 abort: can only close branch heads
886 abort: can only close branch heads
887 [10]
887 [10]
888
888
889 This silliness fails:
889 This silliness fails:
890
890
891 $ hg branch silliness
891 $ hg branch silliness
892 marked working directory as branch silliness
892 marked working directory as branch silliness
893 $ echo b >> b
893 $ echo b >> b
894 $ hg ci --close-branch -m'open and close'
894 $ hg ci --close-branch -m'open and close'
895 abort: branch "silliness" has no heads to close
895 abort: branch "silliness" has no heads to close
896 [10]
896 [10]
897
897
898 Test that amend with --secret creates new secret changeset forcibly
898 Test that amend with --secret creates new secret changeset forcibly
899 ---------------------------------------------------------------------
899 ---------------------------------------------------------------------
900
900
901 $ hg phase '.^::.'
901 $ hg phase '.^::.'
902 29: draft
902 29: draft
903 30: draft
903 30: draft
904 $ hg commit --amend --secret -m 'amend as secret' -q
904 $ hg commit --amend --secret -m 'amend as secret' -q
905 $ hg phase '.^::.'
905 $ hg phase '.^::.'
906 29: draft
906 29: draft
907 31: secret
907 31: secret
908
908
909 Test that amend with --edit invokes editor forcibly
909 Test that amend with --edit invokes editor forcibly
910 ---------------------------------------------------
910 ---------------------------------------------------
911
911
912 $ hg parents --template "{desc}\n"
912 $ hg parents --template "{desc}\n"
913 amend as secret
913 amend as secret
914 $ HGEDITOR=cat hg commit --amend -m "editor should be suppressed"
914 $ HGEDITOR=cat hg commit --amend -m "editor should be suppressed"
915 $ hg parents --template "{desc}\n"
915 $ hg parents --template "{desc}\n"
916 editor should be suppressed
916 editor should be suppressed
917
917
918 $ hg status --rev '.^1::.'
918 $ hg status --rev '.^1::.'
919 A foo
919 A foo
920 $ HGEDITOR=cat hg commit --amend -m "editor should be invoked" --edit
920 $ HGEDITOR=cat hg commit --amend -m "editor should be invoked" --edit
921 editor should be invoked
921 editor should be invoked
922
922
923
923
924 HG: Enter commit message. Lines beginning with 'HG:' are removed.
924 HG: Enter commit message. Lines beginning with 'HG:' are removed.
925 HG: Leave message empty to abort commit.
925 HG: Leave message empty to abort commit.
926 HG: --
926 HG: --
927 HG: user: test
927 HG: user: test
928 HG: branch 'silliness'
928 HG: branch 'silliness'
929 HG: added foo
929 HG: added foo
930 $ hg parents --template "{desc}\n"
930 $ hg parents --template "{desc}\n"
931 editor should be invoked
931 editor should be invoked
932
932
933 Test that amend with --no-edit avoids the editor
933 Test that amend with --no-edit avoids the editor
934 ------------------------------------------------
934 ------------------------------------------------
935
935
936 $ hg commit --amend -m "before anything happens"
936 $ hg commit --amend -m "before anything happens"
937 $ hg parents --template "{desc}\n"
937 $ hg parents --template "{desc}\n"
938 before anything happens
938 before anything happens
939 $ HGEDITOR=cat hg commit --amend --no-edit -m "editor should be suppressed"
939 $ HGEDITOR=cat hg commit --amend --no-edit -m "editor should be suppressed"
940 $ hg parents --template "{desc}\n"
940 $ hg parents --template "{desc}\n"
941 editor should be suppressed
941 editor should be suppressed
942
942
943 (We need a file change here since we won't have a message change)
943 (We need a file change here since we won't have a message change)
944 $ cp foo foo.orig
944 $ cp foo foo.orig
945 $ echo hi >> foo
945 $ echo hi >> foo
946 $ HGEDITOR=cat hg commit --amend --no-edit
946 $ HGEDITOR=cat hg commit --amend --no-edit
947 $ hg parents --template "{desc}\n"
947 $ hg parents --template "{desc}\n"
948 editor should be suppressed
948 editor should be suppressed
949 $ hg status -mar
949 $ hg status -mar
950 (Let's undo adding that "hi" so later tests don't need to be adjusted)
950 (Let's undo adding that "hi" so later tests don't need to be adjusted)
951 $ mv foo.orig foo
951 $ mv foo.orig foo
952 $ hg commit --amend --no-edit
952 $ hg commit --amend --no-edit
953
953
954 Test that "diff()" in committemplate works correctly for amending
954 Test that "diff()" in committemplate works correctly for amending
955 -----------------------------------------------------------------
955 -----------------------------------------------------------------
956
956
957 $ cat >> .hg/hgrc <<EOF
957 $ cat >> .hg/hgrc <<EOF
958 > [committemplate]
958 > [committemplate]
959 > changeset.commit.amend = {desc}\n
959 > changeset.commit.amend = {desc}\n
960 > HG: {revset('parents()') % 'parent: {desc|firstline}\n'}
960 > HG: {revset('parents()') % 'parent: {desc|firstline}\n'}
961 > HG: M: {file_mods}
961 > HG: M: {file_mods}
962 > HG: A: {file_adds}
962 > HG: A: {file_adds}
963 > HG: R: {file_dels}
963 > HG: R: {file_dels}
964 > {splitlines(diff()) % 'HG: {line}\n'}
964 > {splitlines(diff()) % 'HG: {line}\n'}
965 > EOF
965 > EOF
966
966
967 $ hg parents --template "M: {file_mods}\nA: {file_adds}\nR: {file_dels}\n"
967 $ hg parents --template "M: {file_mods}\nA: {file_adds}\nR: {file_dels}\n"
968 M:
968 M:
969 A: foo
969 A: foo
970 R:
970 R:
971 $ hg status -amr
971 $ hg status -amr
972 $ HGEDITOR=cat hg commit --amend -e -m "expecting diff of foo"
972 $ HGEDITOR=cat hg commit --amend -e -m "expecting diff of foo"
973 expecting diff of foo
973 expecting diff of foo
974
974
975 HG: parent: editor should be suppressed
975 HG: parent: editor should be suppressed
976
976
977 HG: M:
977 HG: M:
978 HG: A: foo
978 HG: A: foo
979 HG: R:
979 HG: R:
980 HG: diff -r 0eeafd043f63 foo
980 HG: diff -r 0eeafd043f63 foo
981 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
981 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
982 HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
982 HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
983 HG: @@ -0,0 +1,1 @@
983 HG: @@ -0,0 +1,1 @@
984 HG: +foo
984 HG: +foo
985
985
986 $ echo y > y
986 $ echo y > y
987 $ hg add y
987 $ hg add y
988 $ HGEDITOR=cat hg commit --amend -e -m "expecting diff of foo and y"
988 $ HGEDITOR=cat hg commit --amend -e -m "expecting diff of foo and y"
989 expecting diff of foo and y
989 expecting diff of foo and y
990
990
991 HG: parent: expecting diff of foo
991 HG: parent: expecting diff of foo
992
992
993 HG: M:
993 HG: M:
994 HG: A: foo y
994 HG: A: foo y
995 HG: R:
995 HG: R:
996 HG: diff -r 0eeafd043f63 foo
996 HG: diff -r 0eeafd043f63 foo
997 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
997 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
998 HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
998 HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
999 HG: @@ -0,0 +1,1 @@
999 HG: @@ -0,0 +1,1 @@
1000 HG: +foo
1000 HG: +foo
1001 HG: diff -r 0eeafd043f63 y
1001 HG: diff -r 0eeafd043f63 y
1002 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1002 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1003 HG: +++ b/y Thu Jan 01 00:00:00 1970 +0000
1003 HG: +++ b/y Thu Jan 01 00:00:00 1970 +0000
1004 HG: @@ -0,0 +1,1 @@
1004 HG: @@ -0,0 +1,1 @@
1005 HG: +y
1005 HG: +y
1006
1006
1007 $ hg rm a
1007 $ hg rm a
1008 $ HGEDITOR=cat hg commit --amend -e -m "expecting diff of a, foo and y"
1008 $ HGEDITOR=cat hg commit --amend -e -m "expecting diff of a, foo and y"
1009 expecting diff of a, foo and y
1009 expecting diff of a, foo and y
1010
1010
1011 HG: parent: expecting diff of foo and y
1011 HG: parent: expecting diff of foo and y
1012
1012
1013 HG: M:
1013 HG: M:
1014 HG: A: foo y
1014 HG: A: foo y
1015 HG: R: a
1015 HG: R: a
1016 HG: diff -r 0eeafd043f63 a
1016 HG: diff -r 0eeafd043f63 a
1017 HG: --- a/a Thu Jan 01 00:00:00 1970 +0000
1017 HG: --- a/a Thu Jan 01 00:00:00 1970 +0000
1018 HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1018 HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1019 HG: @@ -1,2 +0,0 @@
1019 HG: @@ -1,2 +0,0 @@
1020 HG: -a
1020 HG: -a
1021 HG: -a
1021 HG: -a
1022 HG: diff -r 0eeafd043f63 foo
1022 HG: diff -r 0eeafd043f63 foo
1023 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1023 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1024 HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
1024 HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
1025 HG: @@ -0,0 +1,1 @@
1025 HG: @@ -0,0 +1,1 @@
1026 HG: +foo
1026 HG: +foo
1027 HG: diff -r 0eeafd043f63 y
1027 HG: diff -r 0eeafd043f63 y
1028 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1028 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1029 HG: +++ b/y Thu Jan 01 00:00:00 1970 +0000
1029 HG: +++ b/y Thu Jan 01 00:00:00 1970 +0000
1030 HG: @@ -0,0 +1,1 @@
1030 HG: @@ -0,0 +1,1 @@
1031 HG: +y
1031 HG: +y
1032
1032
1033 $ hg rm x
1033 $ hg rm x
1034 $ HGEDITOR=cat hg commit --amend -e -m "expecting diff of a, foo, x and y"
1034 $ HGEDITOR=cat hg commit --amend -e -m "expecting diff of a, foo, x and y"
1035 expecting diff of a, foo, x and y
1035 expecting diff of a, foo, x and y
1036
1036
1037 HG: parent: expecting diff of a, foo and y
1037 HG: parent: expecting diff of a, foo and y
1038
1038
1039 HG: M:
1039 HG: M:
1040 HG: A: foo y
1040 HG: A: foo y
1041 HG: R: a x
1041 HG: R: a x
1042 HG: diff -r 0eeafd043f63 a
1042 HG: diff -r 0eeafd043f63 a
1043 HG: --- a/a Thu Jan 01 00:00:00 1970 +0000
1043 HG: --- a/a Thu Jan 01 00:00:00 1970 +0000
1044 HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1044 HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1045 HG: @@ -1,2 +0,0 @@
1045 HG: @@ -1,2 +0,0 @@
1046 HG: -a
1046 HG: -a
1047 HG: -a
1047 HG: -a
1048 HG: diff -r 0eeafd043f63 foo
1048 HG: diff -r 0eeafd043f63 foo
1049 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1049 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1050 HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
1050 HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
1051 HG: @@ -0,0 +1,1 @@
1051 HG: @@ -0,0 +1,1 @@
1052 HG: +foo
1052 HG: +foo
1053 HG: diff -r 0eeafd043f63 x
1053 HG: diff -r 0eeafd043f63 x
1054 HG: --- a/x Thu Jan 01 00:00:00 1970 +0000
1054 HG: --- a/x Thu Jan 01 00:00:00 1970 +0000
1055 HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1055 HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1056 HG: @@ -1,1 +0,0 @@
1056 HG: @@ -1,1 +0,0 @@
1057 HG: -x
1057 HG: -x
1058 HG: diff -r 0eeafd043f63 y
1058 HG: diff -r 0eeafd043f63 y
1059 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1059 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1060 HG: +++ b/y Thu Jan 01 00:00:00 1970 +0000
1060 HG: +++ b/y Thu Jan 01 00:00:00 1970 +0000
1061 HG: @@ -0,0 +1,1 @@
1061 HG: @@ -0,0 +1,1 @@
1062 HG: +y
1062 HG: +y
1063
1063
1064 $ echo cccc >> cc
1064 $ echo cccc >> cc
1065 $ hg status -amr
1065 $ hg status -amr
1066 M cc
1066 M cc
1067 $ HGEDITOR=cat hg commit --amend -e -m "cc should be excluded" -X cc
1067 $ HGEDITOR=cat hg commit --amend -e -m "cc should be excluded" -X cc
1068 cc should be excluded
1068 cc should be excluded
1069
1069
1070 HG: parent: expecting diff of a, foo, x and y
1070 HG: parent: expecting diff of a, foo, x and y
1071
1071
1072 HG: M:
1072 HG: M:
1073 HG: A: foo y
1073 HG: A: foo y
1074 HG: R: a x
1074 HG: R: a x
1075 HG: diff -r 0eeafd043f63 a
1075 HG: diff -r 0eeafd043f63 a
1076 HG: --- a/a Thu Jan 01 00:00:00 1970 +0000
1076 HG: --- a/a Thu Jan 01 00:00:00 1970 +0000
1077 HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1077 HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1078 HG: @@ -1,2 +0,0 @@
1078 HG: @@ -1,2 +0,0 @@
1079 HG: -a
1079 HG: -a
1080 HG: -a
1080 HG: -a
1081 HG: diff -r 0eeafd043f63 foo
1081 HG: diff -r 0eeafd043f63 foo
1082 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1082 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1083 HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
1083 HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
1084 HG: @@ -0,0 +1,1 @@
1084 HG: @@ -0,0 +1,1 @@
1085 HG: +foo
1085 HG: +foo
1086 HG: diff -r 0eeafd043f63 x
1086 HG: diff -r 0eeafd043f63 x
1087 HG: --- a/x Thu Jan 01 00:00:00 1970 +0000
1087 HG: --- a/x Thu Jan 01 00:00:00 1970 +0000
1088 HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1088 HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1089 HG: @@ -1,1 +0,0 @@
1089 HG: @@ -1,1 +0,0 @@
1090 HG: -x
1090 HG: -x
1091 HG: diff -r 0eeafd043f63 y
1091 HG: diff -r 0eeafd043f63 y
1092 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1092 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1093 HG: +++ b/y Thu Jan 01 00:00:00 1970 +0000
1093 HG: +++ b/y Thu Jan 01 00:00:00 1970 +0000
1094 HG: @@ -0,0 +1,1 @@
1094 HG: @@ -0,0 +1,1 @@
1095 HG: +y
1095 HG: +y
1096
1096
1097 Check for issue4405
1097 Check for issue4405
1098 -------------------
1098 -------------------
1099
1099
1100 Setup the repo with a file that gets moved in a second commit.
1100 Setup the repo with a file that gets moved in a second commit.
1101 $ hg init repo
1101 $ hg init repo
1102 $ cd repo
1102 $ cd repo
1103 $ touch a0
1103 $ touch a0
1104 $ hg add a0
1104 $ hg add a0
1105 $ hg commit -m a0
1105 $ hg commit -m a0
1106 $ hg mv a0 a1
1106 $ hg mv a0 a1
1107 $ hg commit -m a1
1107 $ hg commit -m a1
1108 $ hg up -q 0
1108 $ hg up -q 0
1109 $ hg log -G --template '{rev} {desc}'
1109 $ hg log -G --template '{rev} {desc}'
1110 o 1 a1
1110 o 1 a1
1111 |
1111 |
1112 @ 0 a0
1112 @ 0 a0
1113
1113
1114
1114
1115 Now we branch the repro, but re-use the file contents, so we have a divergence
1115 Now we branch the repro, but re-use the file contents, so we have a divergence
1116 in the file revlog topology and the changelog topology.
1116 in the file revlog topology and the changelog topology.
1117 $ hg revert --rev 1 --all
1117 $ hg revert --rev 1 --all
1118 removing a0
1118 removing a0
1119 adding a1
1119 adding a1
1120 $ hg ci -qm 'a1-amend'
1120 $ hg ci -qm 'a1-amend'
1121 $ hg log -G --template '{rev} {desc}'
1121 $ hg log -G --template '{rev} {desc}'
1122 @ 2 a1-amend
1122 @ 2 a1-amend
1123 |
1123 |
1124 | o 1 a1
1124 | o 1 a1
1125 |/
1125 |/
1126 o 0 a0
1126 o 0 a0
1127
1127
1128
1128
1129 The way mercurial does amends is by folding the working copy and old commit
1129 The way mercurial does amends is by folding the working copy and old commit
1130 together into another commit (rev 3). During this process, _findlimit is called
1130 together into another commit (rev 3). During this process, _findlimit is called
1131 to check how far back to look for the transitive closure of file copy
1131 to check how far back to look for the transitive closure of file copy
1132 information, but due to the divergence of the filelog and changelog graph
1132 information, but due to the divergence of the filelog and changelog graph
1133 topologies, before _findlimit was fixed, it returned a rev which was not far
1133 topologies, before _findlimit was fixed, it returned a rev which was not far
1134 enough back in this case.
1134 enough back in this case.
1135 $ hg mv a1 a2
1135 $ hg mv a1 a2
1136 $ hg status --copies --rev 0
1136 $ hg status --copies --rev 0
1137 A a2
1137 A a2
1138 a0
1138 a0
1139 R a0
1139 R a0
1140 $ hg ci --amend -q
1140 $ hg ci --amend -q
1141 $ hg log -G --template '{rev} {desc}'
1141 $ hg log -G --template '{rev} {desc}'
1142 @ 3 a1-amend
1142 @ 3 a1-amend
1143 |
1143 |
1144 | o 1 a1
1144 | o 1 a1
1145 |/
1145 |/
1146 o 0 a0
1146 o 0 a0
1147
1147
1148
1148
1149 Before the fix, the copy information was lost.
1149 Before the fix, the copy information was lost.
1150 $ hg status --copies --rev 0
1150 $ hg status --copies --rev 0
1151 A a2
1151 A a2
1152 a0
1152 a0
1153 R a0
1153 R a0
1154 $ cd ..
1154 $ cd ..
1155
1155
1156 Check that amend properly preserve rename from directory rename (issue-4516)
1156 Check that amend properly preserve rename from directory rename (issue-4516)
1157
1157
1158 If a parent of the merge renames a full directory, any files added to the old
1158 If a parent of the merge renames a full directory, any files added to the old
1159 directory in the other parent will be renamed to the new directory. For some
1159 directory in the other parent will be renamed to the new directory. For some
1160 reason, the rename metadata was when amending such merge. This test ensure we
1160 reason, the rename metadata was when amending such merge. This test ensure we
1161 do not regress. We have a dedicated repo because it needs a setup with renamed
1161 do not regress. We have a dedicated repo because it needs a setup with renamed
1162 directory)
1162 directory)
1163
1163
1164 $ hg init issue4516
1164 $ hg init issue4516
1165 $ cd issue4516
1165 $ cd issue4516
1166 $ mkdir olddirname
1166 $ mkdir olddirname
1167 $ echo line1 > olddirname/commonfile.py
1167 $ echo line1 > olddirname/commonfile.py
1168 $ hg add olddirname/commonfile.py
1168 $ hg add olddirname/commonfile.py
1169 $ hg ci -m first
1169 $ hg ci -m first
1170
1170
1171 $ hg branch newdirname
1171 $ hg branch newdirname
1172 marked working directory as branch newdirname
1172 marked working directory as branch newdirname
1173 (branches are permanent and global, did you want a bookmark?)
1173 (branches are permanent and global, did you want a bookmark?)
1174 $ hg mv olddirname newdirname
1174 $ hg mv olddirname newdirname
1175 moving olddirname/commonfile.py to newdirname/commonfile.py
1175 moving olddirname/commonfile.py to newdirname/commonfile.py
1176 $ hg ci -m rename
1176 $ hg ci -m rename
1177
1177
1178 $ hg update default
1178 $ hg update default
1179 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1179 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1180 $ echo line1 > olddirname/newfile.py
1180 $ echo line1 > olddirname/newfile.py
1181 $ hg add olddirname/newfile.py
1181 $ hg add olddirname/newfile.py
1182 $ hg ci -m log
1182 $ hg ci -m log
1183
1183
1184 $ hg up newdirname
1184 $ hg up newdirname
1185 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
1185 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
1186 $ # create newdirname/newfile.py
1186 $ # create newdirname/newfile.py
1187 $ hg merge default
1187 $ hg merge default
1188 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1188 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1189 (branch merge, don't forget to commit)
1189 (branch merge, don't forget to commit)
1190 $ hg ci -m add
1190 $ hg ci -m add
1191 $
1191 $
1192 $ hg debugrename newdirname/newfile.py
1192 $ hg debugrename newdirname/newfile.py
1193 newdirname/newfile.py renamed from olddirname/newfile.py:690b295714aed510803d3020da9c70fca8336def
1193 newdirname/newfile.py renamed from olddirname/newfile.py:690b295714aed510803d3020da9c70fca8336def
1194 $ hg status -C --change .
1194 $ hg status -C --change .
1195 A newdirname/newfile.py
1195 A newdirname/newfile.py
1196 $ hg status -C --rev 1
1196 $ hg status -C --rev 1
1197 A newdirname/newfile.py
1197 A newdirname/newfile.py
1198 $ hg status -C --rev 2
1198 $ hg status -C --rev 2
1199 A newdirname/commonfile.py
1199 A newdirname/commonfile.py
1200 olddirname/commonfile.py
1200 olddirname/commonfile.py
1201 A newdirname/newfile.py
1201 A newdirname/newfile.py
1202 olddirname/newfile.py
1202 olddirname/newfile.py
1203 R olddirname/commonfile.py
1203 R olddirname/commonfile.py
1204 R olddirname/newfile.py
1204 R olddirname/newfile.py
1205 $ hg debugindex newdirname/newfile.py
1205 $ hg debugindex newdirname/newfile.py
1206 rev linkrev nodeid p1 p2
1206 rev linkrev nodeid p1-nodeid p2-nodeid
1207 0 3 34a4d536c0c0 000000000000 000000000000
1207 0 3 34a4d536c0c0 000000000000 000000000000
1208
1208
1209 $ echo a >> newdirname/commonfile.py
1209 $ echo a >> newdirname/commonfile.py
1210 $ hg ci --amend -m bug
1210 $ hg ci --amend -m bug
1211 $ hg debugrename newdirname/newfile.py
1211 $ hg debugrename newdirname/newfile.py
1212 newdirname/newfile.py renamed from olddirname/newfile.py:690b295714aed510803d3020da9c70fca8336def
1212 newdirname/newfile.py renamed from olddirname/newfile.py:690b295714aed510803d3020da9c70fca8336def
1213 $ hg debugindex newdirname/newfile.py
1213 $ hg debugindex newdirname/newfile.py
1214 rev linkrev nodeid p1 p2
1214 rev linkrev nodeid p1-nodeid p2-nodeid
1215 0 3 34a4d536c0c0 000000000000 000000000000
1215 0 3 34a4d536c0c0 000000000000 000000000000
1216
1216
1217 #if execbit
1217 #if execbit
1218
1218
1219 Test if amend preserves executable bit changes
1219 Test if amend preserves executable bit changes
1220 $ chmod +x newdirname/commonfile.py
1220 $ chmod +x newdirname/commonfile.py
1221 $ hg ci -m chmod
1221 $ hg ci -m chmod
1222 $ hg ci --amend -m "chmod amended"
1222 $ hg ci --amend -m "chmod amended"
1223 $ hg ci --amend -m "chmod amended second time"
1223 $ hg ci --amend -m "chmod amended second time"
1224 $ hg log -p --git -r .
1224 $ hg log -p --git -r .
1225 changeset: 7:b1326f52dddf
1225 changeset: 7:b1326f52dddf
1226 branch: newdirname
1226 branch: newdirname
1227 tag: tip
1227 tag: tip
1228 parent: 4:7fd235f7cb2f
1228 parent: 4:7fd235f7cb2f
1229 user: test
1229 user: test
1230 date: Thu Jan 01 00:00:00 1970 +0000
1230 date: Thu Jan 01 00:00:00 1970 +0000
1231 summary: chmod amended second time
1231 summary: chmod amended second time
1232
1232
1233 diff --git a/newdirname/commonfile.py b/newdirname/commonfile.py
1233 diff --git a/newdirname/commonfile.py b/newdirname/commonfile.py
1234 old mode 100644
1234 old mode 100644
1235 new mode 100755
1235 new mode 100755
1236
1236
1237 #endif
1237 #endif
1238
1238
1239 Test amend with file inclusion options
1239 Test amend with file inclusion options
1240 --------------------------------------
1240 --------------------------------------
1241
1241
1242 These tests ensure that we are always amending some files that were part of the
1242 These tests ensure that we are always amending some files that were part of the
1243 pre-amend commit. We want to test that the remaining files in the pre-amend
1243 pre-amend commit. We want to test that the remaining files in the pre-amend
1244 commit were not changed in the amended commit. We do so by performing a diff of
1244 commit were not changed in the amended commit. We do so by performing a diff of
1245 the amended commit against its parent commit.
1245 the amended commit against its parent commit.
1246 $ cd ..
1246 $ cd ..
1247 $ hg init testfileinclusions
1247 $ hg init testfileinclusions
1248 $ cd testfileinclusions
1248 $ cd testfileinclusions
1249 $ echo a > a
1249 $ echo a > a
1250 $ echo b > b
1250 $ echo b > b
1251 $ hg commit -Aqm "Adding a and b"
1251 $ hg commit -Aqm "Adding a and b"
1252
1252
1253 Only add changes to a particular file
1253 Only add changes to a particular file
1254 $ echo a >> a
1254 $ echo a >> a
1255 $ echo b >> b
1255 $ echo b >> b
1256 $ hg commit --amend -I a
1256 $ hg commit --amend -I a
1257 $ hg diff --git -r null -r .
1257 $ hg diff --git -r null -r .
1258 diff --git a/a b/a
1258 diff --git a/a b/a
1259 new file mode 100644
1259 new file mode 100644
1260 --- /dev/null
1260 --- /dev/null
1261 +++ b/a
1261 +++ b/a
1262 @@ -0,0 +1,2 @@
1262 @@ -0,0 +1,2 @@
1263 +a
1263 +a
1264 +a
1264 +a
1265 diff --git a/b b/b
1265 diff --git a/b b/b
1266 new file mode 100644
1266 new file mode 100644
1267 --- /dev/null
1267 --- /dev/null
1268 +++ b/b
1268 +++ b/b
1269 @@ -0,0 +1,1 @@
1269 @@ -0,0 +1,1 @@
1270 +b
1270 +b
1271
1271
1272 $ echo a >> a
1272 $ echo a >> a
1273 $ hg commit --amend b
1273 $ hg commit --amend b
1274 $ hg diff --git -r null -r .
1274 $ hg diff --git -r null -r .
1275 diff --git a/a b/a
1275 diff --git a/a b/a
1276 new file mode 100644
1276 new file mode 100644
1277 --- /dev/null
1277 --- /dev/null
1278 +++ b/a
1278 +++ b/a
1279 @@ -0,0 +1,2 @@
1279 @@ -0,0 +1,2 @@
1280 +a
1280 +a
1281 +a
1281 +a
1282 diff --git a/b b/b
1282 diff --git a/b b/b
1283 new file mode 100644
1283 new file mode 100644
1284 --- /dev/null
1284 --- /dev/null
1285 +++ b/b
1285 +++ b/b
1286 @@ -0,0 +1,2 @@
1286 @@ -0,0 +1,2 @@
1287 +b
1287 +b
1288 +b
1288 +b
1289
1289
1290 Exclude changes to a particular file
1290 Exclude changes to a particular file
1291 $ echo b >> b
1291 $ echo b >> b
1292 $ hg commit --amend -X a
1292 $ hg commit --amend -X a
1293 $ hg diff --git -r null -r .
1293 $ hg diff --git -r null -r .
1294 diff --git a/a b/a
1294 diff --git a/a b/a
1295 new file mode 100644
1295 new file mode 100644
1296 --- /dev/null
1296 --- /dev/null
1297 +++ b/a
1297 +++ b/a
1298 @@ -0,0 +1,2 @@
1298 @@ -0,0 +1,2 @@
1299 +a
1299 +a
1300 +a
1300 +a
1301 diff --git a/b b/b
1301 diff --git a/b b/b
1302 new file mode 100644
1302 new file mode 100644
1303 --- /dev/null
1303 --- /dev/null
1304 +++ b/b
1304 +++ b/b
1305 @@ -0,0 +1,3 @@
1305 @@ -0,0 +1,3 @@
1306 +b
1306 +b
1307 +b
1307 +b
1308 +b
1308 +b
1309
1309
1310 Check the addremove flag
1310 Check the addremove flag
1311 $ echo c > c
1311 $ echo c > c
1312 $ rm a
1312 $ rm a
1313 $ hg commit --amend -A
1313 $ hg commit --amend -A
1314 removing a
1314 removing a
1315 adding c
1315 adding c
1316 $ hg diff --git -r null -r .
1316 $ hg diff --git -r null -r .
1317 diff --git a/b b/b
1317 diff --git a/b b/b
1318 new file mode 100644
1318 new file mode 100644
1319 --- /dev/null
1319 --- /dev/null
1320 +++ b/b
1320 +++ b/b
1321 @@ -0,0 +1,3 @@
1321 @@ -0,0 +1,3 @@
1322 +b
1322 +b
1323 +b
1323 +b
1324 +b
1324 +b
1325 diff --git a/c b/c
1325 diff --git a/c b/c
1326 new file mode 100644
1326 new file mode 100644
1327 --- /dev/null
1327 --- /dev/null
1328 +++ b/c
1328 +++ b/c
1329 @@ -0,0 +1,1 @@
1329 @@ -0,0 +1,1 @@
1330 +c
1330 +c
@@ -1,876 +1,876 b''
1 commit date test
1 commit date test
2
2
3 $ hg init test
3 $ hg init test
4 $ cd test
4 $ cd test
5 $ echo foo > foo
5 $ echo foo > foo
6 $ hg add foo
6 $ hg add foo
7 $ cat > $TESTTMP/checkeditform.sh <<EOF
7 $ cat > $TESTTMP/checkeditform.sh <<EOF
8 > env | grep HGEDITFORM
8 > env | grep HGEDITFORM
9 > true
9 > true
10 > EOF
10 > EOF
11 $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg commit -m ""
11 $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg commit -m ""
12 HGEDITFORM=commit.normal.normal
12 HGEDITFORM=commit.normal.normal
13 abort: empty commit message
13 abort: empty commit message
14 [10]
14 [10]
15 $ hg commit -d '0 0' -m commit-1
15 $ hg commit -d '0 0' -m commit-1
16 $ echo foo >> foo
16 $ echo foo >> foo
17 $ hg commit -d '1 4444444' -m commit-3
17 $ hg commit -d '1 4444444' -m commit-3
18 hg: parse error: impossible time zone offset: 4444444
18 hg: parse error: impossible time zone offset: 4444444
19 [10]
19 [10]
20 $ hg commit -d '1 15.1' -m commit-4
20 $ hg commit -d '1 15.1' -m commit-4
21 hg: parse error: invalid date: '1\t15.1'
21 hg: parse error: invalid date: '1\t15.1'
22 [10]
22 [10]
23 $ hg commit -d 'foo bar' -m commit-5
23 $ hg commit -d 'foo bar' -m commit-5
24 hg: parse error: invalid date: 'foo bar'
24 hg: parse error: invalid date: 'foo bar'
25 [10]
25 [10]
26 $ hg commit -d ' 1 4444' -m commit-6
26 $ hg commit -d ' 1 4444' -m commit-6
27 $ hg commit -d '111111111111 0' -m commit-7
27 $ hg commit -d '111111111111 0' -m commit-7
28 hg: parse error: date exceeds 32 bits: 111111111111
28 hg: parse error: date exceeds 32 bits: 111111111111
29 [10]
29 [10]
30 $ hg commit -d '-111111111111 0' -m commit-7
30 $ hg commit -d '-111111111111 0' -m commit-7
31 hg: parse error: date exceeds 32 bits: -111111111111
31 hg: parse error: date exceeds 32 bits: -111111111111
32 [10]
32 [10]
33 $ echo foo >> foo
33 $ echo foo >> foo
34 $ hg commit -d '1901-12-13 20:45:52 +0000' -m commit-7-2
34 $ hg commit -d '1901-12-13 20:45:52 +0000' -m commit-7-2
35 $ echo foo >> foo
35 $ echo foo >> foo
36 $ hg commit -d '-2147483648 0' -m commit-7-3
36 $ hg commit -d '-2147483648 0' -m commit-7-3
37 $ hg log -T '{rev} {date|isodatesec}\n' -l2
37 $ hg log -T '{rev} {date|isodatesec}\n' -l2
38 3 1901-12-13 20:45:52 +0000
38 3 1901-12-13 20:45:52 +0000
39 2 1901-12-13 20:45:52 +0000
39 2 1901-12-13 20:45:52 +0000
40 $ hg commit -d '1901-12-13 20:45:51 +0000' -m commit-7
40 $ hg commit -d '1901-12-13 20:45:51 +0000' -m commit-7
41 hg: parse error: date exceeds 32 bits: -2147483649
41 hg: parse error: date exceeds 32 bits: -2147483649
42 [10]
42 [10]
43 $ hg commit -d '-2147483649 0' -m commit-7
43 $ hg commit -d '-2147483649 0' -m commit-7
44 hg: parse error: date exceeds 32 bits: -2147483649
44 hg: parse error: date exceeds 32 bits: -2147483649
45 [10]
45 [10]
46
46
47 commit added file that has been deleted
47 commit added file that has been deleted
48
48
49 $ echo bar > bar
49 $ echo bar > bar
50 $ hg add bar
50 $ hg add bar
51 $ rm bar
51 $ rm bar
52 $ hg commit -m commit-8
52 $ hg commit -m commit-8
53 nothing changed (1 missing files, see 'hg status')
53 nothing changed (1 missing files, see 'hg status')
54 [1]
54 [1]
55 $ hg commit -m commit-8-2 bar
55 $ hg commit -m commit-8-2 bar
56 abort: bar: file not found!
56 abort: bar: file not found!
57 [10]
57 [10]
58
58
59 $ hg -q revert -a --no-backup
59 $ hg -q revert -a --no-backup
60
60
61 $ mkdir dir
61 $ mkdir dir
62 $ echo boo > dir/file
62 $ echo boo > dir/file
63 $ hg add
63 $ hg add
64 adding dir/file
64 adding dir/file
65 $ hg -v commit -m commit-9 dir
65 $ hg -v commit -m commit-9 dir
66 committing files:
66 committing files:
67 dir/file
67 dir/file
68 committing manifest
68 committing manifest
69 committing changelog
69 committing changelog
70 committed changeset 4:1957363f1ced
70 committed changeset 4:1957363f1ced
71
71
72 $ echo > dir.file
72 $ echo > dir.file
73 $ hg add
73 $ hg add
74 adding dir.file
74 adding dir.file
75 $ hg commit -m commit-10 dir dir.file
75 $ hg commit -m commit-10 dir dir.file
76 abort: dir: no match under directory!
76 abort: dir: no match under directory!
77 [10]
77 [10]
78
78
79 $ echo >> dir/file
79 $ echo >> dir/file
80 $ mkdir bleh
80 $ mkdir bleh
81 $ mkdir dir2
81 $ mkdir dir2
82 $ cd bleh
82 $ cd bleh
83 $ hg commit -m commit-11 .
83 $ hg commit -m commit-11 .
84 abort: bleh: no match under directory!
84 abort: bleh: no match under directory!
85 [10]
85 [10]
86 $ hg commit -m commit-12 ../dir ../dir2
86 $ hg commit -m commit-12 ../dir ../dir2
87 abort: dir2: no match under directory!
87 abort: dir2: no match under directory!
88 [10]
88 [10]
89 $ hg -v commit -m commit-13 ../dir
89 $ hg -v commit -m commit-13 ../dir
90 committing files:
90 committing files:
91 dir/file
91 dir/file
92 committing manifest
92 committing manifest
93 committing changelog
93 committing changelog
94 committed changeset 5:a31d8f87544a
94 committed changeset 5:a31d8f87544a
95 $ cd ..
95 $ cd ..
96
96
97 $ hg commit -m commit-14 does-not-exist
97 $ hg commit -m commit-14 does-not-exist
98 abort: does-not-exist: * (glob)
98 abort: does-not-exist: * (glob)
99 [10]
99 [10]
100
100
101 #if symlink
101 #if symlink
102 $ ln -s foo baz
102 $ ln -s foo baz
103 $ hg commit -m commit-15 baz
103 $ hg commit -m commit-15 baz
104 abort: baz: file not tracked!
104 abort: baz: file not tracked!
105 [10]
105 [10]
106 $ rm baz
106 $ rm baz
107 #endif
107 #endif
108
108
109 $ touch quux
109 $ touch quux
110 $ hg commit -m commit-16 quux
110 $ hg commit -m commit-16 quux
111 abort: quux: file not tracked!
111 abort: quux: file not tracked!
112 [10]
112 [10]
113 $ echo >> dir/file
113 $ echo >> dir/file
114 $ hg -v commit -m commit-17 dir/file
114 $ hg -v commit -m commit-17 dir/file
115 committing files:
115 committing files:
116 dir/file
116 dir/file
117 committing manifest
117 committing manifest
118 committing changelog
118 committing changelog
119 committed changeset 6:32d054c9d085
119 committed changeset 6:32d054c9d085
120
120
121 An empty date was interpreted as epoch origin
121 An empty date was interpreted as epoch origin
122
122
123 $ echo foo >> foo
123 $ echo foo >> foo
124 $ hg commit -d '' -m commit-no-date --config devel.default-date=
124 $ hg commit -d '' -m commit-no-date --config devel.default-date=
125 $ hg tip --template '{date|isodate}\n' | grep '1970'
125 $ hg tip --template '{date|isodate}\n' | grep '1970'
126 [1]
126 [1]
127
127
128 Using the advanced --extra flag
128 Using the advanced --extra flag
129
129
130 $ echo "[extensions]" >> $HGRCPATH
130 $ echo "[extensions]" >> $HGRCPATH
131 $ echo "commitextras=" >> $HGRCPATH
131 $ echo "commitextras=" >> $HGRCPATH
132 $ hg status
132 $ hg status
133 ? quux
133 ? quux
134 $ hg add quux
134 $ hg add quux
135 $ hg commit -m "adding internal used extras" --extra amend_source=hash
135 $ hg commit -m "adding internal used extras" --extra amend_source=hash
136 abort: key 'amend_source' is used internally, can't be set manually
136 abort: key 'amend_source' is used internally, can't be set manually
137 [10]
137 [10]
138 $ hg commit -m "special chars in extra" --extra id@phab=214
138 $ hg commit -m "special chars in extra" --extra id@phab=214
139 abort: keys can only contain ascii letters, digits, '_' and '-'
139 abort: keys can only contain ascii letters, digits, '_' and '-'
140 [10]
140 [10]
141 $ hg commit -m "empty key" --extra =value
141 $ hg commit -m "empty key" --extra =value
142 abort: unable to parse '=value', keys can't be empty
142 abort: unable to parse '=value', keys can't be empty
143 [10]
143 [10]
144 $ hg commit -m "adding extras" --extra sourcehash=foo --extra oldhash=bar
144 $ hg commit -m "adding extras" --extra sourcehash=foo --extra oldhash=bar
145 $ hg log -r . -T '{extras % "{extra}\n"}'
145 $ hg log -r . -T '{extras % "{extra}\n"}'
146 branch=default
146 branch=default
147 oldhash=bar
147 oldhash=bar
148 sourcehash=foo
148 sourcehash=foo
149
149
150 Failed commit with --addremove should not update dirstate
150 Failed commit with --addremove should not update dirstate
151
151
152 $ echo foo > newfile
152 $ echo foo > newfile
153 $ hg status
153 $ hg status
154 ? newfile
154 ? newfile
155 $ HGEDITOR=false hg ci --addremove
155 $ HGEDITOR=false hg ci --addremove
156 adding newfile
156 adding newfile
157 abort: edit failed: false exited with status 1
157 abort: edit failed: false exited with status 1
158 [250]
158 [250]
159 $ hg status
159 $ hg status
160 ? newfile
160 ? newfile
161
161
162 Make sure we do not obscure unknown requires file entries (issue2649)
162 Make sure we do not obscure unknown requires file entries (issue2649)
163
163
164 $ echo foo >> foo
164 $ echo foo >> foo
165 $ echo fake >> .hg/requires
165 $ echo fake >> .hg/requires
166 $ hg commit -m bla
166 $ hg commit -m bla
167 abort: repository requires features unknown to this Mercurial: fake
167 abort: repository requires features unknown to this Mercurial: fake
168 (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
168 (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
169 [255]
169 [255]
170
170
171 $ cd ..
171 $ cd ..
172
172
173
173
174 partial subdir commit test
174 partial subdir commit test
175
175
176 $ hg init test2
176 $ hg init test2
177 $ cd test2
177 $ cd test2
178 $ mkdir foo
178 $ mkdir foo
179 $ echo foo > foo/foo
179 $ echo foo > foo/foo
180 $ mkdir bar
180 $ mkdir bar
181 $ echo bar > bar/bar
181 $ echo bar > bar/bar
182 $ hg add
182 $ hg add
183 adding bar/bar
183 adding bar/bar
184 adding foo/foo
184 adding foo/foo
185 $ HGEDITOR=cat hg ci -e -m commit-subdir-1 foo
185 $ HGEDITOR=cat hg ci -e -m commit-subdir-1 foo
186 commit-subdir-1
186 commit-subdir-1
187
187
188
188
189 HG: Enter commit message. Lines beginning with 'HG:' are removed.
189 HG: Enter commit message. Lines beginning with 'HG:' are removed.
190 HG: Leave message empty to abort commit.
190 HG: Leave message empty to abort commit.
191 HG: --
191 HG: --
192 HG: user: test
192 HG: user: test
193 HG: branch 'default'
193 HG: branch 'default'
194 HG: added foo/foo
194 HG: added foo/foo
195
195
196
196
197 $ hg ci -m commit-subdir-2 bar
197 $ hg ci -m commit-subdir-2 bar
198
198
199 subdir log 1
199 subdir log 1
200
200
201 $ hg log -v foo
201 $ hg log -v foo
202 changeset: 0:f97e73a25882
202 changeset: 0:f97e73a25882
203 user: test
203 user: test
204 date: Thu Jan 01 00:00:00 1970 +0000
204 date: Thu Jan 01 00:00:00 1970 +0000
205 files: foo/foo
205 files: foo/foo
206 description:
206 description:
207 commit-subdir-1
207 commit-subdir-1
208
208
209
209
210
210
211 subdir log 2
211 subdir log 2
212
212
213 $ hg log -v bar
213 $ hg log -v bar
214 changeset: 1:aa809156d50d
214 changeset: 1:aa809156d50d
215 tag: tip
215 tag: tip
216 user: test
216 user: test
217 date: Thu Jan 01 00:00:00 1970 +0000
217 date: Thu Jan 01 00:00:00 1970 +0000
218 files: bar/bar
218 files: bar/bar
219 description:
219 description:
220 commit-subdir-2
220 commit-subdir-2
221
221
222
222
223
223
224 full log
224 full log
225
225
226 $ hg log -v
226 $ hg log -v
227 changeset: 1:aa809156d50d
227 changeset: 1:aa809156d50d
228 tag: tip
228 tag: tip
229 user: test
229 user: test
230 date: Thu Jan 01 00:00:00 1970 +0000
230 date: Thu Jan 01 00:00:00 1970 +0000
231 files: bar/bar
231 files: bar/bar
232 description:
232 description:
233 commit-subdir-2
233 commit-subdir-2
234
234
235
235
236 changeset: 0:f97e73a25882
236 changeset: 0:f97e73a25882
237 user: test
237 user: test
238 date: Thu Jan 01 00:00:00 1970 +0000
238 date: Thu Jan 01 00:00:00 1970 +0000
239 files: foo/foo
239 files: foo/foo
240 description:
240 description:
241 commit-subdir-1
241 commit-subdir-1
242
242
243
243
244 $ cd ..
244 $ cd ..
245
245
246
246
247 dot and subdir commit test
247 dot and subdir commit test
248
248
249 $ hg init test3
249 $ hg init test3
250 $ echo commit-foo-subdir > commit-log-test
250 $ echo commit-foo-subdir > commit-log-test
251 $ cd test3
251 $ cd test3
252 $ mkdir foo
252 $ mkdir foo
253 $ echo foo content > foo/plain-file
253 $ echo foo content > foo/plain-file
254 $ hg add foo/plain-file
254 $ hg add foo/plain-file
255 $ HGEDITOR=cat hg ci --edit -l ../commit-log-test foo
255 $ HGEDITOR=cat hg ci --edit -l ../commit-log-test foo
256 commit-foo-subdir
256 commit-foo-subdir
257
257
258
258
259 HG: Enter commit message. Lines beginning with 'HG:' are removed.
259 HG: Enter commit message. Lines beginning with 'HG:' are removed.
260 HG: Leave message empty to abort commit.
260 HG: Leave message empty to abort commit.
261 HG: --
261 HG: --
262 HG: user: test
262 HG: user: test
263 HG: branch 'default'
263 HG: branch 'default'
264 HG: added foo/plain-file
264 HG: added foo/plain-file
265
265
266
266
267 $ echo modified foo content > foo/plain-file
267 $ echo modified foo content > foo/plain-file
268 $ hg ci -m commit-foo-dot .
268 $ hg ci -m commit-foo-dot .
269
269
270 full log
270 full log
271
271
272 $ hg log -v
272 $ hg log -v
273 changeset: 1:95b38e3a5b2e
273 changeset: 1:95b38e3a5b2e
274 tag: tip
274 tag: tip
275 user: test
275 user: test
276 date: Thu Jan 01 00:00:00 1970 +0000
276 date: Thu Jan 01 00:00:00 1970 +0000
277 files: foo/plain-file
277 files: foo/plain-file
278 description:
278 description:
279 commit-foo-dot
279 commit-foo-dot
280
280
281
281
282 changeset: 0:65d4e9386227
282 changeset: 0:65d4e9386227
283 user: test
283 user: test
284 date: Thu Jan 01 00:00:00 1970 +0000
284 date: Thu Jan 01 00:00:00 1970 +0000
285 files: foo/plain-file
285 files: foo/plain-file
286 description:
286 description:
287 commit-foo-subdir
287 commit-foo-subdir
288
288
289
289
290
290
291 subdir log
291 subdir log
292
292
293 $ cd foo
293 $ cd foo
294 $ hg log .
294 $ hg log .
295 changeset: 1:95b38e3a5b2e
295 changeset: 1:95b38e3a5b2e
296 tag: tip
296 tag: tip
297 user: test
297 user: test
298 date: Thu Jan 01 00:00:00 1970 +0000
298 date: Thu Jan 01 00:00:00 1970 +0000
299 summary: commit-foo-dot
299 summary: commit-foo-dot
300
300
301 changeset: 0:65d4e9386227
301 changeset: 0:65d4e9386227
302 user: test
302 user: test
303 date: Thu Jan 01 00:00:00 1970 +0000
303 date: Thu Jan 01 00:00:00 1970 +0000
304 summary: commit-foo-subdir
304 summary: commit-foo-subdir
305
305
306 $ cd ..
306 $ cd ..
307 $ cd ..
307 $ cd ..
308
308
309 Issue1049: Hg permits partial commit of merge without warning
309 Issue1049: Hg permits partial commit of merge without warning
310
310
311 $ hg init issue1049
311 $ hg init issue1049
312 $ cd issue1049
312 $ cd issue1049
313 $ echo a > a
313 $ echo a > a
314 $ hg ci -Ama
314 $ hg ci -Ama
315 adding a
315 adding a
316 $ echo a >> a
316 $ echo a >> a
317 $ hg ci -mb
317 $ hg ci -mb
318 $ hg up 0
318 $ hg up 0
319 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
319 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
320 $ echo b >> a
320 $ echo b >> a
321 $ hg ci -mc
321 $ hg ci -mc
322 created new head
322 created new head
323 $ HGMERGE=true hg merge
323 $ HGMERGE=true hg merge
324 merging a
324 merging a
325 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
325 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
326 (branch merge, don't forget to commit)
326 (branch merge, don't forget to commit)
327
327
328 should fail because we are specifying a file name
328 should fail because we are specifying a file name
329
329
330 $ hg ci -mmerge a
330 $ hg ci -mmerge a
331 abort: cannot partially commit a merge (do not specify files or patterns)
331 abort: cannot partially commit a merge (do not specify files or patterns)
332 [255]
332 [255]
333
333
334 should fail because we are specifying a pattern
334 should fail because we are specifying a pattern
335
335
336 $ hg ci -mmerge -I a
336 $ hg ci -mmerge -I a
337 abort: cannot partially commit a merge (do not specify files or patterns)
337 abort: cannot partially commit a merge (do not specify files or patterns)
338 [255]
338 [255]
339
339
340 should succeed
340 should succeed
341
341
342 $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg ci -mmerge --edit
342 $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg ci -mmerge --edit
343 HGEDITFORM=commit.normal.merge
343 HGEDITFORM=commit.normal.merge
344 $ cd ..
344 $ cd ..
345
345
346
346
347 test commit message content
347 test commit message content
348
348
349 $ hg init commitmsg
349 $ hg init commitmsg
350 $ cd commitmsg
350 $ cd commitmsg
351 $ echo changed > changed
351 $ echo changed > changed
352 $ echo removed > removed
352 $ echo removed > removed
353 $ hg book activebookmark
353 $ hg book activebookmark
354 $ hg ci -qAm init
354 $ hg ci -qAm init
355
355
356 $ hg rm removed
356 $ hg rm removed
357 $ echo changed >> changed
357 $ echo changed >> changed
358 $ echo added > added
358 $ echo added > added
359 $ hg add added
359 $ hg add added
360 $ HGEDITOR=cat hg ci -A
360 $ HGEDITOR=cat hg ci -A
361
361
362
362
363 HG: Enter commit message. Lines beginning with 'HG:' are removed.
363 HG: Enter commit message. Lines beginning with 'HG:' are removed.
364 HG: Leave message empty to abort commit.
364 HG: Leave message empty to abort commit.
365 HG: --
365 HG: --
366 HG: user: test
366 HG: user: test
367 HG: branch 'default'
367 HG: branch 'default'
368 HG: bookmark 'activebookmark'
368 HG: bookmark 'activebookmark'
369 HG: added added
369 HG: added added
370 HG: changed changed
370 HG: changed changed
371 HG: removed removed
371 HG: removed removed
372 abort: empty commit message
372 abort: empty commit message
373 [10]
373 [10]
374
374
375 test saving last-message.txt
375 test saving last-message.txt
376
376
377 $ hg init sub
377 $ hg init sub
378 $ echo a > sub/a
378 $ echo a > sub/a
379 $ hg -R sub add sub/a
379 $ hg -R sub add sub/a
380 $ cat > sub/.hg/hgrc <<EOF
380 $ cat > sub/.hg/hgrc <<EOF
381 > [hooks]
381 > [hooks]
382 > precommit.test-saving-last-message = false
382 > precommit.test-saving-last-message = false
383 > EOF
383 > EOF
384
384
385 $ echo 'sub = sub' > .hgsub
385 $ echo 'sub = sub' > .hgsub
386 $ hg add .hgsub
386 $ hg add .hgsub
387
387
388 $ cat > $TESTTMP/editor.sh <<EOF
388 $ cat > $TESTTMP/editor.sh <<EOF
389 > echo "==== before editing:"
389 > echo "==== before editing:"
390 > cat \$1
390 > cat \$1
391 > echo "===="
391 > echo "===="
392 > echo "test saving last-message.txt" >> \$1
392 > echo "test saving last-message.txt" >> \$1
393 > EOF
393 > EOF
394
394
395 $ rm -f .hg/last-message.txt
395 $ rm -f .hg/last-message.txt
396 $ HGEDITOR="sh $TESTTMP/editor.sh" hg commit -S -q
396 $ HGEDITOR="sh $TESTTMP/editor.sh" hg commit -S -q
397 ==== before editing:
397 ==== before editing:
398
398
399
399
400 HG: Enter commit message. Lines beginning with 'HG:' are removed.
400 HG: Enter commit message. Lines beginning with 'HG:' are removed.
401 HG: Leave message empty to abort commit.
401 HG: Leave message empty to abort commit.
402 HG: --
402 HG: --
403 HG: user: test
403 HG: user: test
404 HG: branch 'default'
404 HG: branch 'default'
405 HG: bookmark 'activebookmark'
405 HG: bookmark 'activebookmark'
406 HG: subrepo sub
406 HG: subrepo sub
407 HG: added .hgsub
407 HG: added .hgsub
408 HG: added added
408 HG: added added
409 HG: changed .hgsubstate
409 HG: changed .hgsubstate
410 HG: changed changed
410 HG: changed changed
411 HG: removed removed
411 HG: removed removed
412 ====
412 ====
413 abort: precommit.test-saving-last-message hook exited with status 1 (in subrepository "sub")
413 abort: precommit.test-saving-last-message hook exited with status 1 (in subrepository "sub")
414 [255]
414 [255]
415 $ cat .hg/last-message.txt
415 $ cat .hg/last-message.txt
416
416
417
417
418 test saving last-message.txt
418 test saving last-message.txt
419
419
420 test that '[committemplate] changeset' definition and commit log
420 test that '[committemplate] changeset' definition and commit log
421 specific template keywords work well
421 specific template keywords work well
422
422
423 $ cat >> .hg/hgrc <<EOF
423 $ cat >> .hg/hgrc <<EOF
424 > [committemplate]
424 > [committemplate]
425 > changeset.commit.normal = 'HG: this is "commit.normal" template
425 > changeset.commit.normal = 'HG: this is "commit.normal" template
426 > HG: {extramsg}
426 > HG: {extramsg}
427 > {if(activebookmark,
427 > {if(activebookmark,
428 > "HG: bookmark '{activebookmark}' is activated\n",
428 > "HG: bookmark '{activebookmark}' is activated\n",
429 > "HG: no bookmark is activated\n")}{subrepos %
429 > "HG: no bookmark is activated\n")}{subrepos %
430 > "HG: subrepo '{subrepo}' is changed\n"}'
430 > "HG: subrepo '{subrepo}' is changed\n"}'
431 >
431 >
432 > changeset.commit = HG: this is "commit" template
432 > changeset.commit = HG: this is "commit" template
433 > HG: {extramsg}
433 > HG: {extramsg}
434 > {if(activebookmark,
434 > {if(activebookmark,
435 > "HG: bookmark '{activebookmark}' is activated\n",
435 > "HG: bookmark '{activebookmark}' is activated\n",
436 > "HG: no bookmark is activated\n")}{subrepos %
436 > "HG: no bookmark is activated\n")}{subrepos %
437 > "HG: subrepo '{subrepo}' is changed\n"}
437 > "HG: subrepo '{subrepo}' is changed\n"}
438 >
438 >
439 > changeset = HG: this is customized commit template
439 > changeset = HG: this is customized commit template
440 > HG: {extramsg}
440 > HG: {extramsg}
441 > {if(activebookmark,
441 > {if(activebookmark,
442 > "HG: bookmark '{activebookmark}' is activated\n",
442 > "HG: bookmark '{activebookmark}' is activated\n",
443 > "HG: no bookmark is activated\n")}{subrepos %
443 > "HG: no bookmark is activated\n")}{subrepos %
444 > "HG: subrepo '{subrepo}' is changed\n"}
444 > "HG: subrepo '{subrepo}' is changed\n"}
445 > EOF
445 > EOF
446
446
447 $ hg init sub2
447 $ hg init sub2
448 $ echo a > sub2/a
448 $ echo a > sub2/a
449 $ hg -R sub2 add sub2/a
449 $ hg -R sub2 add sub2/a
450 $ echo 'sub2 = sub2' >> .hgsub
450 $ echo 'sub2 = sub2' >> .hgsub
451
451
452 $ HGEDITOR=cat hg commit -S -q
452 $ HGEDITOR=cat hg commit -S -q
453 HG: this is "commit.normal" template
453 HG: this is "commit.normal" template
454 HG: Leave message empty to abort commit.
454 HG: Leave message empty to abort commit.
455 HG: bookmark 'activebookmark' is activated
455 HG: bookmark 'activebookmark' is activated
456 HG: subrepo 'sub' is changed
456 HG: subrepo 'sub' is changed
457 HG: subrepo 'sub2' is changed
457 HG: subrepo 'sub2' is changed
458 abort: empty commit message
458 abort: empty commit message
459 [10]
459 [10]
460
460
461 $ cat >> .hg/hgrc <<EOF
461 $ cat >> .hg/hgrc <<EOF
462 > [committemplate]
462 > [committemplate]
463 > changeset.commit.normal =
463 > changeset.commit.normal =
464 > # now, "changeset.commit" should be chosen for "hg commit"
464 > # now, "changeset.commit" should be chosen for "hg commit"
465 > EOF
465 > EOF
466
466
467 $ hg bookmark --inactive activebookmark
467 $ hg bookmark --inactive activebookmark
468 $ hg forget .hgsub
468 $ hg forget .hgsub
469 $ HGEDITOR=cat hg commit -q
469 $ HGEDITOR=cat hg commit -q
470 HG: this is "commit" template
470 HG: this is "commit" template
471 HG: Leave message empty to abort commit.
471 HG: Leave message empty to abort commit.
472 HG: no bookmark is activated
472 HG: no bookmark is activated
473 abort: empty commit message
473 abort: empty commit message
474 [10]
474 [10]
475
475
476 $ cat >> .hg/hgrc <<EOF
476 $ cat >> .hg/hgrc <<EOF
477 > [committemplate]
477 > [committemplate]
478 > changeset.commit =
478 > changeset.commit =
479 > # now, "changeset" should be chosen for "hg commit"
479 > # now, "changeset" should be chosen for "hg commit"
480 > EOF
480 > EOF
481
481
482 $ HGEDITOR=cat hg commit -q
482 $ HGEDITOR=cat hg commit -q
483 HG: this is customized commit template
483 HG: this is customized commit template
484 HG: Leave message empty to abort commit.
484 HG: Leave message empty to abort commit.
485 HG: no bookmark is activated
485 HG: no bookmark is activated
486 abort: empty commit message
486 abort: empty commit message
487 [10]
487 [10]
488
488
489 $ cat >> .hg/hgrc <<EOF
489 $ cat >> .hg/hgrc <<EOF
490 > [committemplate]
490 > [committemplate]
491 > changeset = {desc}
491 > changeset = {desc}
492 > HG: mods={file_mods}
492 > HG: mods={file_mods}
493 > HG: adds={file_adds}
493 > HG: adds={file_adds}
494 > HG: dels={file_dels}
494 > HG: dels={file_dels}
495 > HG: files={files}
495 > HG: files={files}
496 > HG:
496 > HG:
497 > {splitlines(diff()) % 'HG: {line}\n'
497 > {splitlines(diff()) % 'HG: {line}\n'
498 > }HG:
498 > }HG:
499 > HG: mods={file_mods}
499 > HG: mods={file_mods}
500 > HG: adds={file_adds}
500 > HG: adds={file_adds}
501 > HG: dels={file_dels}
501 > HG: dels={file_dels}
502 > HG: files={files}\n
502 > HG: files={files}\n
503 > EOF
503 > EOF
504 $ hg status -amr
504 $ hg status -amr
505 M changed
505 M changed
506 A added
506 A added
507 R removed
507 R removed
508 $ HGEDITOR=cat hg commit -q -e -m "foo bar" changed
508 $ HGEDITOR=cat hg commit -q -e -m "foo bar" changed
509 foo bar
509 foo bar
510 HG: mods=changed
510 HG: mods=changed
511 HG: adds=
511 HG: adds=
512 HG: dels=
512 HG: dels=
513 HG: files=changed
513 HG: files=changed
514 HG:
514 HG:
515 HG: diff -r d2313f97106f changed
515 HG: diff -r d2313f97106f changed
516 HG: --- a/changed Thu Jan 01 00:00:00 1970 +0000
516 HG: --- a/changed Thu Jan 01 00:00:00 1970 +0000
517 HG: +++ b/changed Thu Jan 01 00:00:00 1970 +0000
517 HG: +++ b/changed Thu Jan 01 00:00:00 1970 +0000
518 HG: @@ -1,1 +1,2 @@
518 HG: @@ -1,1 +1,2 @@
519 HG: changed
519 HG: changed
520 HG: +changed
520 HG: +changed
521 HG:
521 HG:
522 HG: mods=changed
522 HG: mods=changed
523 HG: adds=
523 HG: adds=
524 HG: dels=
524 HG: dels=
525 HG: files=changed
525 HG: files=changed
526 $ hg status -amr
526 $ hg status -amr
527 A added
527 A added
528 R removed
528 R removed
529 $ hg parents --template "M {file_mods}\nA {file_adds}\nR {file_dels}\n"
529 $ hg parents --template "M {file_mods}\nA {file_adds}\nR {file_dels}\n"
530 M changed
530 M changed
531 A
531 A
532 R
532 R
533 $ hg rollback -q
533 $ hg rollback -q
534
534
535 $ cat >> .hg/hgrc <<EOF
535 $ cat >> .hg/hgrc <<EOF
536 > [committemplate]
536 > [committemplate]
537 > changeset = {desc}
537 > changeset = {desc}
538 > HG: mods={file_mods}
538 > HG: mods={file_mods}
539 > HG: adds={file_adds}
539 > HG: adds={file_adds}
540 > HG: dels={file_dels}
540 > HG: dels={file_dels}
541 > HG: files={files}
541 > HG: files={files}
542 > HG:
542 > HG:
543 > {splitlines(diff("changed")) % 'HG: {line}\n'
543 > {splitlines(diff("changed")) % 'HG: {line}\n'
544 > }HG:
544 > }HG:
545 > HG: mods={file_mods}
545 > HG: mods={file_mods}
546 > HG: adds={file_adds}
546 > HG: adds={file_adds}
547 > HG: dels={file_dels}
547 > HG: dels={file_dels}
548 > HG: files={files}
548 > HG: files={files}
549 > HG:
549 > HG:
550 > {splitlines(diff("added")) % 'HG: {line}\n'
550 > {splitlines(diff("added")) % 'HG: {line}\n'
551 > }HG:
551 > }HG:
552 > HG: mods={file_mods}
552 > HG: mods={file_mods}
553 > HG: adds={file_adds}
553 > HG: adds={file_adds}
554 > HG: dels={file_dels}
554 > HG: dels={file_dels}
555 > HG: files={files}
555 > HG: files={files}
556 > HG:
556 > HG:
557 > {splitlines(diff("removed")) % 'HG: {line}\n'
557 > {splitlines(diff("removed")) % 'HG: {line}\n'
558 > }HG:
558 > }HG:
559 > HG: mods={file_mods}
559 > HG: mods={file_mods}
560 > HG: adds={file_adds}
560 > HG: adds={file_adds}
561 > HG: dels={file_dels}
561 > HG: dels={file_dels}
562 > HG: files={files}\n
562 > HG: files={files}\n
563 > EOF
563 > EOF
564 $ HGEDITOR=cat hg commit -q -e -m "foo bar" added removed
564 $ HGEDITOR=cat hg commit -q -e -m "foo bar" added removed
565 foo bar
565 foo bar
566 HG: mods=
566 HG: mods=
567 HG: adds=added
567 HG: adds=added
568 HG: dels=removed
568 HG: dels=removed
569 HG: files=added removed
569 HG: files=added removed
570 HG:
570 HG:
571 HG:
571 HG:
572 HG: mods=
572 HG: mods=
573 HG: adds=added
573 HG: adds=added
574 HG: dels=removed
574 HG: dels=removed
575 HG: files=added removed
575 HG: files=added removed
576 HG:
576 HG:
577 HG: diff -r d2313f97106f added
577 HG: diff -r d2313f97106f added
578 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
578 HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
579 HG: +++ b/added Thu Jan 01 00:00:00 1970 +0000
579 HG: +++ b/added Thu Jan 01 00:00:00 1970 +0000
580 HG: @@ -0,0 +1,1 @@
580 HG: @@ -0,0 +1,1 @@
581 HG: +added
581 HG: +added
582 HG:
582 HG:
583 HG: mods=
583 HG: mods=
584 HG: adds=added
584 HG: adds=added
585 HG: dels=removed
585 HG: dels=removed
586 HG: files=added removed
586 HG: files=added removed
587 HG:
587 HG:
588 HG: diff -r d2313f97106f removed
588 HG: diff -r d2313f97106f removed
589 HG: --- a/removed Thu Jan 01 00:00:00 1970 +0000
589 HG: --- a/removed Thu Jan 01 00:00:00 1970 +0000
590 HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
590 HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
591 HG: @@ -1,1 +0,0 @@
591 HG: @@ -1,1 +0,0 @@
592 HG: -removed
592 HG: -removed
593 HG:
593 HG:
594 HG: mods=
594 HG: mods=
595 HG: adds=added
595 HG: adds=added
596 HG: dels=removed
596 HG: dels=removed
597 HG: files=added removed
597 HG: files=added removed
598 $ hg status -amr
598 $ hg status -amr
599 M changed
599 M changed
600 $ hg parents --template "M {file_mods}\nA {file_adds}\nR {file_dels}\n"
600 $ hg parents --template "M {file_mods}\nA {file_adds}\nR {file_dels}\n"
601 M
601 M
602 A added
602 A added
603 R removed
603 R removed
604 $ hg rollback -q
604 $ hg rollback -q
605
605
606 $ cat >> .hg/hgrc <<EOF
606 $ cat >> .hg/hgrc <<EOF
607 > # disable customizing for subsequent tests
607 > # disable customizing for subsequent tests
608 > [committemplate]
608 > [committemplate]
609 > changeset =
609 > changeset =
610 > EOF
610 > EOF
611
611
612 $ cd ..
612 $ cd ..
613
613
614
614
615 commit copy
615 commit copy
616
616
617 $ hg init dir2
617 $ hg init dir2
618 $ cd dir2
618 $ cd dir2
619 $ echo bleh > bar
619 $ echo bleh > bar
620 $ hg add bar
620 $ hg add bar
621 $ hg ci -m 'add bar'
621 $ hg ci -m 'add bar'
622
622
623 $ hg cp bar foo
623 $ hg cp bar foo
624 $ echo >> bar
624 $ echo >> bar
625 $ hg ci -m 'cp bar foo; change bar'
625 $ hg ci -m 'cp bar foo; change bar'
626
626
627 $ hg debugrename foo
627 $ hg debugrename foo
628 foo renamed from bar:26d3ca0dfd18e44d796b564e38dd173c9668d3a9
628 foo renamed from bar:26d3ca0dfd18e44d796b564e38dd173c9668d3a9
629 $ hg debugindex bar
629 $ hg debugindex bar
630 rev linkrev nodeid p1 p2
630 rev linkrev nodeid p1-nodeid p2-nodeid
631 0 0 26d3ca0dfd18 000000000000 000000000000
631 0 0 26d3ca0dfd18 000000000000 000000000000
632 1 1 d267bddd54f7 26d3ca0dfd18 000000000000
632 1 1 d267bddd54f7 26d3ca0dfd18 000000000000
633
633
634 Test making empty commits
634 Test making empty commits
635 $ hg commit --config ui.allowemptycommit=True -m "empty commit"
635 $ hg commit --config ui.allowemptycommit=True -m "empty commit"
636 $ hg log -r . -v --stat
636 $ hg log -r . -v --stat
637 changeset: 2:d809f3644287
637 changeset: 2:d809f3644287
638 tag: tip
638 tag: tip
639 user: test
639 user: test
640 date: Thu Jan 01 00:00:00 1970 +0000
640 date: Thu Jan 01 00:00:00 1970 +0000
641 description:
641 description:
642 empty commit
642 empty commit
643
643
644
644
645
645
646 verify pathauditor blocks evil filepaths
646 verify pathauditor blocks evil filepaths
647 $ cat > evil-commit.py <<EOF
647 $ cat > evil-commit.py <<EOF
648 > from mercurial import context, hg, ui as uimod
648 > from mercurial import context, hg, ui as uimod
649 > notrc = u".h\u200cg".encode('utf-8') + b'/hgrc'
649 > notrc = u".h\u200cg".encode('utf-8') + b'/hgrc'
650 > u = uimod.ui.load()
650 > u = uimod.ui.load()
651 > r = hg.repository(u, b'.')
651 > r = hg.repository(u, b'.')
652 > def filectxfn(repo, memctx, path):
652 > def filectxfn(repo, memctx, path):
653 > return context.memfilectx(repo, memctx, path,
653 > return context.memfilectx(repo, memctx, path,
654 > b'[hooks]\nupdate = echo owned')
654 > b'[hooks]\nupdate = echo owned')
655 > c = context.memctx(r, [r.changelog.tip(), r.nullid],
655 > c = context.memctx(r, [r.changelog.tip(), r.nullid],
656 > b'evil', [notrc], filectxfn, 0)
656 > b'evil', [notrc], filectxfn, 0)
657 > r.commitctx(c)
657 > r.commitctx(c)
658 > EOF
658 > EOF
659 $ "$PYTHON" evil-commit.py
659 $ "$PYTHON" evil-commit.py
660 #if windows
660 #if windows
661 $ hg co --clean tip
661 $ hg co --clean tip
662 abort: path contains illegal component: .h\xe2\x80\x8cg\\hgrc (esc)
662 abort: path contains illegal component: .h\xe2\x80\x8cg\\hgrc (esc)
663 [10]
663 [10]
664 #else
664 #else
665 $ hg co --clean tip
665 $ hg co --clean tip
666 abort: path contains illegal component: .h\xe2\x80\x8cg/hgrc (esc)
666 abort: path contains illegal component: .h\xe2\x80\x8cg/hgrc (esc)
667 [10]
667 [10]
668 #endif
668 #endif
669
669
670 $ hg rollback -f
670 $ hg rollback -f
671 repository tip rolled back to revision 2 (undo commit)
671 repository tip rolled back to revision 2 (undo commit)
672 $ cat > evil-commit.py <<EOF
672 $ cat > evil-commit.py <<EOF
673 > from mercurial import context, hg, ui as uimod
673 > from mercurial import context, hg, ui as uimod
674 > notrc = b"HG~1/hgrc"
674 > notrc = b"HG~1/hgrc"
675 > u = uimod.ui.load()
675 > u = uimod.ui.load()
676 > r = hg.repository(u, b'.')
676 > r = hg.repository(u, b'.')
677 > def filectxfn(repo, memctx, path):
677 > def filectxfn(repo, memctx, path):
678 > return context.memfilectx(repo, memctx, path,
678 > return context.memfilectx(repo, memctx, path,
679 > b'[hooks]\nupdate = echo owned')
679 > b'[hooks]\nupdate = echo owned')
680 > c = context.memctx(r, [r[b'tip'].node(), r.nullid],
680 > c = context.memctx(r, [r[b'tip'].node(), r.nullid],
681 > b'evil', [notrc], filectxfn, 0)
681 > b'evil', [notrc], filectxfn, 0)
682 > r.commitctx(c)
682 > r.commitctx(c)
683 > EOF
683 > EOF
684 $ "$PYTHON" evil-commit.py
684 $ "$PYTHON" evil-commit.py
685 $ hg co --clean tip
685 $ hg co --clean tip
686 abort: path contains illegal component: HG~1/hgrc
686 abort: path contains illegal component: HG~1/hgrc
687 [10]
687 [10]
688
688
689 $ hg rollback -f
689 $ hg rollback -f
690 repository tip rolled back to revision 2 (undo commit)
690 repository tip rolled back to revision 2 (undo commit)
691 $ cat > evil-commit.py <<EOF
691 $ cat > evil-commit.py <<EOF
692 > from mercurial import context, hg, ui as uimod
692 > from mercurial import context, hg, ui as uimod
693 > notrc = b"HG8B6C~2/hgrc"
693 > notrc = b"HG8B6C~2/hgrc"
694 > u = uimod.ui.load()
694 > u = uimod.ui.load()
695 > r = hg.repository(u, b'.')
695 > r = hg.repository(u, b'.')
696 > def filectxfn(repo, memctx, path):
696 > def filectxfn(repo, memctx, path):
697 > return context.memfilectx(repo, memctx, path,
697 > return context.memfilectx(repo, memctx, path,
698 > b'[hooks]\nupdate = echo owned')
698 > b'[hooks]\nupdate = echo owned')
699 > c = context.memctx(r, [r[b'tip'].node(), r.nullid],
699 > c = context.memctx(r, [r[b'tip'].node(), r.nullid],
700 > b'evil', [notrc], filectxfn, 0)
700 > b'evil', [notrc], filectxfn, 0)
701 > r.commitctx(c)
701 > r.commitctx(c)
702 > EOF
702 > EOF
703 $ "$PYTHON" evil-commit.py
703 $ "$PYTHON" evil-commit.py
704 $ hg co --clean tip
704 $ hg co --clean tip
705 abort: path contains illegal component: HG8B6C~2/hgrc
705 abort: path contains illegal component: HG8B6C~2/hgrc
706 [10]
706 [10]
707
707
708 $ cd ..
708 $ cd ..
709
709
710 # test that an unmodified commit template message aborts
710 # test that an unmodified commit template message aborts
711
711
712 $ hg init unmodified_commit_template
712 $ hg init unmodified_commit_template
713 $ cd unmodified_commit_template
713 $ cd unmodified_commit_template
714 $ echo foo > foo
714 $ echo foo > foo
715 $ hg add foo
715 $ hg add foo
716 $ hg commit -m "foo"
716 $ hg commit -m "foo"
717 $ cat >> .hg/hgrc <<EOF
717 $ cat >> .hg/hgrc <<EOF
718 > [committemplate]
718 > [committemplate]
719 > changeset.commit = HI THIS IS NOT STRIPPED
719 > changeset.commit = HI THIS IS NOT STRIPPED
720 > HG: this is customized commit template
720 > HG: this is customized commit template
721 > HG: {extramsg}
721 > HG: {extramsg}
722 > {if(activebookmark,
722 > {if(activebookmark,
723 > "HG: bookmark '{activebookmark}' is activated\n",
723 > "HG: bookmark '{activebookmark}' is activated\n",
724 > "HG: no bookmark is activated\n")}{subrepos %
724 > "HG: no bookmark is activated\n")}{subrepos %
725 > "HG: subrepo '{subrepo}' is changed\n"}
725 > "HG: subrepo '{subrepo}' is changed\n"}
726 > EOF
726 > EOF
727 $ cat > $TESTTMP/notouching.sh <<EOF
727 $ cat > $TESTTMP/notouching.sh <<EOF
728 > true
728 > true
729 > EOF
729 > EOF
730 $ echo foo2 > foo2
730 $ echo foo2 > foo2
731 $ hg add foo2
731 $ hg add foo2
732 $ HGEDITOR="sh $TESTTMP/notouching.sh" hg commit
732 $ HGEDITOR="sh $TESTTMP/notouching.sh" hg commit
733 abort: commit message unchanged
733 abort: commit message unchanged
734 [10]
734 [10]
735
735
736 $ cd ..
736 $ cd ..
737
737
738 test that text below the --- >8 --- special string is ignored
738 test that text below the --- >8 --- special string is ignored
739
739
740 $ cat <<'EOF' > $TESTTMP/lowercaseline.sh
740 $ cat <<'EOF' > $TESTTMP/lowercaseline.sh
741 > cat $1 | sed s/LINE/line/ | tee $1.new
741 > cat $1 | sed s/LINE/line/ | tee $1.new
742 > mv $1.new $1
742 > mv $1.new $1
743 > EOF
743 > EOF
744
744
745 $ hg init ignore_below_special_string
745 $ hg init ignore_below_special_string
746 $ cd ignore_below_special_string
746 $ cd ignore_below_special_string
747 $ echo foo > foo
747 $ echo foo > foo
748 $ hg add foo
748 $ hg add foo
749 $ hg commit -m "foo"
749 $ hg commit -m "foo"
750 $ cat >> .hg/hgrc <<EOF
750 $ cat >> .hg/hgrc <<EOF
751 > [committemplate]
751 > [committemplate]
752 > changeset.commit = first LINE
752 > changeset.commit = first LINE
753 > HG: this is customized commit template
753 > HG: this is customized commit template
754 > HG: {extramsg}
754 > HG: {extramsg}
755 > HG: ------------------------ >8 ------------------------
755 > HG: ------------------------ >8 ------------------------
756 > {diff()}
756 > {diff()}
757 > EOF
757 > EOF
758 $ echo foo2 > foo2
758 $ echo foo2 > foo2
759 $ hg add foo2
759 $ hg add foo2
760 $ HGEDITOR="sh $TESTTMP/notouching.sh" hg ci
760 $ HGEDITOR="sh $TESTTMP/notouching.sh" hg ci
761 abort: commit message unchanged
761 abort: commit message unchanged
762 [10]
762 [10]
763 $ HGEDITOR="sh $TESTTMP/lowercaseline.sh" hg ci
763 $ HGEDITOR="sh $TESTTMP/lowercaseline.sh" hg ci
764 first line
764 first line
765 HG: this is customized commit template
765 HG: this is customized commit template
766 HG: Leave message empty to abort commit.
766 HG: Leave message empty to abort commit.
767 HG: ------------------------ >8 ------------------------
767 HG: ------------------------ >8 ------------------------
768 diff -r e63c23eaa88a foo2
768 diff -r e63c23eaa88a foo2
769 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
769 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
770 +++ b/foo2 Thu Jan 01 00:00:00 1970 +0000
770 +++ b/foo2 Thu Jan 01 00:00:00 1970 +0000
771 @@ -0,0 +1,1 @@
771 @@ -0,0 +1,1 @@
772 +foo2
772 +foo2
773 $ hg log -T '{desc}\n' -r .
773 $ hg log -T '{desc}\n' -r .
774 first line
774 first line
775
775
776 test that the special string --- >8 --- isn't used when not at the beginning of
776 test that the special string --- >8 --- isn't used when not at the beginning of
777 a line
777 a line
778
778
779 $ cat >> .hg/hgrc <<EOF
779 $ cat >> .hg/hgrc <<EOF
780 > [committemplate]
780 > [committemplate]
781 > changeset.commit = first LINE2
781 > changeset.commit = first LINE2
782 > another line HG: ------------------------ >8 ------------------------
782 > another line HG: ------------------------ >8 ------------------------
783 > HG: this is customized commit template
783 > HG: this is customized commit template
784 > HG: {extramsg}
784 > HG: {extramsg}
785 > HG: ------------------------ >8 ------------------------
785 > HG: ------------------------ >8 ------------------------
786 > {diff()}
786 > {diff()}
787 > EOF
787 > EOF
788 $ echo foo >> foo
788 $ echo foo >> foo
789 $ HGEDITOR="sh $TESTTMP/lowercaseline.sh" hg ci
789 $ HGEDITOR="sh $TESTTMP/lowercaseline.sh" hg ci
790 first line2
790 first line2
791 another line HG: ------------------------ >8 ------------------------
791 another line HG: ------------------------ >8 ------------------------
792 HG: this is customized commit template
792 HG: this is customized commit template
793 HG: Leave message empty to abort commit.
793 HG: Leave message empty to abort commit.
794 HG: ------------------------ >8 ------------------------
794 HG: ------------------------ >8 ------------------------
795 diff -r 3661b22b0702 foo
795 diff -r 3661b22b0702 foo
796 --- a/foo Thu Jan 01 00:00:00 1970 +0000
796 --- a/foo Thu Jan 01 00:00:00 1970 +0000
797 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
797 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
798 @@ -1,1 +1,2 @@
798 @@ -1,1 +1,2 @@
799 foo
799 foo
800 +foo
800 +foo
801 $ hg log -T '{desc}\n' -r .
801 $ hg log -T '{desc}\n' -r .
802 first line2
802 first line2
803 another line HG: ------------------------ >8 ------------------------
803 another line HG: ------------------------ >8 ------------------------
804
804
805 also test that this special string isn't accepted when there is some extra text
805 also test that this special string isn't accepted when there is some extra text
806 at the end
806 at the end
807
807
808 $ cat >> .hg/hgrc <<EOF
808 $ cat >> .hg/hgrc <<EOF
809 > [committemplate]
809 > [committemplate]
810 > changeset.commit = first LINE3
810 > changeset.commit = first LINE3
811 > HG: ------------------------ >8 ------------------------foobar
811 > HG: ------------------------ >8 ------------------------foobar
812 > second line
812 > second line
813 > HG: this is customized commit template
813 > HG: this is customized commit template
814 > HG: {extramsg}
814 > HG: {extramsg}
815 > HG: ------------------------ >8 ------------------------
815 > HG: ------------------------ >8 ------------------------
816 > {diff()}
816 > {diff()}
817 > EOF
817 > EOF
818 $ echo foo >> foo
818 $ echo foo >> foo
819 $ HGEDITOR="sh $TESTTMP/lowercaseline.sh" hg ci
819 $ HGEDITOR="sh $TESTTMP/lowercaseline.sh" hg ci
820 first line3
820 first line3
821 HG: ------------------------ >8 ------------------------foobar
821 HG: ------------------------ >8 ------------------------foobar
822 second line
822 second line
823 HG: this is customized commit template
823 HG: this is customized commit template
824 HG: Leave message empty to abort commit.
824 HG: Leave message empty to abort commit.
825 HG: ------------------------ >8 ------------------------
825 HG: ------------------------ >8 ------------------------
826 diff -r ce648f5f066f foo
826 diff -r ce648f5f066f foo
827 --- a/foo Thu Jan 01 00:00:00 1970 +0000
827 --- a/foo Thu Jan 01 00:00:00 1970 +0000
828 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
828 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
829 @@ -1,2 +1,3 @@
829 @@ -1,2 +1,3 @@
830 foo
830 foo
831 foo
831 foo
832 +foo
832 +foo
833 $ hg log -T '{desc}\n' -r .
833 $ hg log -T '{desc}\n' -r .
834 first line3
834 first line3
835 second line
835 second line
836
836
837 $ cd ..
837 $ cd ..
838
838
839 testing commands.commit.post-status config option
839 testing commands.commit.post-status config option
840
840
841 $ hg init ci-post-st
841 $ hg init ci-post-st
842 $ cd ci-post-st
842 $ cd ci-post-st
843 $ echo '[commands]' > .hg/hgrc
843 $ echo '[commands]' > .hg/hgrc
844 $ echo 'commit.post-status = 1' >> .hg/hgrc
844 $ echo 'commit.post-status = 1' >> .hg/hgrc
845
845
846 $ echo 'ignored-file' > .hgignore
846 $ echo 'ignored-file' > .hgignore
847 $ hg ci -qAm 0
847 $ hg ci -qAm 0
848
848
849 $ echo 'c' > clean-file
849 $ echo 'c' > clean-file
850 $ echo 'a' > added-file
850 $ echo 'a' > added-file
851 $ echo '?' > unknown-file
851 $ echo '?' > unknown-file
852 $ echo 'i' > ignored-file
852 $ echo 'i' > ignored-file
853 $ hg add clean-file added-file
853 $ hg add clean-file added-file
854 $ hg ci -m 1 clean-file
854 $ hg ci -m 1 clean-file
855 A added-file
855 A added-file
856 ? unknown-file
856 ? unknown-file
857 $ hg st -mardu
857 $ hg st -mardu
858 A added-file
858 A added-file
859 ? unknown-file
859 ? unknown-file
860
860
861 $ touch modified-file
861 $ touch modified-file
862 $ hg add modified-file
862 $ hg add modified-file
863 $ hg ci -m 2 modified-file -q
863 $ hg ci -m 2 modified-file -q
864
864
865 $ echo 'm' > modified-file
865 $ echo 'm' > modified-file
866 $ hg ci --amend -m 'reworded' -X 're:'
866 $ hg ci --amend -m 'reworded' -X 're:'
867 saved backup bundle to $TESTTMP/ci-post-st/.hg/strip-backup/*-amend.hg (glob)
867 saved backup bundle to $TESTTMP/ci-post-st/.hg/strip-backup/*-amend.hg (glob)
868 M modified-file
868 M modified-file
869 A added-file
869 A added-file
870 ? unknown-file
870 ? unknown-file
871 $ hg st -mardu
871 $ hg st -mardu
872 M modified-file
872 M modified-file
873 A added-file
873 A added-file
874 ? unknown-file
874 ? unknown-file
875
875
876 $ cd ..
876 $ cd ..
@@ -1,3846 +1,3846 b''
1 #testcases filelog compatibility changeset sidedata upgraded upgraded-parallel pull push pull-upgrade push-upgrade
1 #testcases filelog compatibility changeset sidedata upgraded upgraded-parallel pull push pull-upgrade push-upgrade
2
2
3 =====================================================
3 =====================================================
4 Test Copy tracing for chain of copies involving merge
4 Test Copy tracing for chain of copies involving merge
5 =====================================================
5 =====================================================
6
6
7 This test files covers copies/rename case for a chains of commit where merges
7 This test files covers copies/rename case for a chains of commit where merges
8 are involved. It cheks we do not have unwanted update of behavior and that the
8 are involved. It cheks we do not have unwanted update of behavior and that the
9 different options to retrieve copies behave correctly.
9 different options to retrieve copies behave correctly.
10
10
11
11
12 Setup
12 Setup
13 =====
13 =====
14
14
15 use git diff to see rename
15 use git diff to see rename
16
16
17 $ cat << EOF >> ./no-linkrev
17 $ cat << EOF >> ./no-linkrev
18 > #!$PYTHON
18 > #!$PYTHON
19 > # filter out linkrev part of the debugindex command
19 > # filter out linkrev part of the debugindex command
20 > import sys
20 > import sys
21 > for line in sys.stdin:
21 > for line in sys.stdin:
22 > if " linkrev " in line:
22 > if " linkrev " in line:
23 > print(line.rstrip())
23 > print(line.rstrip())
24 > else:
24 > else:
25 > l = "%s *%s" % (line[:6], line[14:].rstrip())
25 > l = "%s *%s" % (line[:6], line[14:].rstrip())
26 > print(l)
26 > print(l)
27 > EOF
27 > EOF
28
28
29 $ cat << EOF >> $HGRCPATH
29 $ cat << EOF >> $HGRCPATH
30 > [diff]
30 > [diff]
31 > git=yes
31 > git=yes
32 > [command-templates]
32 > [command-templates]
33 > log={desc}\n
33 > log={desc}\n
34 > EOF
34 > EOF
35
35
36 #if compatibility
36 #if compatibility
37 $ cat >> $HGRCPATH << EOF
37 $ cat >> $HGRCPATH << EOF
38 > [experimental]
38 > [experimental]
39 > copies.read-from = compatibility
39 > copies.read-from = compatibility
40 > EOF
40 > EOF
41 #endif
41 #endif
42
42
43 #if changeset
43 #if changeset
44 $ cat >> $HGRCPATH << EOF
44 $ cat >> $HGRCPATH << EOF
45 > [experimental]
45 > [experimental]
46 > copies.read-from = changeset-only
46 > copies.read-from = changeset-only
47 > copies.write-to = changeset-only
47 > copies.write-to = changeset-only
48 > EOF
48 > EOF
49 #endif
49 #endif
50
50
51 #if sidedata
51 #if sidedata
52 $ cat >> $HGRCPATH << EOF
52 $ cat >> $HGRCPATH << EOF
53 > [format]
53 > [format]
54 > exp-use-copies-side-data-changeset = yes
54 > exp-use-copies-side-data-changeset = yes
55 > EOF
55 > EOF
56 #endif
56 #endif
57
57
58 #if pull
58 #if pull
59 $ cat >> $HGRCPATH << EOF
59 $ cat >> $HGRCPATH << EOF
60 > [format]
60 > [format]
61 > exp-use-copies-side-data-changeset = yes
61 > exp-use-copies-side-data-changeset = yes
62 > EOF
62 > EOF
63 #endif
63 #endif
64
64
65 #if push
65 #if push
66 $ cat >> $HGRCPATH << EOF
66 $ cat >> $HGRCPATH << EOF
67 > [format]
67 > [format]
68 > exp-use-copies-side-data-changeset = yes
68 > exp-use-copies-side-data-changeset = yes
69 > EOF
69 > EOF
70 #endif
70 #endif
71
71
72 #if pull-upgrade
72 #if pull-upgrade
73 $ cat >> $HGRCPATH << EOF
73 $ cat >> $HGRCPATH << EOF
74 > [format]
74 > [format]
75 > exp-use-copies-side-data-changeset = no
75 > exp-use-copies-side-data-changeset = no
76 > [experimental]
76 > [experimental]
77 > changegroup4 = yes
77 > changegroup4 = yes
78 > EOF
78 > EOF
79 #endif
79 #endif
80
80
81 #if push-upgrade
81 #if push-upgrade
82 $ cat >> $HGRCPATH << EOF
82 $ cat >> $HGRCPATH << EOF
83 > [format]
83 > [format]
84 > exp-use-copies-side-data-changeset = no
84 > exp-use-copies-side-data-changeset = no
85 > [experimental]
85 > [experimental]
86 > changegroup4 = yes
86 > changegroup4 = yes
87 > EOF
87 > EOF
88 #endif
88 #endif
89
89
90 $ cat > same-content.txt << EOF
90 $ cat > same-content.txt << EOF
91 > Here is some content that will be the same accros multiple file.
91 > Here is some content that will be the same accros multiple file.
92 >
92 >
93 > This is done on purpose so that we end up in some merge situation, were the
93 > This is done on purpose so that we end up in some merge situation, were the
94 > resulting content is the same as in the parent(s), but a new filenodes still
94 > resulting content is the same as in the parent(s), but a new filenodes still
95 > need to be created to record some file history information (especially
95 > need to be created to record some file history information (especially
96 > about copies).
96 > about copies).
97 > EOF
97 > EOF
98
98
99 $ hg init repo-chain
99 $ hg init repo-chain
100 $ cd repo-chain
100 $ cd repo-chain
101
101
102 Add some linear rename initialy
102 Add some linear rename initialy
103
103
104 $ cp ../same-content.txt a
104 $ cp ../same-content.txt a
105 $ cp ../same-content.txt b
105 $ cp ../same-content.txt b
106 $ cp ../same-content.txt h
106 $ cp ../same-content.txt h
107 $ echo "original content for P" > p
107 $ echo "original content for P" > p
108 $ echo "original content for Q" > q
108 $ echo "original content for Q" > q
109 $ echo "original content for R" > r
109 $ echo "original content for R" > r
110 $ hg ci -Am 'i-0 initial commit: a b h p q r'
110 $ hg ci -Am 'i-0 initial commit: a b h p q r'
111 adding a
111 adding a
112 adding b
112 adding b
113 adding h
113 adding h
114 adding p
114 adding p
115 adding q
115 adding q
116 adding r
116 adding r
117 $ hg mv a c
117 $ hg mv a c
118 $ hg mv p s
118 $ hg mv p s
119 $ hg ci -Am 'i-1: a -move-> c, p -move-> s'
119 $ hg ci -Am 'i-1: a -move-> c, p -move-> s'
120 $ hg mv c d
120 $ hg mv c d
121 $ hg mv s t
121 $ hg mv s t
122 $ hg ci -Am 'i-2: c -move-> d, s -move-> t'
122 $ hg ci -Am 'i-2: c -move-> d, s -move-> t'
123 $ hg log -G
123 $ hg log -G
124 @ i-2: c -move-> d, s -move-> t
124 @ i-2: c -move-> d, s -move-> t
125 |
125 |
126 o i-1: a -move-> c, p -move-> s
126 o i-1: a -move-> c, p -move-> s
127 |
127 |
128 o i-0 initial commit: a b h p q r
128 o i-0 initial commit: a b h p q r
129
129
130
130
131 And having another branch with renames on the other side
131 And having another branch with renames on the other side
132
132
133 $ hg mv d e
133 $ hg mv d e
134 $ hg ci -Am 'a-1: d -move-> e'
134 $ hg ci -Am 'a-1: d -move-> e'
135 $ hg mv e f
135 $ hg mv e f
136 $ hg ci -Am 'a-2: e -move-> f'
136 $ hg ci -Am 'a-2: e -move-> f'
137 $ hg log -G --rev '::.'
137 $ hg log -G --rev '::.'
138 @ a-2: e -move-> f
138 @ a-2: e -move-> f
139 |
139 |
140 o a-1: d -move-> e
140 o a-1: d -move-> e
141 |
141 |
142 o i-2: c -move-> d, s -move-> t
142 o i-2: c -move-> d, s -move-> t
143 |
143 |
144 o i-1: a -move-> c, p -move-> s
144 o i-1: a -move-> c, p -move-> s
145 |
145 |
146 o i-0 initial commit: a b h p q r
146 o i-0 initial commit: a b h p q r
147
147
148
148
149 Have a branching with nothing on one side
149 Have a branching with nothing on one side
150
150
151 $ hg up 'desc("i-2")'
151 $ hg up 'desc("i-2")'
152 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
152 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
153 $ echo foo > b
153 $ echo foo > b
154 $ hg ci -m 'b-1: b update'
154 $ hg ci -m 'b-1: b update'
155 created new head
155 created new head
156 $ hg log -G --rev '::.'
156 $ hg log -G --rev '::.'
157 @ b-1: b update
157 @ b-1: b update
158 |
158 |
159 o i-2: c -move-> d, s -move-> t
159 o i-2: c -move-> d, s -move-> t
160 |
160 |
161 o i-1: a -move-> c, p -move-> s
161 o i-1: a -move-> c, p -move-> s
162 |
162 |
163 o i-0 initial commit: a b h p q r
163 o i-0 initial commit: a b h p q r
164
164
165
165
166 Create a branch that delete a file previous renamed
166 Create a branch that delete a file previous renamed
167
167
168 $ hg up 'desc("i-2")'
168 $ hg up 'desc("i-2")'
169 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
169 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
170 $ hg rm d
170 $ hg rm d
171 $ hg ci -m 'c-1 delete d'
171 $ hg ci -m 'c-1 delete d'
172 created new head
172 created new head
173 $ hg log -G --rev '::.'
173 $ hg log -G --rev '::.'
174 @ c-1 delete d
174 @ c-1 delete d
175 |
175 |
176 o i-2: c -move-> d, s -move-> t
176 o i-2: c -move-> d, s -move-> t
177 |
177 |
178 o i-1: a -move-> c, p -move-> s
178 o i-1: a -move-> c, p -move-> s
179 |
179 |
180 o i-0 initial commit: a b h p q r
180 o i-0 initial commit: a b h p q r
181
181
182
182
183 Create a branch that delete a file previous renamed and recreate it
183 Create a branch that delete a file previous renamed and recreate it
184
184
185 $ hg up 'desc("i-2")'
185 $ hg up 'desc("i-2")'
186 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
186 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
187 $ hg rm d
187 $ hg rm d
188 $ hg ci -m 'd-1 delete d'
188 $ hg ci -m 'd-1 delete d'
189 created new head
189 created new head
190 $ echo bar > d
190 $ echo bar > d
191 $ hg add d
191 $ hg add d
192 $ hg ci -m 'd-2 re-add d'
192 $ hg ci -m 'd-2 re-add d'
193 $ hg log -G --rev '::.'
193 $ hg log -G --rev '::.'
194 @ d-2 re-add d
194 @ d-2 re-add d
195 |
195 |
196 o d-1 delete d
196 o d-1 delete d
197 |
197 |
198 o i-2: c -move-> d, s -move-> t
198 o i-2: c -move-> d, s -move-> t
199 |
199 |
200 o i-1: a -move-> c, p -move-> s
200 o i-1: a -move-> c, p -move-> s
201 |
201 |
202 o i-0 initial commit: a b h p q r
202 o i-0 initial commit: a b h p q r
203
203
204
204
205 Having another branch renaming a different file to the same filename as another
205 Having another branch renaming a different file to the same filename as another
206
206
207 $ hg up 'desc("i-2")'
207 $ hg up 'desc("i-2")'
208 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
208 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
209 $ hg mv b g
209 $ hg mv b g
210 $ hg ci -m 'e-1 b -move-> g'
210 $ hg ci -m 'e-1 b -move-> g'
211 created new head
211 created new head
212 $ hg mv g f
212 $ hg mv g f
213 $ hg ci -m 'e-2 g -move-> f'
213 $ hg ci -m 'e-2 g -move-> f'
214 $ hg log -G --rev '::.'
214 $ hg log -G --rev '::.'
215 @ e-2 g -move-> f
215 @ e-2 g -move-> f
216 |
216 |
217 o e-1 b -move-> g
217 o e-1 b -move-> g
218 |
218 |
219 o i-2: c -move-> d, s -move-> t
219 o i-2: c -move-> d, s -move-> t
220 |
220 |
221 o i-1: a -move-> c, p -move-> s
221 o i-1: a -move-> c, p -move-> s
222 |
222 |
223 o i-0 initial commit: a b h p q r
223 o i-0 initial commit: a b h p q r
224
224
225 $ hg up -q null
225 $ hg up -q null
226
226
227 Having a branch similar to the 'a' one, but moving the 'p' file around.
227 Having a branch similar to the 'a' one, but moving the 'p' file around.
228
228
229 $ hg up 'desc("i-2")'
229 $ hg up 'desc("i-2")'
230 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
230 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
231 $ hg mv t u
231 $ hg mv t u
232 $ hg ci -Am 'p-1: t -move-> u'
232 $ hg ci -Am 'p-1: t -move-> u'
233 created new head
233 created new head
234 $ hg mv u v
234 $ hg mv u v
235 $ hg ci -Am 'p-2: u -move-> v'
235 $ hg ci -Am 'p-2: u -move-> v'
236 $ hg log -G --rev '::.'
236 $ hg log -G --rev '::.'
237 @ p-2: u -move-> v
237 @ p-2: u -move-> v
238 |
238 |
239 o p-1: t -move-> u
239 o p-1: t -move-> u
240 |
240 |
241 o i-2: c -move-> d, s -move-> t
241 o i-2: c -move-> d, s -move-> t
242 |
242 |
243 o i-1: a -move-> c, p -move-> s
243 o i-1: a -move-> c, p -move-> s
244 |
244 |
245 o i-0 initial commit: a b h p q r
245 o i-0 initial commit: a b h p q r
246
246
247 $ hg up -q null
247 $ hg up -q null
248
248
249 Having another branch renaming a different file to the same filename as another
249 Having another branch renaming a different file to the same filename as another
250
250
251 $ hg up 'desc("i-2")'
251 $ hg up 'desc("i-2")'
252 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
252 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
253 $ hg mv r w
253 $ hg mv r w
254 $ hg ci -m 'q-1 r -move-> w'
254 $ hg ci -m 'q-1 r -move-> w'
255 created new head
255 created new head
256 $ hg mv w v
256 $ hg mv w v
257 $ hg ci -m 'q-2 w -move-> v'
257 $ hg ci -m 'q-2 w -move-> v'
258 $ hg log -G --rev '::.'
258 $ hg log -G --rev '::.'
259 @ q-2 w -move-> v
259 @ q-2 w -move-> v
260 |
260 |
261 o q-1 r -move-> w
261 o q-1 r -move-> w
262 |
262 |
263 o i-2: c -move-> d, s -move-> t
263 o i-2: c -move-> d, s -move-> t
264 |
264 |
265 o i-1: a -move-> c, p -move-> s
265 o i-1: a -move-> c, p -move-> s
266 |
266 |
267 o i-0 initial commit: a b h p q r
267 o i-0 initial commit: a b h p q r
268
268
269 $ hg up -q null
269 $ hg up -q null
270
270
271 Setup all merge
271 Setup all merge
272 ===============
272 ===============
273
273
274 This is done beforehand to validate that the upgrade process creates valid copy
274 This is done beforehand to validate that the upgrade process creates valid copy
275 information.
275 information.
276
276
277 merging with unrelated change does not interfere with the renames
277 merging with unrelated change does not interfere with the renames
278 ---------------------------------------------------------------
278 ---------------------------------------------------------------
279
279
280 - rename on one side
280 - rename on one side
281 - unrelated change on the other side
281 - unrelated change on the other side
282
282
283 $ case_desc="simple merge - A side: multiple renames, B side: unrelated update"
283 $ case_desc="simple merge - A side: multiple renames, B side: unrelated update"
284
284
285 $ hg up 'desc("b-1")'
285 $ hg up 'desc("b-1")'
286 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
286 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
287 $ hg merge 'desc("a-2")'
287 $ hg merge 'desc("a-2")'
288 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
288 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
289 (branch merge, don't forget to commit)
289 (branch merge, don't forget to commit)
290 $ hg ci -m "mBAm-0 $case_desc - one way"
290 $ hg ci -m "mBAm-0 $case_desc - one way"
291 $ hg up 'desc("a-2")'
291 $ hg up 'desc("a-2")'
292 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
292 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
293 $ hg merge 'desc("b-1")'
293 $ hg merge 'desc("b-1")'
294 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
294 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
295 (branch merge, don't forget to commit)
295 (branch merge, don't forget to commit)
296 $ hg ci -m "mABm-0 $case_desc - the other way"
296 $ hg ci -m "mABm-0 $case_desc - the other way"
297 created new head
297 created new head
298 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
298 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
299 @ mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
299 @ mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
300 |\
300 |\
301 +---o mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
301 +---o mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
302 | |/
302 | |/
303 | o b-1: b update
303 | o b-1: b update
304 | |
304 | |
305 o | a-2: e -move-> f
305 o | a-2: e -move-> f
306 | |
306 | |
307 o | a-1: d -move-> e
307 o | a-1: d -move-> e
308 |/
308 |/
309 o i-2: c -move-> d, s -move-> t
309 o i-2: c -move-> d, s -move-> t
310 |
310 |
311 o i-1: a -move-> c, p -move-> s
311 o i-1: a -move-> c, p -move-> s
312 |
312 |
313 o i-0 initial commit: a b h p q r
313 o i-0 initial commit: a b h p q r
314
314
315
315
316
316
317 merging with the side having a delete
317 merging with the side having a delete
318 -------------------------------------
318 -------------------------------------
319
319
320 case summary:
320 case summary:
321 - one with change to an unrelated file
321 - one with change to an unrelated file
322 - one deleting the change
322 - one deleting the change
323 and recreate an unrelated file after the merge
323 and recreate an unrelated file after the merge
324
324
325 $ case_desc="simple merge - C side: delete a file with copies history , B side: unrelated update"
325 $ case_desc="simple merge - C side: delete a file with copies history , B side: unrelated update"
326
326
327 $ hg up 'desc("b-1")'
327 $ hg up 'desc("b-1")'
328 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
328 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
329 $ hg merge 'desc("c-1")'
329 $ hg merge 'desc("c-1")'
330 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
330 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
331 (branch merge, don't forget to commit)
331 (branch merge, don't forget to commit)
332 $ hg ci -m "mBCm-0 $case_desc - one way"
332 $ hg ci -m "mBCm-0 $case_desc - one way"
333 $ echo bar > d
333 $ echo bar > d
334 $ hg add d
334 $ hg add d
335 $ hg ci -m 'mBCm-1 re-add d'
335 $ hg ci -m 'mBCm-1 re-add d'
336 $ hg up 'desc("c-1")'
336 $ hg up 'desc("c-1")'
337 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
337 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
338 $ hg merge 'desc("b-1")'
338 $ hg merge 'desc("b-1")'
339 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
339 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
340 (branch merge, don't forget to commit)
340 (branch merge, don't forget to commit)
341 $ hg ci -m "mCBm-0 $case_desc - the other way"
341 $ hg ci -m "mCBm-0 $case_desc - the other way"
342 created new head
342 created new head
343 $ echo bar > d
343 $ echo bar > d
344 $ hg add d
344 $ hg add d
345 $ hg ci -m 'mCBm-1 re-add d'
345 $ hg ci -m 'mCBm-1 re-add d'
346 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
346 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
347 @ mCBm-1 re-add d
347 @ mCBm-1 re-add d
348 |
348 |
349 o mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
349 o mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
350 |\
350 |\
351 | | o mBCm-1 re-add d
351 | | o mBCm-1 re-add d
352 | | |
352 | | |
353 +---o mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
353 +---o mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
354 | |/
354 | |/
355 | o c-1 delete d
355 | o c-1 delete d
356 | |
356 | |
357 o | b-1: b update
357 o | b-1: b update
358 |/
358 |/
359 o i-2: c -move-> d, s -move-> t
359 o i-2: c -move-> d, s -move-> t
360 |
360 |
361 o i-1: a -move-> c, p -move-> s
361 o i-1: a -move-> c, p -move-> s
362 |
362 |
363 o i-0 initial commit: a b h p q r
363 o i-0 initial commit: a b h p q r
364
364
365
365
366 Comparing with a merge re-adding the file afterward
366 Comparing with a merge re-adding the file afterward
367 ---------------------------------------------------
367 ---------------------------------------------------
368
368
369 Merge:
369 Merge:
370 - one with change to an unrelated file
370 - one with change to an unrelated file
371 - one deleting and recreating the change
371 - one deleting and recreating the change
372
372
373 $ case_desc="simple merge - B side: unrelated update, D side: delete and recreate a file (with different content)"
373 $ case_desc="simple merge - B side: unrelated update, D side: delete and recreate a file (with different content)"
374
374
375 $ hg up 'desc("b-1")'
375 $ hg up 'desc("b-1")'
376 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
376 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
377 $ hg merge 'desc("d-2")'
377 $ hg merge 'desc("d-2")'
378 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
378 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
379 (branch merge, don't forget to commit)
379 (branch merge, don't forget to commit)
380 $ hg ci -m "mBDm-0 $case_desc - one way"
380 $ hg ci -m "mBDm-0 $case_desc - one way"
381 $ hg up 'desc("d-2")'
381 $ hg up 'desc("d-2")'
382 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
382 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
383 $ hg merge 'desc("b-1")'
383 $ hg merge 'desc("b-1")'
384 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
384 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
385 (branch merge, don't forget to commit)
385 (branch merge, don't forget to commit)
386 $ hg ci -m "mDBm-0 $case_desc - the other way"
386 $ hg ci -m "mDBm-0 $case_desc - the other way"
387 created new head
387 created new head
388 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
388 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
389 @ mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
389 @ mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
390 |\
390 |\
391 +---o mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
391 +---o mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
392 | |/
392 | |/
393 | o d-2 re-add d
393 | o d-2 re-add d
394 | |
394 | |
395 | o d-1 delete d
395 | o d-1 delete d
396 | |
396 | |
397 o | b-1: b update
397 o | b-1: b update
398 |/
398 |/
399 o i-2: c -move-> d, s -move-> t
399 o i-2: c -move-> d, s -move-> t
400 |
400 |
401 o i-1: a -move-> c, p -move-> s
401 o i-1: a -move-> c, p -move-> s
402 |
402 |
403 o i-0 initial commit: a b h p q r
403 o i-0 initial commit: a b h p q r
404
404
405
405
406
406
407 Comparing with a merge with colliding rename
407 Comparing with a merge with colliding rename
408 --------------------------------------------
408 --------------------------------------------
409
409
410 Subcase: new copy information on both side
410 Subcase: new copy information on both side
411 ``````````````````````````````````````````
411 ``````````````````````````````````````````
412
412
413 - the "e-" branch renaming b to f (through 'g')
413 - the "e-" branch renaming b to f (through 'g')
414 - the "a-" branch renaming d to f (through e)
414 - the "a-" branch renaming d to f (through e)
415
415
416 $ case_desc="merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f)"
416 $ case_desc="merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f)"
417
417
418 $ hg up 'desc("a-2")'
418 $ hg up 'desc("a-2")'
419 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
419 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
420 $ hg merge 'desc("e-2")'
420 $ hg merge 'desc("e-2")'
421 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
421 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
422 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
422 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
423 (branch merge, don't forget to commit)
423 (branch merge, don't forget to commit)
424 $ hg ci -m "mAEm-0 $case_desc - one way"
424 $ hg ci -m "mAEm-0 $case_desc - one way"
425 $ hg up 'desc("e-2")'
425 $ hg up 'desc("e-2")'
426 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
426 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
427 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
427 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
428 $ hg merge 'desc("a-2")'
428 $ hg merge 'desc("a-2")'
429 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
429 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
430 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
430 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
431 (branch merge, don't forget to commit)
431 (branch merge, don't forget to commit)
432 $ hg ci -m "mEAm-0 $case_desc - the other way"
432 $ hg ci -m "mEAm-0 $case_desc - the other way"
433 created new head
433 created new head
434 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
434 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
435 @ mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
435 @ mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
436 |\
436 |\
437 +---o mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
437 +---o mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
438 | |/
438 | |/
439 | o e-2 g -move-> f
439 | o e-2 g -move-> f
440 | |
440 | |
441 | o e-1 b -move-> g
441 | o e-1 b -move-> g
442 | |
442 | |
443 o | a-2: e -move-> f
443 o | a-2: e -move-> f
444 | |
444 | |
445 o | a-1: d -move-> e
445 o | a-1: d -move-> e
446 |/
446 |/
447 o i-2: c -move-> d, s -move-> t
447 o i-2: c -move-> d, s -move-> t
448 |
448 |
449 o i-1: a -move-> c, p -move-> s
449 o i-1: a -move-> c, p -move-> s
450 |
450 |
451 o i-0 initial commit: a b h p q r
451 o i-0 initial commit: a b h p q r
452
452
453
453
454 Subcase: new copy information on both side with an actual merge happening
454 Subcase: new copy information on both side with an actual merge happening
455 `````````````````````````````````````````````````````````````````````````
455 `````````````````````````````````````````````````````````````````````````
456
456
457 - the "p-" branch renaming 't' to 'v' (through 'u')
457 - the "p-" branch renaming 't' to 'v' (through 'u')
458 - the "q-" branch renaming 'r' to 'v' (through 'w')
458 - the "q-" branch renaming 'r' to 'v' (through 'w')
459
459
460 $ case_desc="merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content)"
460 $ case_desc="merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content)"
461
461
462 $ hg up 'desc("p-2")'
462 $ hg up 'desc("p-2")'
463 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
463 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
464 $ hg merge 'desc("q-2")' --tool ':union'
464 $ hg merge 'desc("q-2")' --tool ':union'
465 merging v
465 merging v
466 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
466 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
467 (branch merge, don't forget to commit)
467 (branch merge, don't forget to commit)
468 $ hg ci -m "mPQm-0 $case_desc - one way"
468 $ hg ci -m "mPQm-0 $case_desc - one way"
469 $ hg up 'desc("q-2")'
469 $ hg up 'desc("q-2")'
470 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
470 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
471 $ hg merge 'desc("p-2")' --tool ':union'
471 $ hg merge 'desc("p-2")' --tool ':union'
472 merging v
472 merging v
473 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
473 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
474 (branch merge, don't forget to commit)
474 (branch merge, don't forget to commit)
475 $ hg ci -m "mQPm-0 $case_desc - the other way"
475 $ hg ci -m "mQPm-0 $case_desc - the other way"
476 created new head
476 created new head
477 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
477 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
478 o mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
478 o mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
479 |\
479 |\
480 +---o mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
480 +---o mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
481 | |/
481 | |/
482 | o e-2 g -move-> f
482 | o e-2 g -move-> f
483 | |
483 | |
484 | o e-1 b -move-> g
484 | o e-1 b -move-> g
485 | |
485 | |
486 o | a-2: e -move-> f
486 o | a-2: e -move-> f
487 | |
487 | |
488 o | a-1: d -move-> e
488 o | a-1: d -move-> e
489 |/
489 |/
490 o i-2: c -move-> d, s -move-> t
490 o i-2: c -move-> d, s -move-> t
491 |
491 |
492 o i-1: a -move-> c, p -move-> s
492 o i-1: a -move-> c, p -move-> s
493 |
493 |
494 o i-0 initial commit: a b h p q r
494 o i-0 initial commit: a b h p q r
495
495
496
496
497 Subcase: existing copy information overwritten on one branch
497 Subcase: existing copy information overwritten on one branch
498 ````````````````````````````````````````````````````````````
498 ````````````````````````````````````````````````````````````
499
499
500 Merge:
500 Merge:
501 - one with change to an unrelated file (b)
501 - one with change to an unrelated file (b)
502 - one overwriting a file (d) with a rename (from h to i to d)
502 - one overwriting a file (d) with a rename (from h to i to d)
503
503
504 $ case_desc="simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d)"
504 $ case_desc="simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d)"
505
505
506 $ hg up 'desc("i-2")'
506 $ hg up 'desc("i-2")'
507 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
507 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
508 $ hg mv h i
508 $ hg mv h i
509 $ hg commit -m "f-1: rename h -> i"
509 $ hg commit -m "f-1: rename h -> i"
510 created new head
510 created new head
511 $ hg mv --force i d
511 $ hg mv --force i d
512 $ hg commit -m "f-2: rename i -> d"
512 $ hg commit -m "f-2: rename i -> d"
513 $ hg debugindex d | "$PYTHON" ../no-linkrev
513 $ hg debugindex d | "$PYTHON" ../no-linkrev
514 rev linkrev nodeid p1 p2
514 rev linkrev nodeid p1-nodeid p2-nodeid
515 0 * d8252ab2e760 000000000000 000000000000 (no-changeset !)
515 0 * d8252ab2e760 000000000000 000000000000 (no-changeset !)
516 0 * ae258f702dfe 000000000000 000000000000 (changeset !)
516 0 * ae258f702dfe 000000000000 000000000000 (changeset !)
517 1 * b004912a8510 000000000000 000000000000
517 1 * b004912a8510 000000000000 000000000000
518 2 * 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
518 2 * 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
519 $ hg up 'desc("b-1")'
519 $ hg up 'desc("b-1")'
520 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
520 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
521 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
521 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
522 $ hg merge 'desc("f-2")'
522 $ hg merge 'desc("f-2")'
523 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
523 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
524 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
524 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
525 (branch merge, don't forget to commit)
525 (branch merge, don't forget to commit)
526 $ hg ci -m "mBFm-0 $case_desc - one way"
526 $ hg ci -m "mBFm-0 $case_desc - one way"
527 $ hg up 'desc("f-2")'
527 $ hg up 'desc("f-2")'
528 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
528 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
529 $ hg merge 'desc("b-1")'
529 $ hg merge 'desc("b-1")'
530 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
530 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
531 (branch merge, don't forget to commit)
531 (branch merge, don't forget to commit)
532 $ hg ci -m "mFBm-0 $case_desc - the other way"
532 $ hg ci -m "mFBm-0 $case_desc - the other way"
533 created new head
533 created new head
534 $ hg up null --quiet
534 $ hg up null --quiet
535 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
535 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
536 o mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
536 o mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
537 |\
537 |\
538 +---o mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
538 +---o mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
539 | |/
539 | |/
540 | o f-2: rename i -> d
540 | o f-2: rename i -> d
541 | |
541 | |
542 | o f-1: rename h -> i
542 | o f-1: rename h -> i
543 | |
543 | |
544 o | b-1: b update
544 o | b-1: b update
545 |/
545 |/
546 o i-2: c -move-> d, s -move-> t
546 o i-2: c -move-> d, s -move-> t
547 |
547 |
548 o i-1: a -move-> c, p -move-> s
548 o i-1: a -move-> c, p -move-> s
549 |
549 |
550 o i-0 initial commit: a b h p q r
550 o i-0 initial commit: a b h p q r
551
551
552
552
553 Subcase: existing copy information overwritten on one branch, with different content)
553 Subcase: existing copy information overwritten on one branch, with different content)
554 `````````````````````````````````````````````````````````````````````````````````````
554 `````````````````````````````````````````````````````````````````````````````````````
555
555
556 Merge:
556 Merge:
557 - one with change to an unrelated file (b)
557 - one with change to an unrelated file (b)
558 - one overwriting a file (t) with a rename (from r to x to t), v content is not the same as on the other branch
558 - one overwriting a file (t) with a rename (from r to x to t), v content is not the same as on the other branch
559
559
560 $ case_desc="simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content"
560 $ case_desc="simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content"
561
561
562 $ hg up 'desc("i-2")'
562 $ hg up 'desc("i-2")'
563 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
563 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
564 $ hg mv r x
564 $ hg mv r x
565 $ hg commit -m "r-1: rename r -> x"
565 $ hg commit -m "r-1: rename r -> x"
566 created new head
566 created new head
567 $ hg mv --force x t
567 $ hg mv --force x t
568 $ hg commit -m "r-2: rename t -> x"
568 $ hg commit -m "r-2: rename t -> x"
569 $ hg debugindex t | "$PYTHON" ../no-linkrev
569 $ hg debugindex t | "$PYTHON" ../no-linkrev
570 rev linkrev nodeid p1 p2
570 rev linkrev nodeid p1-nodeid p2-nodeid
571 0 * d74efbf65309 000000000000 000000000000 (no-changeset !)
571 0 * d74efbf65309 000000000000 000000000000 (no-changeset !)
572 1 * 02a930b9d7ad 000000000000 000000000000 (no-changeset !)
572 1 * 02a930b9d7ad 000000000000 000000000000 (no-changeset !)
573 0 * 5aed6a8dbff0 000000000000 000000000000 (changeset !)
573 0 * 5aed6a8dbff0 000000000000 000000000000 (changeset !)
574 1 * a38b2fa17021 000000000000 000000000000 (changeset !)
574 1 * a38b2fa17021 000000000000 000000000000 (changeset !)
575 $ hg up 'desc("b-1")'
575 $ hg up 'desc("b-1")'
576 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
576 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
577 $ hg merge 'desc("r-2")'
577 $ hg merge 'desc("r-2")'
578 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
578 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
579 (branch merge, don't forget to commit)
579 (branch merge, don't forget to commit)
580 $ hg ci -m "mBRm-0 $case_desc - one way"
580 $ hg ci -m "mBRm-0 $case_desc - one way"
581 $ hg up 'desc("r-2")'
581 $ hg up 'desc("r-2")'
582 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
582 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
583 $ hg merge 'desc("b-1")'
583 $ hg merge 'desc("b-1")'
584 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
584 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
585 (branch merge, don't forget to commit)
585 (branch merge, don't forget to commit)
586 $ hg ci -m "mRBm-0 $case_desc - the other way"
586 $ hg ci -m "mRBm-0 $case_desc - the other way"
587 created new head
587 created new head
588 $ hg up null --quiet
588 $ hg up null --quiet
589 $ hg log -G --rev '::(desc("mBRm")+desc("mRBm"))'
589 $ hg log -G --rev '::(desc("mBRm")+desc("mRBm"))'
590 o mRBm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - the other way
590 o mRBm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - the other way
591 |\
591 |\
592 +---o mBRm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - one way
592 +---o mBRm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - one way
593 | |/
593 | |/
594 | o r-2: rename t -> x
594 | o r-2: rename t -> x
595 | |
595 | |
596 | o r-1: rename r -> x
596 | o r-1: rename r -> x
597 | |
597 | |
598 o | b-1: b update
598 o | b-1: b update
599 |/
599 |/
600 o i-2: c -move-> d, s -move-> t
600 o i-2: c -move-> d, s -move-> t
601 |
601 |
602 o i-1: a -move-> c, p -move-> s
602 o i-1: a -move-> c, p -move-> s
603 |
603 |
604 o i-0 initial commit: a b h p q r
604 o i-0 initial commit: a b h p q r
605
605
606
606
607
607
608 Subcase: reset of the copy history on one side
608 Subcase: reset of the copy history on one side
609 ``````````````````````````````````````````````
609 ``````````````````````````````````````````````
610
610
611 Merge:
611 Merge:
612 - one with change to a file
612 - one with change to a file
613 - one deleting and recreating the file
613 - one deleting and recreating the file
614
614
615 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
615 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
616 consider history and rename on both branch of the merge.
616 consider history and rename on both branch of the merge.
617
617
618 $ case_desc="actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content"
618 $ case_desc="actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content"
619
619
620 $ hg up 'desc("i-2")'
620 $ hg up 'desc("i-2")'
621 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
621 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
622 $ echo "some update" >> d
622 $ echo "some update" >> d
623 $ hg commit -m "g-1: update d"
623 $ hg commit -m "g-1: update d"
624 created new head
624 created new head
625 $ hg up 'desc("d-2")'
625 $ hg up 'desc("d-2")'
626 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
626 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
627 $ hg merge 'desc("g-1")' --tool :union
627 $ hg merge 'desc("g-1")' --tool :union
628 merging d
628 merging d
629 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
629 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
630 (branch merge, don't forget to commit)
630 (branch merge, don't forget to commit)
631 $ hg ci -m "mDGm-0 $case_desc - one way"
631 $ hg ci -m "mDGm-0 $case_desc - one way"
632 $ hg up 'desc("g-1")'
632 $ hg up 'desc("g-1")'
633 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
633 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
634 $ hg merge 'desc("d-2")' --tool :union
634 $ hg merge 'desc("d-2")' --tool :union
635 merging d
635 merging d
636 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
636 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
637 (branch merge, don't forget to commit)
637 (branch merge, don't forget to commit)
638 $ hg ci -m "mGDm-0 $case_desc - the other way"
638 $ hg ci -m "mGDm-0 $case_desc - the other way"
639 created new head
639 created new head
640 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
640 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
641 @ mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
641 @ mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
642 |\
642 |\
643 +---o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
643 +---o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
644 | |/
644 | |/
645 | o g-1: update d
645 | o g-1: update d
646 | |
646 | |
647 o | d-2 re-add d
647 o | d-2 re-add d
648 | |
648 | |
649 o | d-1 delete d
649 o | d-1 delete d
650 |/
650 |/
651 o i-2: c -move-> d, s -move-> t
651 o i-2: c -move-> d, s -move-> t
652 |
652 |
653 o i-1: a -move-> c, p -move-> s
653 o i-1: a -move-> c, p -move-> s
654 |
654 |
655 o i-0 initial commit: a b h p q r
655 o i-0 initial commit: a b h p q r
656
656
657
657
658 Subcase: merging a change to a file with a "copy overwrite" to that file from another branch
658 Subcase: merging a change to a file with a "copy overwrite" to that file from another branch
659 ````````````````````````````````````````````````````````````````````````````````````````````
659 ````````````````````````````````````````````````````````````````````````````````````````````
660
660
661 Merge:
661 Merge:
662 - one with change to a file (d)
662 - one with change to a file (d)
663 - one overwriting that file with a rename (from h to i, to d)
663 - one overwriting that file with a rename (from h to i, to d)
664
664
665 This case is similar to BF/FB, but an actual merge happens, so both side of the
665 This case is similar to BF/FB, but an actual merge happens, so both side of the
666 history are relevant.
666 history are relevant.
667
667
668 Note:
668 Note:
669 | In this case, the merge get conflicting information since on one side we have
669 | In this case, the merge get conflicting information since on one side we have
670 | "a -> c -> d". and one the other one we have "h -> i -> d".
670 | "a -> c -> d". and one the other one we have "h -> i -> d".
671 |
671 |
672 | The current code arbitrarily pick one side
672 | The current code arbitrarily pick one side
673
673
674 $ case_desc="merge - G side: content change, F side: copy overwrite, no content change"
674 $ case_desc="merge - G side: content change, F side: copy overwrite, no content change"
675
675
676 $ hg up 'desc("f-2")'
676 $ hg up 'desc("f-2")'
677 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
677 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
678 $ hg merge 'desc("g-1")' --tool :union
678 $ hg merge 'desc("g-1")' --tool :union
679 merging d (no-changeset !)
679 merging d (no-changeset !)
680 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (no-changeset !)
680 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (no-changeset !)
681 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
681 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
682 (branch merge, don't forget to commit)
682 (branch merge, don't forget to commit)
683 $ hg ci -m "mFGm-0 $case_desc - one way"
683 $ hg ci -m "mFGm-0 $case_desc - one way"
684 created new head
684 created new head
685 $ hg up 'desc("g-1")'
685 $ hg up 'desc("g-1")'
686 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
686 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
687 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
687 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
688 $ hg merge 'desc("f-2")' --tool :union
688 $ hg merge 'desc("f-2")' --tool :union
689 merging d (no-changeset !)
689 merging d (no-changeset !)
690 0 files updated, 1 files merged, 1 files removed, 0 files unresolved (no-changeset !)
690 0 files updated, 1 files merged, 1 files removed, 0 files unresolved (no-changeset !)
691 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
691 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
692 (branch merge, don't forget to commit)
692 (branch merge, don't forget to commit)
693 $ hg ci -m "mGFm-0 $case_desc - the other way"
693 $ hg ci -m "mGFm-0 $case_desc - the other way"
694 created new head
694 created new head
695 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
695 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
696 @ mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
696 @ mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
697 |\
697 |\
698 +---o mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
698 +---o mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
699 | |/
699 | |/
700 | o g-1: update d
700 | o g-1: update d
701 | |
701 | |
702 o | f-2: rename i -> d
702 o | f-2: rename i -> d
703 | |
703 | |
704 o | f-1: rename h -> i
704 o | f-1: rename h -> i
705 |/
705 |/
706 o i-2: c -move-> d, s -move-> t
706 o i-2: c -move-> d, s -move-> t
707 |
707 |
708 o i-1: a -move-> c, p -move-> s
708 o i-1: a -move-> c, p -move-> s
709 |
709 |
710 o i-0 initial commit: a b h p q r
710 o i-0 initial commit: a b h p q r
711
711
712
712
713
713
714 Comparing with merging with a deletion (and keeping the file)
714 Comparing with merging with a deletion (and keeping the file)
715 -------------------------------------------------------------
715 -------------------------------------------------------------
716
716
717 Merge:
717 Merge:
718 - one removing a file (d)
718 - one removing a file (d)
719 - one updating that file
719 - one updating that file
720 - the merge keep the modified version of the file (canceling the delete)
720 - the merge keep the modified version of the file (canceling the delete)
721
721
722 In this case, the file keep on living after the merge. So we should not drop its
722 In this case, the file keep on living after the merge. So we should not drop its
723 copy tracing chain.
723 copy tracing chain.
724
724
725 $ case_desc="merge updated/deleted - revive the file (updated content)"
725 $ case_desc="merge updated/deleted - revive the file (updated content)"
726
726
727 $ hg up 'desc("c-1")'
727 $ hg up 'desc("c-1")'
728 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
728 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
729 $ hg merge 'desc("g-1")'
729 $ hg merge 'desc("g-1")'
730 file 'd' was deleted in local [working copy] but was modified in other [merge rev].
730 file 'd' was deleted in local [working copy] but was modified in other [merge rev].
731 You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.
731 You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.
732 What do you want to do? u
732 What do you want to do? u
733 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
733 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
734 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
734 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
735 [1]
735 [1]
736 $ hg resolve -t :other d
736 $ hg resolve -t :other d
737 (no more unresolved files)
737 (no more unresolved files)
738 $ hg ci -m "mCGm-0 $case_desc - one way"
738 $ hg ci -m "mCGm-0 $case_desc - one way"
739 created new head
739 created new head
740
740
741 $ hg up 'desc("g-1")'
741 $ hg up 'desc("g-1")'
742 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
742 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
743 $ hg merge 'desc("c-1")'
743 $ hg merge 'desc("c-1")'
744 file 'd' was deleted in other [merge rev] but was modified in local [working copy].
744 file 'd' was deleted in other [merge rev] but was modified in local [working copy].
745 You can use (c)hanged version, (d)elete, or leave (u)nresolved.
745 You can use (c)hanged version, (d)elete, or leave (u)nresolved.
746 What do you want to do? u
746 What do you want to do? u
747 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
747 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
748 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
748 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
749 [1]
749 [1]
750 $ hg resolve -t :local d
750 $ hg resolve -t :local d
751 (no more unresolved files)
751 (no more unresolved files)
752 $ hg ci -m "mGCm-0 $case_desc - the other way"
752 $ hg ci -m "mGCm-0 $case_desc - the other way"
753 created new head
753 created new head
754
754
755 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
755 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
756 @ mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
756 @ mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
757 |\
757 |\
758 +---o mCGm-0 merge updated/deleted - revive the file (updated content) - one way
758 +---o mCGm-0 merge updated/deleted - revive the file (updated content) - one way
759 | |/
759 | |/
760 | o g-1: update d
760 | o g-1: update d
761 | |
761 | |
762 o | c-1 delete d
762 o | c-1 delete d
763 |/
763 |/
764 o i-2: c -move-> d, s -move-> t
764 o i-2: c -move-> d, s -move-> t
765 |
765 |
766 o i-1: a -move-> c, p -move-> s
766 o i-1: a -move-> c, p -move-> s
767 |
767 |
768 o i-0 initial commit: a b h p q r
768 o i-0 initial commit: a b h p q r
769
769
770
770
771
771
772
772
773 Comparing with merge restoring an untouched deleted file
773 Comparing with merge restoring an untouched deleted file
774 --------------------------------------------------------
774 --------------------------------------------------------
775
775
776 Merge:
776 Merge:
777 - one removing a file (d)
777 - one removing a file (d)
778 - one leaving the file untouched
778 - one leaving the file untouched
779 - the merge actively restore the file to the same content.
779 - the merge actively restore the file to the same content.
780
780
781 In this case, the file keep on living after the merge. So we should not drop its
781 In this case, the file keep on living after the merge. So we should not drop its
782 copy tracing chain.
782 copy tracing chain.
783
783
784 $ case_desc="merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge)"
784 $ case_desc="merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge)"
785
785
786 $ hg up 'desc("c-1")'
786 $ hg up 'desc("c-1")'
787 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
787 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
788 $ hg merge 'desc("b-1")'
788 $ hg merge 'desc("b-1")'
789 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
789 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
790 (branch merge, don't forget to commit)
790 (branch merge, don't forget to commit)
791 $ hg revert --rev 'desc("b-1")' d
791 $ hg revert --rev 'desc("b-1")' d
792 $ hg ci -m "mCB-revert-m-0 $case_desc - one way"
792 $ hg ci -m "mCB-revert-m-0 $case_desc - one way"
793 created new head
793 created new head
794
794
795 $ hg up 'desc("b-1")'
795 $ hg up 'desc("b-1")'
796 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
796 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
797 $ hg merge 'desc("c-1")'
797 $ hg merge 'desc("c-1")'
798 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
798 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
799 (branch merge, don't forget to commit)
799 (branch merge, don't forget to commit)
800 $ hg revert --rev 'desc("b-1")' d
800 $ hg revert --rev 'desc("b-1")' d
801 $ hg ci -m "mBC-revert-m-0 $case_desc - the other way"
801 $ hg ci -m "mBC-revert-m-0 $case_desc - the other way"
802 created new head
802 created new head
803
803
804 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
804 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
805 @ mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
805 @ mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
806 |\
806 |\
807 +---o mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
807 +---o mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
808 | |/
808 | |/
809 | o c-1 delete d
809 | o c-1 delete d
810 | |
810 | |
811 o | b-1: b update
811 o | b-1: b update
812 |/
812 |/
813 o i-2: c -move-> d, s -move-> t
813 o i-2: c -move-> d, s -move-> t
814 |
814 |
815 o i-1: a -move-> c, p -move-> s
815 o i-1: a -move-> c, p -move-> s
816 |
816 |
817 o i-0 initial commit: a b h p q r
817 o i-0 initial commit: a b h p q r
818
818
819
819
820
820
821 $ hg up null --quiet
821 $ hg up null --quiet
822
822
823 Merging a branch where a rename was deleted with a branch where the same file was renamed
823 Merging a branch where a rename was deleted with a branch where the same file was renamed
824 ------------------------------------------------------------------------------------------
824 ------------------------------------------------------------------------------------------
825
825
826 Create a "conflicting" merge where `d` get removed on one branch before its
826 Create a "conflicting" merge where `d` get removed on one branch before its
827 rename information actually conflict with the other branch.
827 rename information actually conflict with the other branch.
828
828
829 (the copy information from the branch that was not deleted should win).
829 (the copy information from the branch that was not deleted should win).
830
830
831 $ case_desc="simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch)"
831 $ case_desc="simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch)"
832
832
833 $ hg up 'desc("i-0")'
833 $ hg up 'desc("i-0")'
834 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
834 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
835 $ hg mv b d
835 $ hg mv b d
836 $ hg ci -m "h-1: b -(move)-> d"
836 $ hg ci -m "h-1: b -(move)-> d"
837 created new head
837 created new head
838
838
839 $ hg up 'desc("c-1")'
839 $ hg up 'desc("c-1")'
840 2 files updated, 0 files merged, 3 files removed, 0 files unresolved
840 2 files updated, 0 files merged, 3 files removed, 0 files unresolved
841 $ hg merge 'desc("h-1")'
841 $ hg merge 'desc("h-1")'
842 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
842 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
843 (branch merge, don't forget to commit)
843 (branch merge, don't forget to commit)
844 $ hg ci -m "mCH-delete-before-conflict-m-0 $case_desc - one way"
844 $ hg ci -m "mCH-delete-before-conflict-m-0 $case_desc - one way"
845
845
846 $ hg up 'desc("h-1")'
846 $ hg up 'desc("h-1")'
847 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
847 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
848 $ hg merge 'desc("c-1")'
848 $ hg merge 'desc("c-1")'
849 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
849 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
850 (branch merge, don't forget to commit)
850 (branch merge, don't forget to commit)
851 $ hg ci -m "mHC-delete-before-conflict-m-0 $case_desc - the other way"
851 $ hg ci -m "mHC-delete-before-conflict-m-0 $case_desc - the other way"
852 created new head
852 created new head
853 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
853 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
854 @ mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
854 @ mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
855 |\
855 |\
856 +---o mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
856 +---o mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
857 | |/
857 | |/
858 | o h-1: b -(move)-> d
858 | o h-1: b -(move)-> d
859 | |
859 | |
860 o | c-1 delete d
860 o | c-1 delete d
861 | |
861 | |
862 o | i-2: c -move-> d, s -move-> t
862 o | i-2: c -move-> d, s -move-> t
863 | |
863 | |
864 o | i-1: a -move-> c, p -move-> s
864 o | i-1: a -move-> c, p -move-> s
865 |/
865 |/
866 o i-0 initial commit: a b h p q r
866 o i-0 initial commit: a b h p q r
867
867
868
868
869 Variant of previous with extra changes introduced by the merge
869 Variant of previous with extra changes introduced by the merge
870 --------------------------------------------------------------
870 --------------------------------------------------------------
871
871
872 Multiple cases above explicitely test cases where content are the same on both side during merge. In this section we will introduce variants for theses cases where new change are introduced to these file content during the merges.
872 Multiple cases above explicitely test cases where content are the same on both side during merge. In this section we will introduce variants for theses cases where new change are introduced to these file content during the merges.
873
873
874
874
875 Subcase: merge has same initial content on both side, but merge introduced a change
875 Subcase: merge has same initial content on both side, but merge introduced a change
876 ```````````````````````````````````````````````````````````````````````````````````
876 ```````````````````````````````````````````````````````````````````````````````````
877
877
878 Same as `mAEm` and `mEAm` but with extra change to the file before commiting
878 Same as `mAEm` and `mEAm` but with extra change to the file before commiting
879
879
880 - the "e-" branch renaming b to f (through 'g')
880 - the "e-" branch renaming b to f (through 'g')
881 - the "a-" branch renaming d to f (through e)
881 - the "a-" branch renaming d to f (through e)
882
882
883 $ case_desc="merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent)"
883 $ case_desc="merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent)"
884
884
885 $ hg up 'desc("a-2")'
885 $ hg up 'desc("a-2")'
886 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
886 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
887 $ hg merge 'desc("e-2")'
887 $ hg merge 'desc("e-2")'
888 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
888 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
889 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
889 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
890 (branch merge, don't forget to commit)
890 (branch merge, don't forget to commit)
891 $ echo "content change for mAE-change-m" > f
891 $ echo "content change for mAE-change-m" > f
892 $ hg ci -m "mAE-change-m-0 $case_desc - one way"
892 $ hg ci -m "mAE-change-m-0 $case_desc - one way"
893 created new head
893 created new head
894 $ hg up 'desc("e-2")'
894 $ hg up 'desc("e-2")'
895 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
895 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
896 $ hg merge 'desc("a-2")'
896 $ hg merge 'desc("a-2")'
897 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
897 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
898 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
898 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
899 (branch merge, don't forget to commit)
899 (branch merge, don't forget to commit)
900 $ echo "content change for mEA-change-m" > f
900 $ echo "content change for mEA-change-m" > f
901 $ hg ci -m "mEA-change-m-0 $case_desc - the other way"
901 $ hg ci -m "mEA-change-m-0 $case_desc - the other way"
902 created new head
902 created new head
903 $ hg log -G --rev '::(desc("mAE-change-m")+desc("mEA-change-m"))'
903 $ hg log -G --rev '::(desc("mAE-change-m")+desc("mEA-change-m"))'
904 @ mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
904 @ mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
905 |\
905 |\
906 +---o mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
906 +---o mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
907 | |/
907 | |/
908 | o e-2 g -move-> f
908 | o e-2 g -move-> f
909 | |
909 | |
910 | o e-1 b -move-> g
910 | o e-1 b -move-> g
911 | |
911 | |
912 o | a-2: e -move-> f
912 o | a-2: e -move-> f
913 | |
913 | |
914 o | a-1: d -move-> e
914 o | a-1: d -move-> e
915 |/
915 |/
916 o i-2: c -move-> d, s -move-> t
916 o i-2: c -move-> d, s -move-> t
917 |
917 |
918 o i-1: a -move-> c, p -move-> s
918 o i-1: a -move-> c, p -move-> s
919 |
919 |
920 o i-0 initial commit: a b h p q r
920 o i-0 initial commit: a b h p q r
921
921
922
922
923 Subcase: merge overwrite common copy information, but with extra change during the merge
923 Subcase: merge overwrite common copy information, but with extra change during the merge
924 ````````````````````````````````````````````````````````````````````````````````````````
924 ````````````````````````````````````````````````````````````````````````````````````````
925
925
926 Merge:
926 Merge:
927 - one with change to an unrelated file (b)
927 - one with change to an unrelated file (b)
928 - one overwriting a file (d) with a rename (from h to i to d)
928 - one overwriting a file (d) with a rename (from h to i to d)
929 - the merge update f content
929 - the merge update f content
930
930
931 $ case_desc="merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d)"
931 $ case_desc="merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d)"
932
932
933 $ hg up 'desc("f-2")'
933 $ hg up 'desc("f-2")'
934 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
934 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
935 #if no-changeset
935 #if no-changeset
936 $ hg debugindex d | "$PYTHON" ../no-linkrev
936 $ hg debugindex d | "$PYTHON" ../no-linkrev
937 rev linkrev nodeid p1 p2
937 rev linkrev nodeid p1-nodeid p2-nodeid
938 0 * d8252ab2e760 000000000000 000000000000
938 0 * d8252ab2e760 000000000000 000000000000
939 1 * b004912a8510 000000000000 000000000000
939 1 * b004912a8510 000000000000 000000000000
940 2 * 7b79e2fe0c89 000000000000 000000000000
940 2 * 7b79e2fe0c89 000000000000 000000000000
941 3 * 17ec97e60577 d8252ab2e760 000000000000
941 3 * 17ec97e60577 d8252ab2e760 000000000000
942 4 * 06dabf50734c b004912a8510 17ec97e60577
942 4 * 06dabf50734c b004912a8510 17ec97e60577
943 5 * 19c0e3924691 17ec97e60577 b004912a8510
943 5 * 19c0e3924691 17ec97e60577 b004912a8510
944 6 * 89c873a01d97 7b79e2fe0c89 17ec97e60577
944 6 * 89c873a01d97 7b79e2fe0c89 17ec97e60577
945 7 * d55cb4e9ef57 000000000000 000000000000
945 7 * d55cb4e9ef57 000000000000 000000000000
946 #else
946 #else
947 $ hg debugindex d | "$PYTHON" ../no-linkrev
947 $ hg debugindex d | "$PYTHON" ../no-linkrev
948 rev linkrev nodeid p1 p2
948 rev linkrev nodeid p1-nodeid p2-nodeid
949 0 * ae258f702dfe 000000000000 000000000000
949 0 * ae258f702dfe 000000000000 000000000000
950 1 * b004912a8510 000000000000 000000000000
950 1 * b004912a8510 000000000000 000000000000
951 2 * 5cce88bf349f ae258f702dfe 000000000000
951 2 * 5cce88bf349f ae258f702dfe 000000000000
952 3 * cc269dd788c8 b004912a8510 5cce88bf349f
952 3 * cc269dd788c8 b004912a8510 5cce88bf349f
953 4 * 51c91a115080 5cce88bf349f b004912a8510
953 4 * 51c91a115080 5cce88bf349f b004912a8510
954 #endif
954 #endif
955 $ hg up 'desc("b-1")'
955 $ hg up 'desc("b-1")'
956 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
956 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
957 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
957 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
958 $ hg merge 'desc("f-2")'
958 $ hg merge 'desc("f-2")'
959 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
959 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
960 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
960 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
961 (branch merge, don't forget to commit)
961 (branch merge, don't forget to commit)
962 $ echo "extra-change to (formelly h) during the merge" > d
962 $ echo "extra-change to (formelly h) during the merge" > d
963 $ hg ci -m "mBF-change-m-0 $case_desc - one way"
963 $ hg ci -m "mBF-change-m-0 $case_desc - one way"
964 created new head
964 created new head
965 $ hg manifest --rev . --debug | grep " d"
965 $ hg manifest --rev . --debug | grep " d"
966 1c334238bd42ec85c6a0d83fd1b2a898a6a3215d 644 d (no-changeset !)
966 1c334238bd42ec85c6a0d83fd1b2a898a6a3215d 644 d (no-changeset !)
967 cea2d99c0fde64672ef61953786fdff34f16e230 644 d (changeset !)
967 cea2d99c0fde64672ef61953786fdff34f16e230 644 d (changeset !)
968
968
969 $ hg up 'desc("f-2")'
969 $ hg up 'desc("f-2")'
970 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
970 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
971 $ hg merge 'desc("b-1")'
971 $ hg merge 'desc("b-1")'
972 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
972 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
973 (branch merge, don't forget to commit)
973 (branch merge, don't forget to commit)
974 $ echo "extra-change to (formelly h) during the merge" > d
974 $ echo "extra-change to (formelly h) during the merge" > d
975 $ hg ci -m "mFB-change-m-0 $case_desc - the other way"
975 $ hg ci -m "mFB-change-m-0 $case_desc - the other way"
976 created new head
976 created new head
977 $ hg manifest --rev . --debug | grep " d"
977 $ hg manifest --rev . --debug | grep " d"
978 1c334238bd42ec85c6a0d83fd1b2a898a6a3215d 644 d (no-changeset !)
978 1c334238bd42ec85c6a0d83fd1b2a898a6a3215d 644 d (no-changeset !)
979 cea2d99c0fde64672ef61953786fdff34f16e230 644 d (changeset !)
979 cea2d99c0fde64672ef61953786fdff34f16e230 644 d (changeset !)
980 #if no-changeset
980 #if no-changeset
981 $ hg debugindex d | "$PYTHON" ../no-linkrev
981 $ hg debugindex d | "$PYTHON" ../no-linkrev
982 rev linkrev nodeid p1 p2
982 rev linkrev nodeid p1-nodeid p2-nodeid
983 0 * d8252ab2e760 000000000000 000000000000
983 0 * d8252ab2e760 000000000000 000000000000
984 1 * b004912a8510 000000000000 000000000000
984 1 * b004912a8510 000000000000 000000000000
985 2 * 7b79e2fe0c89 000000000000 000000000000
985 2 * 7b79e2fe0c89 000000000000 000000000000
986 3 * 17ec97e60577 d8252ab2e760 000000000000
986 3 * 17ec97e60577 d8252ab2e760 000000000000
987 4 * 06dabf50734c b004912a8510 17ec97e60577
987 4 * 06dabf50734c b004912a8510 17ec97e60577
988 5 * 19c0e3924691 17ec97e60577 b004912a8510
988 5 * 19c0e3924691 17ec97e60577 b004912a8510
989 6 * 89c873a01d97 7b79e2fe0c89 17ec97e60577
989 6 * 89c873a01d97 7b79e2fe0c89 17ec97e60577
990 7 * d55cb4e9ef57 000000000000 000000000000
990 7 * d55cb4e9ef57 000000000000 000000000000
991 8 * 1c334238bd42 7b79e2fe0c89 000000000000
991 8 * 1c334238bd42 7b79e2fe0c89 000000000000
992 #else
992 #else
993 $ hg debugindex d | "$PYTHON" ../no-linkrev
993 $ hg debugindex d | "$PYTHON" ../no-linkrev
994 rev linkrev nodeid p1 p2
994 rev linkrev nodeid p1-nodeid p2-nodeid
995 0 * ae258f702dfe 000000000000 000000000000
995 0 * ae258f702dfe 000000000000 000000000000
996 1 * b004912a8510 000000000000 000000000000
996 1 * b004912a8510 000000000000 000000000000
997 2 * 5cce88bf349f ae258f702dfe 000000000000
997 2 * 5cce88bf349f ae258f702dfe 000000000000
998 3 * cc269dd788c8 b004912a8510 5cce88bf349f
998 3 * cc269dd788c8 b004912a8510 5cce88bf349f
999 4 * 51c91a115080 5cce88bf349f b004912a8510
999 4 * 51c91a115080 5cce88bf349f b004912a8510
1000 5 * cea2d99c0fde ae258f702dfe 000000000000
1000 5 * cea2d99c0fde ae258f702dfe 000000000000
1001 #endif
1001 #endif
1002 $ hg log -G --rev '::(desc("mBF-change-m")+desc("mFB-change-m"))'
1002 $ hg log -G --rev '::(desc("mBF-change-m")+desc("mFB-change-m"))'
1003 @ mFB-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
1003 @ mFB-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
1004 |\
1004 |\
1005 +---o mBF-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
1005 +---o mBF-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
1006 | |/
1006 | |/
1007 | o f-2: rename i -> d
1007 | o f-2: rename i -> d
1008 | |
1008 | |
1009 | o f-1: rename h -> i
1009 | o f-1: rename h -> i
1010 | |
1010 | |
1011 o | b-1: b update
1011 o | b-1: b update
1012 |/
1012 |/
1013 o i-2: c -move-> d, s -move-> t
1013 o i-2: c -move-> d, s -move-> t
1014 |
1014 |
1015 o i-1: a -move-> c, p -move-> s
1015 o i-1: a -move-> c, p -move-> s
1016 |
1016 |
1017 o i-0 initial commit: a b h p q r
1017 o i-0 initial commit: a b h p q r
1018
1018
1019
1019
1020 Subcase: restoring and untouched deleted file, while touching it
1020 Subcase: restoring and untouched deleted file, while touching it
1021 ````````````````````````````````````````````````````````````````
1021 ````````````````````````````````````````````````````````````````
1022
1022
1023 Merge:
1023 Merge:
1024 - one removing a file (d)
1024 - one removing a file (d)
1025 - one leaving the file untouched
1025 - one leaving the file untouched
1026 - the merge actively restore the file to the same content.
1026 - the merge actively restore the file to the same content.
1027
1027
1028 In this case, the file keep on living after the merge. So we should not drop its
1028 In this case, the file keep on living after the merge. So we should not drop its
1029 copy tracing chain.
1029 copy tracing chain.
1030
1030
1031 $ case_desc="merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge)"
1031 $ case_desc="merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge)"
1032
1032
1033 $ hg up 'desc("c-1")'
1033 $ hg up 'desc("c-1")'
1034 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
1034 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
1035 $ hg merge 'desc("b-1")'
1035 $ hg merge 'desc("b-1")'
1036 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1036 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1037 (branch merge, don't forget to commit)
1037 (branch merge, don't forget to commit)
1038 $ hg revert --rev 'desc("b-1")' d
1038 $ hg revert --rev 'desc("b-1")' d
1039 $ echo "new content for d after the revert" > d
1039 $ echo "new content for d after the revert" > d
1040 $ hg ci -m "mCB-change-m-0 $case_desc - one way"
1040 $ hg ci -m "mCB-change-m-0 $case_desc - one way"
1041 created new head
1041 created new head
1042 $ hg manifest --rev . --debug | grep " d"
1042 $ hg manifest --rev . --debug | grep " d"
1043 e333780c17752a3b0dd15e3ad48aa4e5c745f621 644 d (no-changeset !)
1043 e333780c17752a3b0dd15e3ad48aa4e5c745f621 644 d (no-changeset !)
1044 4b540a18ad699234b2b2aa18cb69555ac9c4b1df 644 d (changeset !)
1044 4b540a18ad699234b2b2aa18cb69555ac9c4b1df 644 d (changeset !)
1045
1045
1046 $ hg up 'desc("b-1")'
1046 $ hg up 'desc("b-1")'
1047 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1047 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1048 $ hg merge 'desc("c-1")'
1048 $ hg merge 'desc("c-1")'
1049 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1049 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1050 (branch merge, don't forget to commit)
1050 (branch merge, don't forget to commit)
1051 $ hg revert --rev 'desc("b-1")' d
1051 $ hg revert --rev 'desc("b-1")' d
1052 $ echo "new content for d after the revert" > d
1052 $ echo "new content for d after the revert" > d
1053 $ hg ci -m "mBC-change-m-0 $case_desc - the other way"
1053 $ hg ci -m "mBC-change-m-0 $case_desc - the other way"
1054 created new head
1054 created new head
1055 $ hg manifest --rev . --debug | grep " d"
1055 $ hg manifest --rev . --debug | grep " d"
1056 e333780c17752a3b0dd15e3ad48aa4e5c745f621 644 d (no-changeset !)
1056 e333780c17752a3b0dd15e3ad48aa4e5c745f621 644 d (no-changeset !)
1057 4b540a18ad699234b2b2aa18cb69555ac9c4b1df 644 d (changeset !)
1057 4b540a18ad699234b2b2aa18cb69555ac9c4b1df 644 d (changeset !)
1058
1058
1059
1059
1060 $ hg up null --quiet
1060 $ hg up null --quiet
1061 $ hg log -G --rev '::(desc("mCB-change-m")+desc("mBC-change-m"))'
1061 $ hg log -G --rev '::(desc("mCB-change-m")+desc("mBC-change-m"))'
1062 o mBC-change-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1062 o mBC-change-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1063 |\
1063 |\
1064 +---o mCB-change-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1064 +---o mCB-change-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1065 | |/
1065 | |/
1066 | o c-1 delete d
1066 | o c-1 delete d
1067 | |
1067 | |
1068 o | b-1: b update
1068 o | b-1: b update
1069 |/
1069 |/
1070 o i-2: c -move-> d, s -move-> t
1070 o i-2: c -move-> d, s -move-> t
1071 |
1071 |
1072 o i-1: a -move-> c, p -move-> s
1072 o i-1: a -move-> c, p -move-> s
1073 |
1073 |
1074 o i-0 initial commit: a b h p q r
1074 o i-0 initial commit: a b h p q r
1075
1075
1076
1076
1077 Decision from previous merge are properly chained with later merge
1077 Decision from previous merge are properly chained with later merge
1078 ------------------------------------------------------------------
1078 ------------------------------------------------------------------
1079
1079
1080 Subcase: chaining conflicting rename resolution
1080 Subcase: chaining conflicting rename resolution
1081 ```````````````````````````````````````````````
1081 ```````````````````````````````````````````````
1082
1082
1083 The "mAEm" and "mEAm" case create a rename tracking conflict on file 'f'. We
1083 The "mAEm" and "mEAm" case create a rename tracking conflict on file 'f'. We
1084 add more change on the respective branch and merge again. These second merge
1084 add more change on the respective branch and merge again. These second merge
1085 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
1085 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
1086 about that file should stay unchanged.
1086 about that file should stay unchanged.
1087
1087
1088 We also touch J during some of the merge to check for unrelated change to new file during merge.
1088 We also touch J during some of the merge to check for unrelated change to new file during merge.
1089
1089
1090 $ case_desc="chained merges (conflict -> simple) - same content everywhere"
1090 $ case_desc="chained merges (conflict -> simple) - same content everywhere"
1091
1091
1092 (extra unrelated changes)
1092 (extra unrelated changes)
1093
1093
1094 $ hg up 'desc("a-2")'
1094 $ hg up 'desc("a-2")'
1095 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
1095 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
1096 $ echo j > unrelated-j
1096 $ echo j > unrelated-j
1097 $ hg add unrelated-j
1097 $ hg add unrelated-j
1098 $ hg ci -m 'j-1: unrelated changes (based on the "a" series of changes)'
1098 $ hg ci -m 'j-1: unrelated changes (based on the "a" series of changes)'
1099 created new head
1099 created new head
1100
1100
1101 $ hg up 'desc("e-2")'
1101 $ hg up 'desc("e-2")'
1102 2 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
1102 2 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
1103 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
1103 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
1104 $ echo k > unrelated-k
1104 $ echo k > unrelated-k
1105 $ hg add unrelated-k
1105 $ hg add unrelated-k
1106 $ hg ci -m 'k-1: unrelated changes (based on "e" changes)'
1106 $ hg ci -m 'k-1: unrelated changes (based on "e" changes)'
1107 created new head
1107 created new head
1108
1108
1109 (merge variant 1)
1109 (merge variant 1)
1110
1110
1111 $ hg up 'desc("mAEm")'
1111 $ hg up 'desc("mAEm")'
1112 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
1112 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
1113 0 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
1113 0 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
1114 $ hg merge 'desc("k-1")'
1114 $ hg merge 'desc("k-1")'
1115 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1115 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1116 (branch merge, don't forget to commit)
1116 (branch merge, don't forget to commit)
1117 $ hg ci -m "mAE,Km: $case_desc"
1117 $ hg ci -m "mAE,Km: $case_desc"
1118
1118
1119 (merge variant 2)
1119 (merge variant 2)
1120
1120
1121 $ hg up 'desc("k-1")'
1121 $ hg up 'desc("k-1")'
1122 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
1122 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
1123 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
1123 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
1124
1124
1125 $ hg merge 'desc("mAEm")'
1125 $ hg merge 'desc("mAEm")'
1126 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
1126 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
1127 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
1127 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
1128 (branch merge, don't forget to commit)
1128 (branch merge, don't forget to commit)
1129 $ hg ci -m "mK,AEm: $case_desc"
1129 $ hg ci -m "mK,AEm: $case_desc"
1130 created new head
1130 created new head
1131
1131
1132 (merge variant 3)
1132 (merge variant 3)
1133
1133
1134 $ hg up 'desc("mEAm")'
1134 $ hg up 'desc("mEAm")'
1135 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1135 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1136 $ hg merge 'desc("j-1")'
1136 $ hg merge 'desc("j-1")'
1137 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1137 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1138 (branch merge, don't forget to commit)
1138 (branch merge, don't forget to commit)
1139 $ echo jj > unrelated-j
1139 $ echo jj > unrelated-j
1140 $ hg ci -m "mEA,Jm: $case_desc"
1140 $ hg ci -m "mEA,Jm: $case_desc"
1141
1141
1142 (merge variant 4)
1142 (merge variant 4)
1143
1143
1144 $ hg up 'desc("j-1")'
1144 $ hg up 'desc("j-1")'
1145 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
1145 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
1146 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
1146 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
1147 $ hg merge 'desc("mEAm")'
1147 $ hg merge 'desc("mEAm")'
1148 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
1148 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
1149 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
1149 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
1150 (branch merge, don't forget to commit)
1150 (branch merge, don't forget to commit)
1151 $ echo jj > unrelated-j
1151 $ echo jj > unrelated-j
1152 $ hg ci -m "mJ,EAm: $case_desc"
1152 $ hg ci -m "mJ,EAm: $case_desc"
1153 created new head
1153 created new head
1154
1154
1155
1155
1156 $ hg log -G --rev '::(desc("mAE,Km") + desc("mK,AEm") + desc("mEA,Jm") + desc("mJ,EAm"))'
1156 $ hg log -G --rev '::(desc("mAE,Km") + desc("mK,AEm") + desc("mEA,Jm") + desc("mJ,EAm"))'
1157 @ mJ,EAm: chained merges (conflict -> simple) - same content everywhere
1157 @ mJ,EAm: chained merges (conflict -> simple) - same content everywhere
1158 |\
1158 |\
1159 +---o mEA,Jm: chained merges (conflict -> simple) - same content everywhere
1159 +---o mEA,Jm: chained merges (conflict -> simple) - same content everywhere
1160 | |/
1160 | |/
1161 | | o mK,AEm: chained merges (conflict -> simple) - same content everywhere
1161 | | o mK,AEm: chained merges (conflict -> simple) - same content everywhere
1162 | | |\
1162 | | |\
1163 | | +---o mAE,Km: chained merges (conflict -> simple) - same content everywhere
1163 | | +---o mAE,Km: chained merges (conflict -> simple) - same content everywhere
1164 | | | |/
1164 | | | |/
1165 | | | o k-1: unrelated changes (based on "e" changes)
1165 | | | o k-1: unrelated changes (based on "e" changes)
1166 | | | |
1166 | | | |
1167 | o | | j-1: unrelated changes (based on the "a" series of changes)
1167 | o | | j-1: unrelated changes (based on the "a" series of changes)
1168 | | | |
1168 | | | |
1169 o-----+ mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
1169 o-----+ mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
1170 |/ / /
1170 |/ / /
1171 | o / mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
1171 | o / mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
1172 |/|/
1172 |/|/
1173 | o e-2 g -move-> f
1173 | o e-2 g -move-> f
1174 | |
1174 | |
1175 | o e-1 b -move-> g
1175 | o e-1 b -move-> g
1176 | |
1176 | |
1177 o | a-2: e -move-> f
1177 o | a-2: e -move-> f
1178 | |
1178 | |
1179 o | a-1: d -move-> e
1179 o | a-1: d -move-> e
1180 |/
1180 |/
1181 o i-2: c -move-> d, s -move-> t
1181 o i-2: c -move-> d, s -move-> t
1182 |
1182 |
1183 o i-1: a -move-> c, p -move-> s
1183 o i-1: a -move-> c, p -move-> s
1184 |
1184 |
1185 o i-0 initial commit: a b h p q r
1185 o i-0 initial commit: a b h p q r
1186
1186
1187
1187
1188 Subcase: chaining conflicting rename resolution, with actual merging happening
1188 Subcase: chaining conflicting rename resolution, with actual merging happening
1189 ``````````````````````````````````````````````````````````````````````````````
1189 ``````````````````````````````````````````````````````````````````````````````
1190
1190
1191 The "mPQm" and "mQPm" case create a rename tracking conflict on file 't'. We
1191 The "mPQm" and "mQPm" case create a rename tracking conflict on file 't'. We
1192 add more change on the respective branch and merge again. These second merge
1192 add more change on the respective branch and merge again. These second merge
1193 does not involve the file 't' and the arbitration done within "mPQm" and "mQP"
1193 does not involve the file 't' and the arbitration done within "mPQm" and "mQP"
1194 about that file should stay unchanged.
1194 about that file should stay unchanged.
1195
1195
1196 $ case_desc="chained merges (conflict -> simple) - different content"
1196 $ case_desc="chained merges (conflict -> simple) - different content"
1197
1197
1198 (extra unrelated changes)
1198 (extra unrelated changes)
1199
1199
1200 $ hg up 'desc("p-2")'
1200 $ hg up 'desc("p-2")'
1201 3 files updated, 0 files merged, 3 files removed, 0 files unresolved
1201 3 files updated, 0 files merged, 3 files removed, 0 files unresolved
1202 $ echo s > unrelated-s
1202 $ echo s > unrelated-s
1203 $ hg add unrelated-s
1203 $ hg add unrelated-s
1204 $ hg ci -m 's-1: unrelated changes (based on the "p" series of changes)'
1204 $ hg ci -m 's-1: unrelated changes (based on the "p" series of changes)'
1205 created new head
1205 created new head
1206
1206
1207 $ hg up 'desc("q-2")'
1207 $ hg up 'desc("q-2")'
1208 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
1208 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
1209 $ echo t > unrelated-t
1209 $ echo t > unrelated-t
1210 $ hg add unrelated-t
1210 $ hg add unrelated-t
1211 $ hg ci -m 't-1: unrelated changes (based on "q" changes)'
1211 $ hg ci -m 't-1: unrelated changes (based on "q" changes)'
1212 created new head
1212 created new head
1213
1213
1214 (merge variant 1)
1214 (merge variant 1)
1215
1215
1216 $ hg up 'desc("mPQm")'
1216 $ hg up 'desc("mPQm")'
1217 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
1217 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
1218 $ hg merge 'desc("t-1")'
1218 $ hg merge 'desc("t-1")'
1219 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1219 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1220 (branch merge, don't forget to commit)
1220 (branch merge, don't forget to commit)
1221 $ hg ci -m "mPQ,Tm: $case_desc"
1221 $ hg ci -m "mPQ,Tm: $case_desc"
1222
1222
1223 (merge variant 2)
1223 (merge variant 2)
1224
1224
1225 $ hg up 'desc("t-1")'
1225 $ hg up 'desc("t-1")'
1226 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1226 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1227
1227
1228 $ hg merge 'desc("mPQm")'
1228 $ hg merge 'desc("mPQm")'
1229 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1229 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1230 (branch merge, don't forget to commit)
1230 (branch merge, don't forget to commit)
1231 $ hg ci -m "mT,PQm: $case_desc"
1231 $ hg ci -m "mT,PQm: $case_desc"
1232 created new head
1232 created new head
1233
1233
1234 (merge variant 3)
1234 (merge variant 3)
1235
1235
1236 $ hg up 'desc("mQPm")'
1236 $ hg up 'desc("mQPm")'
1237 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1237 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1238 $ hg merge 'desc("s-1")'
1238 $ hg merge 'desc("s-1")'
1239 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1239 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1240 (branch merge, don't forget to commit)
1240 (branch merge, don't forget to commit)
1241 $ hg ci -m "mQP,Sm: $case_desc"
1241 $ hg ci -m "mQP,Sm: $case_desc"
1242
1242
1243 (merge variant 4)
1243 (merge variant 4)
1244
1244
1245 $ hg up 'desc("s-1")'
1245 $ hg up 'desc("s-1")'
1246 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1246 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1247 $ hg merge 'desc("mQPm")'
1247 $ hg merge 'desc("mQPm")'
1248 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1248 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1249 (branch merge, don't forget to commit)
1249 (branch merge, don't forget to commit)
1250 $ hg ci -m "mS,QPm: $case_desc"
1250 $ hg ci -m "mS,QPm: $case_desc"
1251 created new head
1251 created new head
1252 $ hg up null --quiet
1252 $ hg up null --quiet
1253
1253
1254
1254
1255 $ hg log -G --rev '::(desc("mPQ,Tm") + desc("mT,PQm") + desc("mQP,Sm") + desc("mS,QPm"))'
1255 $ hg log -G --rev '::(desc("mPQ,Tm") + desc("mT,PQm") + desc("mQP,Sm") + desc("mS,QPm"))'
1256 o mS,QPm: chained merges (conflict -> simple) - different content
1256 o mS,QPm: chained merges (conflict -> simple) - different content
1257 |\
1257 |\
1258 +---o mQP,Sm: chained merges (conflict -> simple) - different content
1258 +---o mQP,Sm: chained merges (conflict -> simple) - different content
1259 | |/
1259 | |/
1260 | | o mT,PQm: chained merges (conflict -> simple) - different content
1260 | | o mT,PQm: chained merges (conflict -> simple) - different content
1261 | | |\
1261 | | |\
1262 | | +---o mPQ,Tm: chained merges (conflict -> simple) - different content
1262 | | +---o mPQ,Tm: chained merges (conflict -> simple) - different content
1263 | | | |/
1263 | | | |/
1264 | | | o t-1: unrelated changes (based on "q" changes)
1264 | | | o t-1: unrelated changes (based on "q" changes)
1265 | | | |
1265 | | | |
1266 | o | | s-1: unrelated changes (based on the "p" series of changes)
1266 | o | | s-1: unrelated changes (based on the "p" series of changes)
1267 | | | |
1267 | | | |
1268 o-----+ mQPm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - the other way
1268 o-----+ mQPm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - the other way
1269 |/ / /
1269 |/ / /
1270 | o / mPQm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - one way
1270 | o / mPQm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - one way
1271 |/|/
1271 |/|/
1272 | o q-2 w -move-> v
1272 | o q-2 w -move-> v
1273 | |
1273 | |
1274 | o q-1 r -move-> w
1274 | o q-1 r -move-> w
1275 | |
1275 | |
1276 o | p-2: u -move-> v
1276 o | p-2: u -move-> v
1277 | |
1277 | |
1278 o | p-1: t -move-> u
1278 o | p-1: t -move-> u
1279 |/
1279 |/
1280 o i-2: c -move-> d, s -move-> t
1280 o i-2: c -move-> d, s -move-> t
1281 |
1281 |
1282 o i-1: a -move-> c, p -move-> s
1282 o i-1: a -move-> c, p -move-> s
1283 |
1283 |
1284 o i-0 initial commit: a b h p q r
1284 o i-0 initial commit: a b h p q r
1285
1285
1286
1286
1287 Subcase: chaining salvage information during a merge
1287 Subcase: chaining salvage information during a merge
1288 ````````````````````````````````````````````````````
1288 ````````````````````````````````````````````````````
1289
1289
1290 We add more change on the branch were the file was deleted. merging again
1290 We add more change on the branch were the file was deleted. merging again
1291 should preserve the fact eh file was salvaged.
1291 should preserve the fact eh file was salvaged.
1292
1292
1293 $ case_desc="chained merges (salvaged -> simple) - same content (when the file exists)"
1293 $ case_desc="chained merges (salvaged -> simple) - same content (when the file exists)"
1294
1294
1295 (creating the change)
1295 (creating the change)
1296
1296
1297 $ hg up 'desc("c-1")'
1297 $ hg up 'desc("c-1")'
1298 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1298 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1299 $ echo l > unrelated-l
1299 $ echo l > unrelated-l
1300 $ hg add unrelated-l
1300 $ hg add unrelated-l
1301 $ hg ci -m 'l-1: unrelated changes (based on "c" changes)'
1301 $ hg ci -m 'l-1: unrelated changes (based on "c" changes)'
1302 created new head
1302 created new head
1303
1303
1304 (Merge variant 1)
1304 (Merge variant 1)
1305
1305
1306 $ hg up 'desc("mBC-revert-m")'
1306 $ hg up 'desc("mBC-revert-m")'
1307 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
1307 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
1308 $ hg merge 'desc("l-1")'
1308 $ hg merge 'desc("l-1")'
1309 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1309 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1310 (branch merge, don't forget to commit)
1310 (branch merge, don't forget to commit)
1311 $ hg ci -m "mBC+revert,Lm: $case_desc"
1311 $ hg ci -m "mBC+revert,Lm: $case_desc"
1312
1312
1313 (Merge variant 2)
1313 (Merge variant 2)
1314
1314
1315 $ hg up 'desc("mCB-revert-m")'
1315 $ hg up 'desc("mCB-revert-m")'
1316 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1316 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1317 $ hg merge 'desc("l-1")'
1317 $ hg merge 'desc("l-1")'
1318 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1318 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1319 (branch merge, don't forget to commit)
1319 (branch merge, don't forget to commit)
1320 $ hg ci -m "mCB+revert,Lm: $case_desc"
1320 $ hg ci -m "mCB+revert,Lm: $case_desc"
1321
1321
1322 (Merge variant 3)
1322 (Merge variant 3)
1323
1323
1324 $ hg up 'desc("l-1")'
1324 $ hg up 'desc("l-1")'
1325 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1325 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1326
1326
1327 $ hg merge 'desc("mBC-revert-m")'
1327 $ hg merge 'desc("mBC-revert-m")'
1328 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1328 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1329 (branch merge, don't forget to commit)
1329 (branch merge, don't forget to commit)
1330 $ hg ci -m "mL,BC+revertm: $case_desc"
1330 $ hg ci -m "mL,BC+revertm: $case_desc"
1331 created new head
1331 created new head
1332
1332
1333 (Merge variant 4)
1333 (Merge variant 4)
1334
1334
1335 $ hg up 'desc("l-1")'
1335 $ hg up 'desc("l-1")'
1336 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1336 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1337
1337
1338 $ hg merge 'desc("mCB-revert-m")'
1338 $ hg merge 'desc("mCB-revert-m")'
1339 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1339 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1340 (branch merge, don't forget to commit)
1340 (branch merge, don't forget to commit)
1341 $ hg ci -m "mL,CB+revertm: $case_desc"
1341 $ hg ci -m "mL,CB+revertm: $case_desc"
1342 created new head
1342 created new head
1343
1343
1344 $ hg log -G --rev '::(desc("mBC+revert,Lm") + desc("mCB+revert,Lm") + desc("mL,BC+revertm") + desc("mL,CB+revertm"))'
1344 $ hg log -G --rev '::(desc("mBC+revert,Lm") + desc("mCB+revert,Lm") + desc("mL,BC+revertm") + desc("mL,CB+revertm"))'
1345 @ mL,CB+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1345 @ mL,CB+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1346 |\
1346 |\
1347 | | o mL,BC+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1347 | | o mL,BC+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1348 | |/|
1348 | |/|
1349 +-+---o mCB+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1349 +-+---o mCB+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1350 | | |
1350 | | |
1351 | +---o mBC+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1351 | +---o mBC+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1352 | | |/
1352 | | |/
1353 | o | l-1: unrelated changes (based on "c" changes)
1353 | o | l-1: unrelated changes (based on "c" changes)
1354 | | |
1354 | | |
1355 | | o mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1355 | | o mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1356 | |/|
1356 | |/|
1357 o---+ mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1357 o---+ mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1358 |/ /
1358 |/ /
1359 o | c-1 delete d
1359 o | c-1 delete d
1360 | |
1360 | |
1361 | o b-1: b update
1361 | o b-1: b update
1362 |/
1362 |/
1363 o i-2: c -move-> d, s -move-> t
1363 o i-2: c -move-> d, s -move-> t
1364 |
1364 |
1365 o i-1: a -move-> c, p -move-> s
1365 o i-1: a -move-> c, p -move-> s
1366 |
1366 |
1367 o i-0 initial commit: a b h p q r
1367 o i-0 initial commit: a b h p q r
1368
1368
1369
1369
1370
1370
1371 Subcase: chaining "merged" information during a merge
1371 Subcase: chaining "merged" information during a merge
1372 ``````````````````````````````````````````````````````
1372 ``````````````````````````````````````````````````````
1373
1373
1374 When a non-rename change are merged with a copy overwrite, the merge pick the copy source from (p1) as the reference. We should preserve this information in subsequent merges.
1374 When a non-rename change are merged with a copy overwrite, the merge pick the copy source from (p1) as the reference. We should preserve this information in subsequent merges.
1375
1375
1376 $ case_desc="chained merges (copy-overwrite -> simple) - same content"
1376 $ case_desc="chained merges (copy-overwrite -> simple) - same content"
1377
1377
1378 (extra unrelated changes)
1378 (extra unrelated changes)
1379
1379
1380 $ hg up 'desc("f-2")'
1380 $ hg up 'desc("f-2")'
1381 2 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
1381 2 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
1382 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
1382 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
1383 $ echo n > unrelated-n
1383 $ echo n > unrelated-n
1384 $ hg add unrelated-n
1384 $ hg add unrelated-n
1385 $ hg ci -m 'n-1: unrelated changes (based on the "f" series of changes)'
1385 $ hg ci -m 'n-1: unrelated changes (based on the "f" series of changes)'
1386 created new head
1386 created new head
1387
1387
1388 $ hg up 'desc("g-1")'
1388 $ hg up 'desc("g-1")'
1389 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
1389 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
1390 $ echo o > unrelated-o
1390 $ echo o > unrelated-o
1391 $ hg add unrelated-o
1391 $ hg add unrelated-o
1392 $ hg ci -m 'o-1: unrelated changes (based on "g" changes)'
1392 $ hg ci -m 'o-1: unrelated changes (based on "g" changes)'
1393 created new head
1393 created new head
1394
1394
1395 (merge variant 1)
1395 (merge variant 1)
1396
1396
1397 $ hg up 'desc("mFGm")'
1397 $ hg up 'desc("mFGm")'
1398 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
1398 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
1399 0 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
1399 0 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
1400 $ hg merge 'desc("o-1")'
1400 $ hg merge 'desc("o-1")'
1401 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1401 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1402 (branch merge, don't forget to commit)
1402 (branch merge, don't forget to commit)
1403 $ hg ci -m "mFG,Om: $case_desc"
1403 $ hg ci -m "mFG,Om: $case_desc"
1404
1404
1405 (merge variant 2)
1405 (merge variant 2)
1406
1406
1407 $ hg up 'desc("o-1")'
1407 $ hg up 'desc("o-1")'
1408 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
1408 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
1409 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
1409 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
1410 $ hg merge 'desc("FGm")'
1410 $ hg merge 'desc("FGm")'
1411 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
1411 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
1412 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
1412 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
1413 (branch merge, don't forget to commit)
1413 (branch merge, don't forget to commit)
1414 $ hg ci -m "mO,FGm: $case_desc"
1414 $ hg ci -m "mO,FGm: $case_desc"
1415 created new head
1415 created new head
1416
1416
1417 (merge variant 3)
1417 (merge variant 3)
1418
1418
1419 $ hg up 'desc("mGFm")'
1419 $ hg up 'desc("mGFm")'
1420 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1420 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1421 $ hg merge 'desc("n-1")'
1421 $ hg merge 'desc("n-1")'
1422 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1422 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1423 (branch merge, don't forget to commit)
1423 (branch merge, don't forget to commit)
1424 $ hg ci -m "mGF,Nm: $case_desc"
1424 $ hg ci -m "mGF,Nm: $case_desc"
1425
1425
1426 (merge variant 4)
1426 (merge variant 4)
1427
1427
1428 $ hg up 'desc("n-1")'
1428 $ hg up 'desc("n-1")'
1429 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1429 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1430 $ hg merge 'desc("mGFm")'
1430 $ hg merge 'desc("mGFm")'
1431 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1431 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1432 (branch merge, don't forget to commit)
1432 (branch merge, don't forget to commit)
1433 $ hg ci -m "mN,GFm: $case_desc"
1433 $ hg ci -m "mN,GFm: $case_desc"
1434 created new head
1434 created new head
1435
1435
1436 $ hg log -G --rev '::(desc("mFG,Om") + desc("mO,FGm") + desc("mGF,Nm") + desc("mN,GFm"))'
1436 $ hg log -G --rev '::(desc("mFG,Om") + desc("mO,FGm") + desc("mGF,Nm") + desc("mN,GFm"))'
1437 @ mN,GFm: chained merges (copy-overwrite -> simple) - same content
1437 @ mN,GFm: chained merges (copy-overwrite -> simple) - same content
1438 |\
1438 |\
1439 +---o mGF,Nm: chained merges (copy-overwrite -> simple) - same content
1439 +---o mGF,Nm: chained merges (copy-overwrite -> simple) - same content
1440 | |/
1440 | |/
1441 | | o mO,FGm: chained merges (copy-overwrite -> simple) - same content
1441 | | o mO,FGm: chained merges (copy-overwrite -> simple) - same content
1442 | | |\
1442 | | |\
1443 | | +---o mFG,Om: chained merges (copy-overwrite -> simple) - same content
1443 | | +---o mFG,Om: chained merges (copy-overwrite -> simple) - same content
1444 | | | |/
1444 | | | |/
1445 | | | o o-1: unrelated changes (based on "g" changes)
1445 | | | o o-1: unrelated changes (based on "g" changes)
1446 | | | |
1446 | | | |
1447 | o | | n-1: unrelated changes (based on the "f" series of changes)
1447 | o | | n-1: unrelated changes (based on the "f" series of changes)
1448 | | | |
1448 | | | |
1449 o-----+ mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
1449 o-----+ mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
1450 |/ / /
1450 |/ / /
1451 | o / mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
1451 | o / mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
1452 |/|/
1452 |/|/
1453 | o g-1: update d
1453 | o g-1: update d
1454 | |
1454 | |
1455 o | f-2: rename i -> d
1455 o | f-2: rename i -> d
1456 | |
1456 | |
1457 o | f-1: rename h -> i
1457 o | f-1: rename h -> i
1458 |/
1458 |/
1459 o i-2: c -move-> d, s -move-> t
1459 o i-2: c -move-> d, s -move-> t
1460 |
1460 |
1461 o i-1: a -move-> c, p -move-> s
1461 o i-1: a -move-> c, p -move-> s
1462 |
1462 |
1463 o i-0 initial commit: a b h p q r
1463 o i-0 initial commit: a b h p q r
1464
1464
1465
1465
1466 Subcase: chaining conflicting rename resolution, with extra change during the merge
1466 Subcase: chaining conflicting rename resolution, with extra change during the merge
1467 ```````````````````````````````````````````````````````````````````````````````````
1467 ```````````````````````````````````````````````````````````````````````````````````
1468
1468
1469 The "mEA-change-m-0" and "mAE-change-m-0" case create a rename tracking conflict on file 'f'. We
1469 The "mEA-change-m-0" and "mAE-change-m-0" case create a rename tracking conflict on file 'f'. We
1470 add more change on the respective branch and merge again. These second merge
1470 add more change on the respective branch and merge again. These second merge
1471 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
1471 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
1472 about that file should stay unchanged.
1472 about that file should stay unchanged.
1473
1473
1474 $ case_desc="chained merges (conflict+change -> simple) - same content on both branch in the initial merge"
1474 $ case_desc="chained merges (conflict+change -> simple) - same content on both branch in the initial merge"
1475
1475
1476
1476
1477 (merge variant 1)
1477 (merge variant 1)
1478
1478
1479 $ hg up 'desc("mAE-change-m")'
1479 $ hg up 'desc("mAE-change-m")'
1480 2 files updated, 0 files merged, 3 files removed, 0 files unresolved
1480 2 files updated, 0 files merged, 3 files removed, 0 files unresolved
1481 $ hg merge 'desc("k-1")'
1481 $ hg merge 'desc("k-1")'
1482 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1482 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1483 (branch merge, don't forget to commit)
1483 (branch merge, don't forget to commit)
1484 $ hg ci -m "mAE-change,Km: $case_desc"
1484 $ hg ci -m "mAE-change,Km: $case_desc"
1485
1485
1486 (merge variant 2)
1486 (merge variant 2)
1487
1487
1488 $ hg up 'desc("k-1")'
1488 $ hg up 'desc("k-1")'
1489 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1489 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1490
1490
1491 $ hg merge 'desc("mAE-change-m")'
1491 $ hg merge 'desc("mAE-change-m")'
1492 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1492 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1493 (branch merge, don't forget to commit)
1493 (branch merge, don't forget to commit)
1494 $ hg ci -m "mK,AE-change-m: $case_desc"
1494 $ hg ci -m "mK,AE-change-m: $case_desc"
1495 created new head
1495 created new head
1496
1496
1497 (merge variant 3)
1497 (merge variant 3)
1498
1498
1499 $ hg up 'desc("mEA-change-m")'
1499 $ hg up 'desc("mEA-change-m")'
1500 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1500 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1501 $ hg merge 'desc("j-1")'
1501 $ hg merge 'desc("j-1")'
1502 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1502 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1503 (branch merge, don't forget to commit)
1503 (branch merge, don't forget to commit)
1504 $ hg ci -m "mEA-change,Jm: $case_desc"
1504 $ hg ci -m "mEA-change,Jm: $case_desc"
1505
1505
1506 (merge variant 4)
1506 (merge variant 4)
1507
1507
1508 $ hg up 'desc("j-1")'
1508 $ hg up 'desc("j-1")'
1509 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1509 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1510 $ hg merge 'desc("mEA-change-m")'
1510 $ hg merge 'desc("mEA-change-m")'
1511 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1511 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1512 (branch merge, don't forget to commit)
1512 (branch merge, don't forget to commit)
1513 $ hg ci -m "mJ,EA-change-m: $case_desc"
1513 $ hg ci -m "mJ,EA-change-m: $case_desc"
1514 created new head
1514 created new head
1515
1515
1516
1516
1517 $ hg log -G --rev '::(desc("mAE-change,Km") + desc("mK,AE-change-m") + desc("mEA-change,Jm") + desc("mJ,EA-change-m"))'
1517 $ hg log -G --rev '::(desc("mAE-change,Km") + desc("mK,AE-change-m") + desc("mEA-change,Jm") + desc("mJ,EA-change-m"))'
1518 @ mJ,EA-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1518 @ mJ,EA-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1519 |\
1519 |\
1520 +---o mEA-change,Jm: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1520 +---o mEA-change,Jm: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1521 | |/
1521 | |/
1522 | | o mK,AE-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1522 | | o mK,AE-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1523 | | |\
1523 | | |\
1524 | | +---o mAE-change,Km: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1524 | | +---o mAE-change,Km: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1525 | | | |/
1525 | | | |/
1526 | | | o k-1: unrelated changes (based on "e" changes)
1526 | | | o k-1: unrelated changes (based on "e" changes)
1527 | | | |
1527 | | | |
1528 | o | | j-1: unrelated changes (based on the "a" series of changes)
1528 | o | | j-1: unrelated changes (based on the "a" series of changes)
1529 | | | |
1529 | | | |
1530 o-----+ mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
1530 o-----+ mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
1531 |/ / /
1531 |/ / /
1532 | o / mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
1532 | o / mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
1533 |/|/
1533 |/|/
1534 | o e-2 g -move-> f
1534 | o e-2 g -move-> f
1535 | |
1535 | |
1536 | o e-1 b -move-> g
1536 | o e-1 b -move-> g
1537 | |
1537 | |
1538 o | a-2: e -move-> f
1538 o | a-2: e -move-> f
1539 | |
1539 | |
1540 o | a-1: d -move-> e
1540 o | a-1: d -move-> e
1541 |/
1541 |/
1542 o i-2: c -move-> d, s -move-> t
1542 o i-2: c -move-> d, s -move-> t
1543 |
1543 |
1544 o i-1: a -move-> c, p -move-> s
1544 o i-1: a -move-> c, p -move-> s
1545 |
1545 |
1546 o i-0 initial commit: a b h p q r
1546 o i-0 initial commit: a b h p q r
1547
1547
1548
1548
1549 Summary of all created cases
1549 Summary of all created cases
1550 ----------------------------
1550 ----------------------------
1551
1551
1552 $ hg up --quiet null
1552 $ hg up --quiet null
1553
1553
1554 (This exists to help keeping a compact list of the various cases we have built)
1554 (This exists to help keeping a compact list of the various cases we have built)
1555
1555
1556 $ hg log -T '{desc|firstline}\n'| sort
1556 $ hg log -T '{desc|firstline}\n'| sort
1557 a-1: d -move-> e
1557 a-1: d -move-> e
1558 a-2: e -move-> f
1558 a-2: e -move-> f
1559 b-1: b update
1559 b-1: b update
1560 c-1 delete d
1560 c-1 delete d
1561 d-1 delete d
1561 d-1 delete d
1562 d-2 re-add d
1562 d-2 re-add d
1563 e-1 b -move-> g
1563 e-1 b -move-> g
1564 e-2 g -move-> f
1564 e-2 g -move-> f
1565 f-1: rename h -> i
1565 f-1: rename h -> i
1566 f-2: rename i -> d
1566 f-2: rename i -> d
1567 g-1: update d
1567 g-1: update d
1568 h-1: b -(move)-> d
1568 h-1: b -(move)-> d
1569 i-0 initial commit: a b h p q r
1569 i-0 initial commit: a b h p q r
1570 i-1: a -move-> c, p -move-> s
1570 i-1: a -move-> c, p -move-> s
1571 i-2: c -move-> d, s -move-> t
1571 i-2: c -move-> d, s -move-> t
1572 j-1: unrelated changes (based on the "a" series of changes)
1572 j-1: unrelated changes (based on the "a" series of changes)
1573 k-1: unrelated changes (based on "e" changes)
1573 k-1: unrelated changes (based on "e" changes)
1574 l-1: unrelated changes (based on "c" changes)
1574 l-1: unrelated changes (based on "c" changes)
1575 mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
1575 mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
1576 mAE,Km: chained merges (conflict -> simple) - same content everywhere
1576 mAE,Km: chained merges (conflict -> simple) - same content everywhere
1577 mAE-change,Km: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1577 mAE-change,Km: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1578 mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
1578 mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
1579 mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
1579 mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
1580 mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
1580 mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
1581 mBC+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1581 mBC+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1582 mBC-change-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1582 mBC-change-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1583 mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1583 mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1584 mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
1584 mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
1585 mBCm-1 re-add d
1585 mBCm-1 re-add d
1586 mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
1586 mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
1587 mBF-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
1587 mBF-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
1588 mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
1588 mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
1589 mBRm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - one way
1589 mBRm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - one way
1590 mCB+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1590 mCB+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1591 mCB-change-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1591 mCB-change-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1592 mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1592 mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1593 mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
1593 mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
1594 mCBm-1 re-add d
1594 mCBm-1 re-add d
1595 mCGm-0 merge updated/deleted - revive the file (updated content) - one way
1595 mCGm-0 merge updated/deleted - revive the file (updated content) - one way
1596 mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
1596 mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
1597 mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
1597 mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
1598 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1598 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1599 mEA,Jm: chained merges (conflict -> simple) - same content everywhere
1599 mEA,Jm: chained merges (conflict -> simple) - same content everywhere
1600 mEA-change,Jm: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1600 mEA-change,Jm: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1601 mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
1601 mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
1602 mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
1602 mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
1603 mFB-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
1603 mFB-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
1604 mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
1604 mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
1605 mFG,Om: chained merges (copy-overwrite -> simple) - same content
1605 mFG,Om: chained merges (copy-overwrite -> simple) - same content
1606 mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
1606 mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
1607 mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
1607 mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
1608 mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
1608 mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
1609 mGF,Nm: chained merges (copy-overwrite -> simple) - same content
1609 mGF,Nm: chained merges (copy-overwrite -> simple) - same content
1610 mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
1610 mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
1611 mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
1611 mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
1612 mJ,EA-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1612 mJ,EA-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1613 mJ,EAm: chained merges (conflict -> simple) - same content everywhere
1613 mJ,EAm: chained merges (conflict -> simple) - same content everywhere
1614 mK,AE-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1614 mK,AE-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1615 mK,AEm: chained merges (conflict -> simple) - same content everywhere
1615 mK,AEm: chained merges (conflict -> simple) - same content everywhere
1616 mL,BC+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1616 mL,BC+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1617 mL,CB+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1617 mL,CB+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1618 mN,GFm: chained merges (copy-overwrite -> simple) - same content
1618 mN,GFm: chained merges (copy-overwrite -> simple) - same content
1619 mO,FGm: chained merges (copy-overwrite -> simple) - same content
1619 mO,FGm: chained merges (copy-overwrite -> simple) - same content
1620 mPQ,Tm: chained merges (conflict -> simple) - different content
1620 mPQ,Tm: chained merges (conflict -> simple) - different content
1621 mPQm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - one way
1621 mPQm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - one way
1622 mQP,Sm: chained merges (conflict -> simple) - different content
1622 mQP,Sm: chained merges (conflict -> simple) - different content
1623 mQPm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - the other way
1623 mQPm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - the other way
1624 mRBm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - the other way
1624 mRBm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - the other way
1625 mS,QPm: chained merges (conflict -> simple) - different content
1625 mS,QPm: chained merges (conflict -> simple) - different content
1626 mT,PQm: chained merges (conflict -> simple) - different content
1626 mT,PQm: chained merges (conflict -> simple) - different content
1627 n-1: unrelated changes (based on the "f" series of changes)
1627 n-1: unrelated changes (based on the "f" series of changes)
1628 o-1: unrelated changes (based on "g" changes)
1628 o-1: unrelated changes (based on "g" changes)
1629 p-1: t -move-> u
1629 p-1: t -move-> u
1630 p-2: u -move-> v
1630 p-2: u -move-> v
1631 q-1 r -move-> w
1631 q-1 r -move-> w
1632 q-2 w -move-> v
1632 q-2 w -move-> v
1633 r-1: rename r -> x
1633 r-1: rename r -> x
1634 r-2: rename t -> x
1634 r-2: rename t -> x
1635 s-1: unrelated changes (based on the "p" series of changes)
1635 s-1: unrelated changes (based on the "p" series of changes)
1636 t-1: unrelated changes (based on "q" changes)
1636 t-1: unrelated changes (based on "q" changes)
1637
1637
1638
1638
1639 Test that sidedata computations during upgrades are correct
1639 Test that sidedata computations during upgrades are correct
1640 ===========================================================
1640 ===========================================================
1641
1641
1642 We upgrade a repository that is not using sidedata (the filelog case) and
1642 We upgrade a repository that is not using sidedata (the filelog case) and
1643 check that the same side data have been generated as if they were computed at
1643 check that the same side data have been generated as if they were computed at
1644 commit time.
1644 commit time.
1645
1645
1646
1646
1647 #if upgraded
1647 #if upgraded
1648 $ cat >> $HGRCPATH << EOF
1648 $ cat >> $HGRCPATH << EOF
1649 > [format]
1649 > [format]
1650 > exp-use-copies-side-data-changeset = yes
1650 > exp-use-copies-side-data-changeset = yes
1651 > EOF
1651 > EOF
1652 $ hg debugformat -v | egrep 'changelog-v2|revlog-v2|copies-sdc'
1652 $ hg debugformat -v | egrep 'changelog-v2|revlog-v2|copies-sdc'
1653 copies-sdc: no yes no
1653 copies-sdc: no yes no
1654 revlog-v2: no no no
1654 revlog-v2: no no no
1655 changelog-v2: no yes no
1655 changelog-v2: no yes no
1656 $ hg debugupgraderepo --run --quiet
1656 $ hg debugupgraderepo --run --quiet
1657 upgrade will perform the following actions:
1657 upgrade will perform the following actions:
1658
1658
1659 requirements
1659 requirements
1660 preserved: * (glob)
1660 preserved: * (glob)
1661 added: exp-changelog-v2, exp-copies-sidedata-changeset
1661 added: exp-changelog-v2, exp-copies-sidedata-changeset
1662
1662
1663 processed revlogs:
1663 processed revlogs:
1664 - changelog
1664 - changelog
1665
1665
1666 #endif
1666 #endif
1667
1667
1668 #if upgraded-parallel
1668 #if upgraded-parallel
1669 $ cat >> $HGRCPATH << EOF
1669 $ cat >> $HGRCPATH << EOF
1670 > [format]
1670 > [format]
1671 > exp-use-copies-side-data-changeset = yes
1671 > exp-use-copies-side-data-changeset = yes
1672 > [experimental]
1672 > [experimental]
1673 > worker.repository-upgrade=yes
1673 > worker.repository-upgrade=yes
1674 > [worker]
1674 > [worker]
1675 > enabled=yes
1675 > enabled=yes
1676 > numcpus=8
1676 > numcpus=8
1677 > EOF
1677 > EOF
1678 $ hg debugformat -v | egrep 'changelog-v2|revlog-v2|copies-sdc'
1678 $ hg debugformat -v | egrep 'changelog-v2|revlog-v2|copies-sdc'
1679 copies-sdc: no yes no
1679 copies-sdc: no yes no
1680 revlog-v2: no no no
1680 revlog-v2: no no no
1681 changelog-v2: no yes no
1681 changelog-v2: no yes no
1682 $ hg debugupgraderepo --run --quiet
1682 $ hg debugupgraderepo --run --quiet
1683 upgrade will perform the following actions:
1683 upgrade will perform the following actions:
1684
1684
1685 requirements
1685 requirements
1686 preserved: * (glob)
1686 preserved: * (glob)
1687 added: exp-changelog-v2, exp-copies-sidedata-changeset
1687 added: exp-changelog-v2, exp-copies-sidedata-changeset
1688
1688
1689 processed revlogs:
1689 processed revlogs:
1690 - changelog
1690 - changelog
1691
1691
1692 #endif
1692 #endif
1693
1693
1694 #if pull
1694 #if pull
1695 $ cd ..
1695 $ cd ..
1696 $ mv repo-chain repo-source
1696 $ mv repo-chain repo-source
1697 $ hg init repo-chain
1697 $ hg init repo-chain
1698 $ cd repo-chain
1698 $ cd repo-chain
1699 $ hg pull ../repo-source
1699 $ hg pull ../repo-source
1700 pulling from ../repo-source
1700 pulling from ../repo-source
1701 requesting all changes
1701 requesting all changes
1702 adding changesets
1702 adding changesets
1703 adding manifests
1703 adding manifests
1704 adding file changes
1704 adding file changes
1705 added 80 changesets with 44 changes to 25 files (+39 heads)
1705 added 80 changesets with 44 changes to 25 files (+39 heads)
1706 new changesets a3a31bbefea6:908ce9259ffa
1706 new changesets a3a31bbefea6:908ce9259ffa
1707 (run 'hg heads' to see heads, 'hg merge' to merge)
1707 (run 'hg heads' to see heads, 'hg merge' to merge)
1708 #endif
1708 #endif
1709
1709
1710 #if pull-upgrade
1710 #if pull-upgrade
1711 $ cat >> $HGRCPATH << EOF
1711 $ cat >> $HGRCPATH << EOF
1712 > [format]
1712 > [format]
1713 > exp-use-copies-side-data-changeset = yes
1713 > exp-use-copies-side-data-changeset = yes
1714 > [experimental]
1714 > [experimental]
1715 > changegroup4 = yes
1715 > changegroup4 = yes
1716 > EOF
1716 > EOF
1717 $ cd ..
1717 $ cd ..
1718 $ mv repo-chain repo-source
1718 $ mv repo-chain repo-source
1719 $ hg init repo-chain
1719 $ hg init repo-chain
1720 $ cd repo-chain
1720 $ cd repo-chain
1721 $ hg pull ../repo-source
1721 $ hg pull ../repo-source
1722 pulling from ../repo-source
1722 pulling from ../repo-source
1723 requesting all changes
1723 requesting all changes
1724 adding changesets
1724 adding changesets
1725 adding manifests
1725 adding manifests
1726 adding file changes
1726 adding file changes
1727 added 80 changesets with 44 changes to 25 files (+39 heads)
1727 added 80 changesets with 44 changes to 25 files (+39 heads)
1728 new changesets a3a31bbefea6:908ce9259ffa
1728 new changesets a3a31bbefea6:908ce9259ffa
1729 (run 'hg heads' to see heads, 'hg merge' to merge)
1729 (run 'hg heads' to see heads, 'hg merge' to merge)
1730 #endif
1730 #endif
1731
1731
1732 #if push
1732 #if push
1733 $ cd ..
1733 $ cd ..
1734 $ mv repo-chain repo-source
1734 $ mv repo-chain repo-source
1735 $ hg init repo-chain
1735 $ hg init repo-chain
1736 $ cd repo-source
1736 $ cd repo-source
1737 $ hg push ../repo-chain
1737 $ hg push ../repo-chain
1738 pushing to ../repo-chain
1738 pushing to ../repo-chain
1739 searching for changes
1739 searching for changes
1740 adding changesets
1740 adding changesets
1741 adding manifests
1741 adding manifests
1742 adding file changes
1742 adding file changes
1743 added 80 changesets with 44 changes to 25 files (+39 heads)
1743 added 80 changesets with 44 changes to 25 files (+39 heads)
1744 $ cd ../repo-chain
1744 $ cd ../repo-chain
1745 #endif
1745 #endif
1746
1746
1747 #if push-upgrade
1747 #if push-upgrade
1748 $ cat >> $HGRCPATH << EOF
1748 $ cat >> $HGRCPATH << EOF
1749 > [format]
1749 > [format]
1750 > exp-use-copies-side-data-changeset = yes
1750 > exp-use-copies-side-data-changeset = yes
1751 > [experimental]
1751 > [experimental]
1752 > changegroup4 = yes
1752 > changegroup4 = yes
1753 > EOF
1753 > EOF
1754 $ cd ..
1754 $ cd ..
1755 $ mv repo-chain repo-source
1755 $ mv repo-chain repo-source
1756 $ hg init repo-chain
1756 $ hg init repo-chain
1757 $ cd repo-source
1757 $ cd repo-source
1758 $ hg push ../repo-chain
1758 $ hg push ../repo-chain
1759 pushing to ../repo-chain
1759 pushing to ../repo-chain
1760 searching for changes
1760 searching for changes
1761 adding changesets
1761 adding changesets
1762 adding manifests
1762 adding manifests
1763 adding file changes
1763 adding file changes
1764 added 80 changesets with 44 changes to 25 files (+39 heads)
1764 added 80 changesets with 44 changes to 25 files (+39 heads)
1765 $ cd ../repo-chain
1765 $ cd ../repo-chain
1766 #endif
1766 #endif
1767
1767
1768 #if no-compatibility no-filelog no-changeset
1768 #if no-compatibility no-filelog no-changeset
1769
1769
1770 $ hg debugchangedfiles --compute 0
1770 $ hg debugchangedfiles --compute 0
1771 added : a, ;
1771 added : a, ;
1772 added : b, ;
1772 added : b, ;
1773 added : h, ;
1773 added : h, ;
1774 added : p, ;
1774 added : p, ;
1775 added : q, ;
1775 added : q, ;
1776 added : r, ;
1776 added : r, ;
1777
1777
1778 $ for rev in `hg log --rev 'all()' -T '{rev}\n'`; do
1778 $ for rev in `hg log --rev 'all()' -T '{rev}\n'`; do
1779 > case_id=`hg log -r $rev -T '{word(0, desc, ":")}\n'`
1779 > case_id=`hg log -r $rev -T '{word(0, desc, ":")}\n'`
1780 > echo "##### revision \"$case_id\" #####"
1780 > echo "##### revision \"$case_id\" #####"
1781 > hg debugsidedata -c -v -- $rev
1781 > hg debugsidedata -c -v -- $rev
1782 > hg debugchangedfiles $rev
1782 > hg debugchangedfiles $rev
1783 > done
1783 > done
1784 ##### revision "i-0 initial commit" #####
1784 ##### revision "i-0 initial commit" #####
1785 1 sidedata entries
1785 1 sidedata entries
1786 entry-0014 size 64
1786 entry-0014 size 64
1787 '\x00\x00\x00\x06\x04\x00\x00\x00\x01\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x04\x00\x00\x00\x06\x00\x00\x00\x00abhpqr'
1787 '\x00\x00\x00\x06\x04\x00\x00\x00\x01\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x04\x00\x00\x00\x06\x00\x00\x00\x00abhpqr'
1788 added : a, ;
1788 added : a, ;
1789 added : b, ;
1789 added : b, ;
1790 added : h, ;
1790 added : h, ;
1791 added : p, ;
1791 added : p, ;
1792 added : q, ;
1792 added : q, ;
1793 added : r, ;
1793 added : r, ;
1794 ##### revision "i-1" #####
1794 ##### revision "i-1" #####
1795 1 sidedata entries
1795 1 sidedata entries
1796 entry-0014 size 44
1796 entry-0014 size 44
1797 '\x00\x00\x00\x04\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x0c\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x02acps'
1797 '\x00\x00\x00\x04\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x0c\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x02acps'
1798 removed : a, ;
1798 removed : a, ;
1799 added p1: c, a;
1799 added p1: c, a;
1800 removed : p, ;
1800 removed : p, ;
1801 added p1: s, p;
1801 added p1: s, p;
1802 ##### revision "i-2" #####
1802 ##### revision "i-2" #####
1803 1 sidedata entries
1803 1 sidedata entries
1804 entry-0014 size 44
1804 entry-0014 size 44
1805 '\x00\x00\x00\x04\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x0c\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x02cdst'
1805 '\x00\x00\x00\x04\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x0c\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x02cdst'
1806 removed : c, ;
1806 removed : c, ;
1807 added p1: d, c;
1807 added p1: d, c;
1808 removed : s, ;
1808 removed : s, ;
1809 added p1: t, s;
1809 added p1: t, s;
1810 ##### revision "a-1" #####
1810 ##### revision "a-1" #####
1811 1 sidedata entries
1811 1 sidedata entries
1812 entry-0014 size 24
1812 entry-0014 size 24
1813 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00de'
1813 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00de'
1814 removed : d, ;
1814 removed : d, ;
1815 added p1: e, d;
1815 added p1: e, d;
1816 ##### revision "a-2" #####
1816 ##### revision "a-2" #####
1817 1 sidedata entries
1817 1 sidedata entries
1818 entry-0014 size 24
1818 entry-0014 size 24
1819 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ef'
1819 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ef'
1820 removed : e, ;
1820 removed : e, ;
1821 added p1: f, e;
1821 added p1: f, e;
1822 ##### revision "b-1" #####
1822 ##### revision "b-1" #####
1823 1 sidedata entries
1823 1 sidedata entries
1824 entry-0014 size 14
1824 entry-0014 size 14
1825 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00b'
1825 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00b'
1826 touched : b, ;
1826 touched : b, ;
1827 ##### revision "c-1 delete d" #####
1827 ##### revision "c-1 delete d" #####
1828 1 sidedata entries
1828 1 sidedata entries
1829 entry-0014 size 14
1829 entry-0014 size 14
1830 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
1830 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
1831 removed : d, ;
1831 removed : d, ;
1832 ##### revision "d-1 delete d" #####
1832 ##### revision "d-1 delete d" #####
1833 1 sidedata entries
1833 1 sidedata entries
1834 entry-0014 size 14
1834 entry-0014 size 14
1835 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
1835 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
1836 removed : d, ;
1836 removed : d, ;
1837 ##### revision "d-2 re-add d" #####
1837 ##### revision "d-2 re-add d" #####
1838 1 sidedata entries
1838 1 sidedata entries
1839 entry-0014 size 14
1839 entry-0014 size 14
1840 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
1840 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
1841 added : d, ;
1841 added : d, ;
1842 ##### revision "e-1 b -move-> g" #####
1842 ##### revision "e-1 b -move-> g" #####
1843 1 sidedata entries
1843 1 sidedata entries
1844 entry-0014 size 24
1844 entry-0014 size 24
1845 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bg'
1845 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bg'
1846 removed : b, ;
1846 removed : b, ;
1847 added p1: g, b;
1847 added p1: g, b;
1848 ##### revision "e-2 g -move-> f" #####
1848 ##### revision "e-2 g -move-> f" #####
1849 1 sidedata entries
1849 1 sidedata entries
1850 entry-0014 size 24
1850 entry-0014 size 24
1851 '\x00\x00\x00\x02\x06\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00fg'
1851 '\x00\x00\x00\x02\x06\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00fg'
1852 added p1: f, g;
1852 added p1: f, g;
1853 removed : g, ;
1853 removed : g, ;
1854 ##### revision "p-1" #####
1854 ##### revision "p-1" #####
1855 1 sidedata entries
1855 1 sidedata entries
1856 entry-0014 size 24
1856 entry-0014 size 24
1857 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00tu'
1857 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00tu'
1858 removed : t, ;
1858 removed : t, ;
1859 added p1: u, t;
1859 added p1: u, t;
1860 ##### revision "p-2" #####
1860 ##### revision "p-2" #####
1861 1 sidedata entries
1861 1 sidedata entries
1862 entry-0014 size 24
1862 entry-0014 size 24
1863 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00uv'
1863 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00uv'
1864 removed : u, ;
1864 removed : u, ;
1865 added p1: v, u;
1865 added p1: v, u;
1866 ##### revision "q-1 r -move-> w" #####
1866 ##### revision "q-1 r -move-> w" #####
1867 1 sidedata entries
1867 1 sidedata entries
1868 entry-0014 size 24
1868 entry-0014 size 24
1869 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00rw'
1869 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00rw'
1870 removed : r, ;
1870 removed : r, ;
1871 added p1: w, r;
1871 added p1: w, r;
1872 ##### revision "q-2 w -move-> v" #####
1872 ##### revision "q-2 w -move-> v" #####
1873 1 sidedata entries
1873 1 sidedata entries
1874 entry-0014 size 24
1874 entry-0014 size 24
1875 '\x00\x00\x00\x02\x06\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00vw'
1875 '\x00\x00\x00\x02\x06\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00vw'
1876 added p1: v, w;
1876 added p1: v, w;
1877 removed : w, ;
1877 removed : w, ;
1878 ##### revision "mBAm-0 simple merge - A side" #####
1878 ##### revision "mBAm-0 simple merge - A side" #####
1879 1 sidedata entries
1879 1 sidedata entries
1880 entry-0014 size 4
1880 entry-0014 size 4
1881 '\x00\x00\x00\x00'
1881 '\x00\x00\x00\x00'
1882 ##### revision "mABm-0 simple merge - A side" #####
1882 ##### revision "mABm-0 simple merge - A side" #####
1883 1 sidedata entries
1883 1 sidedata entries
1884 entry-0014 size 4
1884 entry-0014 size 4
1885 '\x00\x00\x00\x00'
1885 '\x00\x00\x00\x00'
1886 ##### revision "mBCm-0 simple merge - C side" #####
1886 ##### revision "mBCm-0 simple merge - C side" #####
1887 1 sidedata entries
1887 1 sidedata entries
1888 entry-0014 size 4
1888 entry-0014 size 4
1889 '\x00\x00\x00\x00'
1889 '\x00\x00\x00\x00'
1890 ##### revision "mBCm-1 re-add d" #####
1890 ##### revision "mBCm-1 re-add d" #####
1891 1 sidedata entries
1891 1 sidedata entries
1892 entry-0014 size 14
1892 entry-0014 size 14
1893 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
1893 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
1894 added : d, ;
1894 added : d, ;
1895 ##### revision "mCBm-0 simple merge - C side" #####
1895 ##### revision "mCBm-0 simple merge - C side" #####
1896 1 sidedata entries
1896 1 sidedata entries
1897 entry-0014 size 4
1897 entry-0014 size 4
1898 '\x00\x00\x00\x00'
1898 '\x00\x00\x00\x00'
1899 ##### revision "mCBm-1 re-add d" #####
1899 ##### revision "mCBm-1 re-add d" #####
1900 1 sidedata entries
1900 1 sidedata entries
1901 entry-0014 size 14
1901 entry-0014 size 14
1902 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
1902 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
1903 added : d, ;
1903 added : d, ;
1904 ##### revision "mBDm-0 simple merge - B side" #####
1904 ##### revision "mBDm-0 simple merge - B side" #####
1905 1 sidedata entries
1905 1 sidedata entries
1906 entry-0014 size 4
1906 entry-0014 size 4
1907 '\x00\x00\x00\x00'
1907 '\x00\x00\x00\x00'
1908 ##### revision "mDBm-0 simple merge - B side" #####
1908 ##### revision "mDBm-0 simple merge - B side" #####
1909 1 sidedata entries
1909 1 sidedata entries
1910 entry-0014 size 4
1910 entry-0014 size 4
1911 '\x00\x00\x00\x00'
1911 '\x00\x00\x00\x00'
1912 ##### revision "mAEm-0 merge with copies info on both side - A side" #####
1912 ##### revision "mAEm-0 merge with copies info on both side - A side" #####
1913 1 sidedata entries
1913 1 sidedata entries
1914 entry-0014 size 14
1914 entry-0014 size 14
1915 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
1915 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
1916 merged : f, ;
1916 merged : f, ;
1917 ##### revision "mEAm-0 merge with copies info on both side - A side" #####
1917 ##### revision "mEAm-0 merge with copies info on both side - A side" #####
1918 1 sidedata entries
1918 1 sidedata entries
1919 entry-0014 size 14
1919 entry-0014 size 14
1920 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
1920 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
1921 merged : f, ;
1921 merged : f, ;
1922 ##### revision "mPQm-0 merge with copies info on both side - P side" #####
1922 ##### revision "mPQm-0 merge with copies info on both side - P side" #####
1923 1 sidedata entries
1923 1 sidedata entries
1924 entry-0014 size 14
1924 entry-0014 size 14
1925 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00v'
1925 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00v'
1926 merged : v, ;
1926 merged : v, ;
1927 ##### revision "mQPm-0 merge with copies info on both side - P side" #####
1927 ##### revision "mQPm-0 merge with copies info on both side - P side" #####
1928 1 sidedata entries
1928 1 sidedata entries
1929 entry-0014 size 14
1929 entry-0014 size 14
1930 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00v'
1930 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00v'
1931 merged : v, ;
1931 merged : v, ;
1932 ##### revision "f-1" #####
1932 ##### revision "f-1" #####
1933 1 sidedata entries
1933 1 sidedata entries
1934 entry-0014 size 24
1934 entry-0014 size 24
1935 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00hi'
1935 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00hi'
1936 removed : h, ;
1936 removed : h, ;
1937 added p1: i, h;
1937 added p1: i, h;
1938 ##### revision "f-2" #####
1938 ##### revision "f-2" #####
1939 1 sidedata entries
1939 1 sidedata entries
1940 entry-0014 size 24
1940 entry-0014 size 24
1941 '\x00\x00\x00\x02\x16\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00di'
1941 '\x00\x00\x00\x02\x16\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00di'
1942 touched p1: d, i;
1942 touched p1: d, i;
1943 removed : i, ;
1943 removed : i, ;
1944 ##### revision "mBFm-0 simple merge - B side" #####
1944 ##### revision "mBFm-0 simple merge - B side" #####
1945 1 sidedata entries
1945 1 sidedata entries
1946 entry-0014 size 4
1946 entry-0014 size 4
1947 '\x00\x00\x00\x00'
1947 '\x00\x00\x00\x00'
1948 ##### revision "mFBm-0 simple merge - B side" #####
1948 ##### revision "mFBm-0 simple merge - B side" #####
1949 1 sidedata entries
1949 1 sidedata entries
1950 entry-0014 size 4
1950 entry-0014 size 4
1951 '\x00\x00\x00\x00'
1951 '\x00\x00\x00\x00'
1952 ##### revision "r-1" #####
1952 ##### revision "r-1" #####
1953 1 sidedata entries
1953 1 sidedata entries
1954 entry-0014 size 24
1954 entry-0014 size 24
1955 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00rx'
1955 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00rx'
1956 removed : r, ;
1956 removed : r, ;
1957 added p1: x, r;
1957 added p1: x, r;
1958 ##### revision "r-2" #####
1958 ##### revision "r-2" #####
1959 1 sidedata entries
1959 1 sidedata entries
1960 entry-0014 size 24
1960 entry-0014 size 24
1961 '\x00\x00\x00\x02\x16\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00tx'
1961 '\x00\x00\x00\x02\x16\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00tx'
1962 touched p1: t, x;
1962 touched p1: t, x;
1963 removed : x, ;
1963 removed : x, ;
1964 ##### revision "mBRm-0 simple merge - B side" #####
1964 ##### revision "mBRm-0 simple merge - B side" #####
1965 1 sidedata entries
1965 1 sidedata entries
1966 entry-0014 size 4
1966 entry-0014 size 4
1967 '\x00\x00\x00\x00'
1967 '\x00\x00\x00\x00'
1968 ##### revision "mRBm-0 simple merge - B side" #####
1968 ##### revision "mRBm-0 simple merge - B side" #####
1969 1 sidedata entries
1969 1 sidedata entries
1970 entry-0014 size 4
1970 entry-0014 size 4
1971 '\x00\x00\x00\x00'
1971 '\x00\x00\x00\x00'
1972 ##### revision "g-1" #####
1972 ##### revision "g-1" #####
1973 1 sidedata entries
1973 1 sidedata entries
1974 entry-0014 size 14
1974 entry-0014 size 14
1975 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00d'
1975 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00d'
1976 touched : d, ;
1976 touched : d, ;
1977 ##### revision "mDGm-0 actual content merge, copies on one side - D side" #####
1977 ##### revision "mDGm-0 actual content merge, copies on one side - D side" #####
1978 1 sidedata entries
1978 1 sidedata entries
1979 entry-0014 size 14
1979 entry-0014 size 14
1980 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1980 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1981 merged : d, ;
1981 merged : d, ;
1982 ##### revision "mGDm-0 actual content merge, copies on one side - D side" #####
1982 ##### revision "mGDm-0 actual content merge, copies on one side - D side" #####
1983 1 sidedata entries
1983 1 sidedata entries
1984 entry-0014 size 14
1984 entry-0014 size 14
1985 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1985 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1986 merged : d, ;
1986 merged : d, ;
1987 ##### revision "mFGm-0 merge - G side" #####
1987 ##### revision "mFGm-0 merge - G side" #####
1988 1 sidedata entries
1988 1 sidedata entries
1989 entry-0014 size 14
1989 entry-0014 size 14
1990 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1990 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1991 merged : d, ;
1991 merged : d, ;
1992 ##### revision "mGFm-0 merge - G side" #####
1992 ##### revision "mGFm-0 merge - G side" #####
1993 1 sidedata entries
1993 1 sidedata entries
1994 entry-0014 size 14
1994 entry-0014 size 14
1995 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1995 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1996 merged : d, ;
1996 merged : d, ;
1997 ##### revision "mCGm-0 merge updated/deleted - revive the file (updated content) - one way" #####
1997 ##### revision "mCGm-0 merge updated/deleted - revive the file (updated content) - one way" #####
1998 1 sidedata entries
1998 1 sidedata entries
1999 entry-0014 size 14
1999 entry-0014 size 14
2000 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
2000 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
2001 salvaged : d, ;
2001 salvaged : d, ;
2002 ##### revision "mGCm-0 merge updated/deleted - revive the file (updated content) - the other way" #####
2002 ##### revision "mGCm-0 merge updated/deleted - revive the file (updated content) - the other way" #####
2003 1 sidedata entries
2003 1 sidedata entries
2004 entry-0014 size 14
2004 entry-0014 size 14
2005 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
2005 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
2006 salvaged : d, ;
2006 salvaged : d, ;
2007 ##### revision "mCB-revert-m-0 merge explicitely revive deleted file - B side" #####
2007 ##### revision "mCB-revert-m-0 merge explicitely revive deleted file - B side" #####
2008 1 sidedata entries
2008 1 sidedata entries
2009 entry-0014 size 14
2009 entry-0014 size 14
2010 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
2010 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
2011 salvaged : d, ;
2011 salvaged : d, ;
2012 ##### revision "mBC-revert-m-0 merge explicitely revive deleted file - B side" #####
2012 ##### revision "mBC-revert-m-0 merge explicitely revive deleted file - B side" #####
2013 1 sidedata entries
2013 1 sidedata entries
2014 entry-0014 size 14
2014 entry-0014 size 14
2015 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
2015 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
2016 salvaged : d, ;
2016 salvaged : d, ;
2017 ##### revision "h-1" #####
2017 ##### revision "h-1" #####
2018 1 sidedata entries
2018 1 sidedata entries
2019 entry-0014 size 24
2019 entry-0014 size 24
2020 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bd'
2020 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bd'
2021 removed : b, ;
2021 removed : b, ;
2022 added p1: d, b;
2022 added p1: d, b;
2023 ##### revision "mCH-delete-before-conflict-m-0 simple merge - C side" #####
2023 ##### revision "mCH-delete-before-conflict-m-0 simple merge - C side" #####
2024 1 sidedata entries
2024 1 sidedata entries
2025 entry-0014 size 4
2025 entry-0014 size 4
2026 '\x00\x00\x00\x00'
2026 '\x00\x00\x00\x00'
2027 ##### revision "mHC-delete-before-conflict-m-0 simple merge - C side" #####
2027 ##### revision "mHC-delete-before-conflict-m-0 simple merge - C side" #####
2028 1 sidedata entries
2028 1 sidedata entries
2029 entry-0014 size 4
2029 entry-0014 size 4
2030 '\x00\x00\x00\x00'
2030 '\x00\x00\x00\x00'
2031 ##### revision "mAE-change-m-0 merge with file update and copies info on both side - A side" #####
2031 ##### revision "mAE-change-m-0 merge with file update and copies info on both side - A side" #####
2032 1 sidedata entries
2032 1 sidedata entries
2033 entry-0014 size 14
2033 entry-0014 size 14
2034 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
2034 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
2035 merged : f, ;
2035 merged : f, ;
2036 ##### revision "mEA-change-m-0 merge with file update and copies info on both side - A side" #####
2036 ##### revision "mEA-change-m-0 merge with file update and copies info on both side - A side" #####
2037 1 sidedata entries
2037 1 sidedata entries
2038 entry-0014 size 14
2038 entry-0014 size 14
2039 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
2039 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
2040 merged : f, ;
2040 merged : f, ;
2041 ##### revision "mBF-change-m-0 merge with extra change - B side" #####
2041 ##### revision "mBF-change-m-0 merge with extra change - B side" #####
2042 1 sidedata entries
2042 1 sidedata entries
2043 entry-0014 size 14
2043 entry-0014 size 14
2044 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00d'
2044 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00d'
2045 touched : d, ;
2045 touched : d, ;
2046 ##### revision "mFB-change-m-0 merge with extra change - B side" #####
2046 ##### revision "mFB-change-m-0 merge with extra change - B side" #####
2047 1 sidedata entries
2047 1 sidedata entries
2048 entry-0014 size 14
2048 entry-0014 size 14
2049 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00d'
2049 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00d'
2050 touched : d, ;
2050 touched : d, ;
2051 ##### revision "mCB-change-m-0 merge explicitely revive deleted file - B side" #####
2051 ##### revision "mCB-change-m-0 merge explicitely revive deleted file - B side" #####
2052 1 sidedata entries
2052 1 sidedata entries
2053 entry-0014 size 14
2053 entry-0014 size 14
2054 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
2054 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
2055 salvaged : d, ;
2055 salvaged : d, ;
2056 ##### revision "mBC-change-m-0 merge explicitely revive deleted file - B side" #####
2056 ##### revision "mBC-change-m-0 merge explicitely revive deleted file - B side" #####
2057 1 sidedata entries
2057 1 sidedata entries
2058 entry-0014 size 14
2058 entry-0014 size 14
2059 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
2059 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
2060 salvaged : d, ;
2060 salvaged : d, ;
2061 ##### revision "j-1" #####
2061 ##### revision "j-1" #####
2062 1 sidedata entries
2062 1 sidedata entries
2063 entry-0014 size 24
2063 entry-0014 size 24
2064 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j'
2064 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j'
2065 added : unrelated-j, ;
2065 added : unrelated-j, ;
2066 ##### revision "k-1" #####
2066 ##### revision "k-1" #####
2067 1 sidedata entries
2067 1 sidedata entries
2068 entry-0014 size 24
2068 entry-0014 size 24
2069 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-k'
2069 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-k'
2070 added : unrelated-k, ;
2070 added : unrelated-k, ;
2071 ##### revision "mAE,Km" #####
2071 ##### revision "mAE,Km" #####
2072 1 sidedata entries
2072 1 sidedata entries
2073 entry-0014 size 4
2073 entry-0014 size 4
2074 '\x00\x00\x00\x00'
2074 '\x00\x00\x00\x00'
2075 ##### revision "mK,AEm" #####
2075 ##### revision "mK,AEm" #####
2076 1 sidedata entries
2076 1 sidedata entries
2077 entry-0014 size 4
2077 entry-0014 size 4
2078 '\x00\x00\x00\x00'
2078 '\x00\x00\x00\x00'
2079 ##### revision "mEA,Jm" #####
2079 ##### revision "mEA,Jm" #####
2080 1 sidedata entries
2080 1 sidedata entries
2081 entry-0014 size 24
2081 entry-0014 size 24
2082 '\x00\x00\x00\x01\x14\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j'
2082 '\x00\x00\x00\x01\x14\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j'
2083 touched : unrelated-j, ;
2083 touched : unrelated-j, ;
2084 ##### revision "mJ,EAm" #####
2084 ##### revision "mJ,EAm" #####
2085 1 sidedata entries
2085 1 sidedata entries
2086 entry-0014 size 24
2086 entry-0014 size 24
2087 '\x00\x00\x00\x01\x14\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j'
2087 '\x00\x00\x00\x01\x14\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j'
2088 touched : unrelated-j, ;
2088 touched : unrelated-j, ;
2089 ##### revision "s-1" #####
2089 ##### revision "s-1" #####
2090 1 sidedata entries
2090 1 sidedata entries
2091 entry-0014 size 24
2091 entry-0014 size 24
2092 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-s'
2092 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-s'
2093 added : unrelated-s, ;
2093 added : unrelated-s, ;
2094 ##### revision "t-1" #####
2094 ##### revision "t-1" #####
2095 1 sidedata entries
2095 1 sidedata entries
2096 entry-0014 size 24
2096 entry-0014 size 24
2097 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-t'
2097 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-t'
2098 added : unrelated-t, ;
2098 added : unrelated-t, ;
2099 ##### revision "mPQ,Tm" #####
2099 ##### revision "mPQ,Tm" #####
2100 1 sidedata entries
2100 1 sidedata entries
2101 entry-0014 size 4
2101 entry-0014 size 4
2102 '\x00\x00\x00\x00'
2102 '\x00\x00\x00\x00'
2103 ##### revision "mT,PQm" #####
2103 ##### revision "mT,PQm" #####
2104 1 sidedata entries
2104 1 sidedata entries
2105 entry-0014 size 4
2105 entry-0014 size 4
2106 '\x00\x00\x00\x00'
2106 '\x00\x00\x00\x00'
2107 ##### revision "mQP,Sm" #####
2107 ##### revision "mQP,Sm" #####
2108 1 sidedata entries
2108 1 sidedata entries
2109 entry-0014 size 4
2109 entry-0014 size 4
2110 '\x00\x00\x00\x00'
2110 '\x00\x00\x00\x00'
2111 ##### revision "mS,QPm" #####
2111 ##### revision "mS,QPm" #####
2112 1 sidedata entries
2112 1 sidedata entries
2113 entry-0014 size 4
2113 entry-0014 size 4
2114 '\x00\x00\x00\x00'
2114 '\x00\x00\x00\x00'
2115 ##### revision "l-1" #####
2115 ##### revision "l-1" #####
2116 1 sidedata entries
2116 1 sidedata entries
2117 entry-0014 size 24
2117 entry-0014 size 24
2118 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-l'
2118 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-l'
2119 added : unrelated-l, ;
2119 added : unrelated-l, ;
2120 ##### revision "mBC+revert,Lm" #####
2120 ##### revision "mBC+revert,Lm" #####
2121 1 sidedata entries
2121 1 sidedata entries
2122 entry-0014 size 4
2122 entry-0014 size 4
2123 '\x00\x00\x00\x00'
2123 '\x00\x00\x00\x00'
2124 ##### revision "mCB+revert,Lm" #####
2124 ##### revision "mCB+revert,Lm" #####
2125 1 sidedata entries
2125 1 sidedata entries
2126 entry-0014 size 4
2126 entry-0014 size 4
2127 '\x00\x00\x00\x00'
2127 '\x00\x00\x00\x00'
2128 ##### revision "mL,BC+revertm" #####
2128 ##### revision "mL,BC+revertm" #####
2129 1 sidedata entries
2129 1 sidedata entries
2130 entry-0014 size 4
2130 entry-0014 size 4
2131 '\x00\x00\x00\x00'
2131 '\x00\x00\x00\x00'
2132 ##### revision "mL,CB+revertm" #####
2132 ##### revision "mL,CB+revertm" #####
2133 1 sidedata entries
2133 1 sidedata entries
2134 entry-0014 size 4
2134 entry-0014 size 4
2135 '\x00\x00\x00\x00'
2135 '\x00\x00\x00\x00'
2136 ##### revision "n-1" #####
2136 ##### revision "n-1" #####
2137 1 sidedata entries
2137 1 sidedata entries
2138 entry-0014 size 24
2138 entry-0014 size 24
2139 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-n'
2139 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-n'
2140 added : unrelated-n, ;
2140 added : unrelated-n, ;
2141 ##### revision "o-1" #####
2141 ##### revision "o-1" #####
2142 1 sidedata entries
2142 1 sidedata entries
2143 entry-0014 size 24
2143 entry-0014 size 24
2144 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-o'
2144 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-o'
2145 added : unrelated-o, ;
2145 added : unrelated-o, ;
2146 ##### revision "mFG,Om" #####
2146 ##### revision "mFG,Om" #####
2147 1 sidedata entries
2147 1 sidedata entries
2148 entry-0014 size 4
2148 entry-0014 size 4
2149 '\x00\x00\x00\x00'
2149 '\x00\x00\x00\x00'
2150 ##### revision "mO,FGm" #####
2150 ##### revision "mO,FGm" #####
2151 1 sidedata entries
2151 1 sidedata entries
2152 entry-0014 size 4
2152 entry-0014 size 4
2153 '\x00\x00\x00\x00'
2153 '\x00\x00\x00\x00'
2154 ##### revision "mGF,Nm" #####
2154 ##### revision "mGF,Nm" #####
2155 1 sidedata entries
2155 1 sidedata entries
2156 entry-0014 size 4
2156 entry-0014 size 4
2157 '\x00\x00\x00\x00'
2157 '\x00\x00\x00\x00'
2158 ##### revision "mN,GFm" #####
2158 ##### revision "mN,GFm" #####
2159 1 sidedata entries
2159 1 sidedata entries
2160 entry-0014 size 4
2160 entry-0014 size 4
2161 '\x00\x00\x00\x00'
2161 '\x00\x00\x00\x00'
2162 ##### revision "mAE-change,Km" #####
2162 ##### revision "mAE-change,Km" #####
2163 1 sidedata entries
2163 1 sidedata entries
2164 entry-0014 size 4
2164 entry-0014 size 4
2165 '\x00\x00\x00\x00'
2165 '\x00\x00\x00\x00'
2166 ##### revision "mK,AE-change-m" #####
2166 ##### revision "mK,AE-change-m" #####
2167 1 sidedata entries
2167 1 sidedata entries
2168 entry-0014 size 4
2168 entry-0014 size 4
2169 '\x00\x00\x00\x00'
2169 '\x00\x00\x00\x00'
2170 ##### revision "mEA-change,Jm" #####
2170 ##### revision "mEA-change,Jm" #####
2171 1 sidedata entries
2171 1 sidedata entries
2172 entry-0014 size 4
2172 entry-0014 size 4
2173 '\x00\x00\x00\x00'
2173 '\x00\x00\x00\x00'
2174 ##### revision "mJ,EA-change-m" #####
2174 ##### revision "mJ,EA-change-m" #####
2175 1 sidedata entries
2175 1 sidedata entries
2176 entry-0014 size 4
2176 entry-0014 size 4
2177 '\x00\x00\x00\x00'
2177 '\x00\x00\x00\x00'
2178
2178
2179 #endif
2179 #endif
2180
2180
2181
2181
2182 Test copy information chaining
2182 Test copy information chaining
2183 ==============================
2183 ==============================
2184
2184
2185 Check that matching only affect the destination and not intermediate path
2185 Check that matching only affect the destination and not intermediate path
2186 -------------------------------------------------------------------------
2186 -------------------------------------------------------------------------
2187
2187
2188 The two status call should give the same value for f
2188 The two status call should give the same value for f
2189
2189
2190 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")'
2190 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")'
2191 A f
2191 A f
2192 a
2192 a
2193 A t
2193 A t
2194 p
2194 p
2195 R a
2195 R a
2196 R p
2196 R p
2197 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")' f
2197 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")' f
2198 A f
2198 A f
2199 a (no-changeset no-compatibility !)
2199 a (no-changeset no-compatibility !)
2200
2200
2201 merging with unrelated change does not interfere with the renames
2201 merging with unrelated change does not interfere with the renames
2202 ---------------------------------------------------------------
2202 ---------------------------------------------------------------
2203
2203
2204 - rename on one side
2204 - rename on one side
2205 - unrelated change on the other side
2205 - unrelated change on the other side
2206
2206
2207 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
2207 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
2208 o mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
2208 o mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
2209 |\
2209 |\
2210 +---o mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
2210 +---o mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
2211 | |/
2211 | |/
2212 | o b-1: b update
2212 | o b-1: b update
2213 | |
2213 | |
2214 o | a-2: e -move-> f
2214 o | a-2: e -move-> f
2215 | |
2215 | |
2216 o | a-1: d -move-> e
2216 o | a-1: d -move-> e
2217 |/
2217 |/
2218 o i-2: c -move-> d, s -move-> t
2218 o i-2: c -move-> d, s -move-> t
2219 |
2219 |
2220 o i-1: a -move-> c, p -move-> s
2220 o i-1: a -move-> c, p -move-> s
2221 |
2221 |
2222 o i-0 initial commit: a b h p q r
2222 o i-0 initial commit: a b h p q r
2223
2223
2224
2224
2225 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")'
2225 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")'
2226 A f
2226 A f
2227 d
2227 d
2228 R d
2228 R d
2229 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")'
2229 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")'
2230 A f
2230 A f
2231 d
2231 d
2232 R d
2232 R d
2233 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")'
2233 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")'
2234 M b
2234 M b
2235 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")'
2235 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")'
2236 M b
2236 M b
2237 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")'
2237 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")'
2238 M b
2238 M b
2239 A f
2239 A f
2240 d
2240 d
2241 R d
2241 R d
2242 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")'
2242 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")'
2243 M b
2243 M b
2244 A f
2244 A f
2245 d
2245 d
2246 R d
2246 R d
2247 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")'
2247 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")'
2248 M b
2248 M b
2249 A f
2249 A f
2250 a
2250 a
2251 A t
2251 A t
2252 p
2252 p
2253 R a
2253 R a
2254 R p
2254 R p
2255 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")'
2255 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")'
2256 M b
2256 M b
2257 A f
2257 A f
2258 a
2258 a
2259 A t
2259 A t
2260 p
2260 p
2261 R a
2261 R a
2262 R p
2262 R p
2263
2263
2264 merging with the side having a delete
2264 merging with the side having a delete
2265 -------------------------------------
2265 -------------------------------------
2266
2266
2267 case summary:
2267 case summary:
2268 - one with change to an unrelated file
2268 - one with change to an unrelated file
2269 - one deleting the change
2269 - one deleting the change
2270 and recreate an unrelated file after the merge
2270 and recreate an unrelated file after the merge
2271
2271
2272 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
2272 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
2273 o mCBm-1 re-add d
2273 o mCBm-1 re-add d
2274 |
2274 |
2275 o mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
2275 o mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
2276 |\
2276 |\
2277 | | o mBCm-1 re-add d
2277 | | o mBCm-1 re-add d
2278 | | |
2278 | | |
2279 +---o mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
2279 +---o mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
2280 | |/
2280 | |/
2281 | o c-1 delete d
2281 | o c-1 delete d
2282 | |
2282 | |
2283 o | b-1: b update
2283 o | b-1: b update
2284 |/
2284 |/
2285 o i-2: c -move-> d, s -move-> t
2285 o i-2: c -move-> d, s -move-> t
2286 |
2286 |
2287 o i-1: a -move-> c, p -move-> s
2287 o i-1: a -move-> c, p -move-> s
2288 |
2288 |
2289 o i-0 initial commit: a b h p q r
2289 o i-0 initial commit: a b h p q r
2290
2290
2291 - comparing from the merge
2291 - comparing from the merge
2292
2292
2293 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")'
2293 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")'
2294 R d
2294 R d
2295 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")'
2295 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")'
2296 R d
2296 R d
2297 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")'
2297 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")'
2298 M b
2298 M b
2299 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")'
2299 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")'
2300 M b
2300 M b
2301 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")'
2301 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")'
2302 M b
2302 M b
2303 R d
2303 R d
2304 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")'
2304 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")'
2305 M b
2305 M b
2306 R d
2306 R d
2307 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")'
2307 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")'
2308 M b
2308 M b
2309 A t
2309 A t
2310 p
2310 p
2311 R a
2311 R a
2312 R p
2312 R p
2313 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")'
2313 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")'
2314 M b
2314 M b
2315 A t
2315 A t
2316 p
2316 p
2317 R a
2317 R a
2318 R p
2318 R p
2319
2319
2320 - comparing with the merge children re-adding the file
2320 - comparing with the merge children re-adding the file
2321
2321
2322 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")'
2322 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")'
2323 M d
2323 M d
2324 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")'
2324 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")'
2325 M d
2325 M d
2326 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")'
2326 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")'
2327 M b
2327 M b
2328 A d
2328 A d
2329 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")'
2329 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")'
2330 M b
2330 M b
2331 A d
2331 A d
2332 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")'
2332 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")'
2333 M b
2333 M b
2334 M d
2334 M d
2335 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")'
2335 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")'
2336 M b
2336 M b
2337 M d
2337 M d
2338 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
2338 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
2339 M b
2339 M b
2340 A d
2340 A d
2341 A t
2341 A t
2342 p
2342 p
2343 R a
2343 R a
2344 R p
2344 R p
2345 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
2345 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
2346 M b
2346 M b
2347 A d
2347 A d
2348 A t
2348 A t
2349 p
2349 p
2350 R a
2350 R a
2351 R p
2351 R p
2352
2352
2353 Comparing with a merge re-adding the file afterward
2353 Comparing with a merge re-adding the file afterward
2354 ---------------------------------------------------
2354 ---------------------------------------------------
2355
2355
2356 Merge:
2356 Merge:
2357 - one with change to an unrelated file
2357 - one with change to an unrelated file
2358 - one deleting and recreating the change
2358 - one deleting and recreating the change
2359
2359
2360 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
2360 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
2361 o mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
2361 o mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
2362 |\
2362 |\
2363 +---o mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
2363 +---o mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
2364 | |/
2364 | |/
2365 | o d-2 re-add d
2365 | o d-2 re-add d
2366 | |
2366 | |
2367 | o d-1 delete d
2367 | o d-1 delete d
2368 | |
2368 | |
2369 o | b-1: b update
2369 o | b-1: b update
2370 |/
2370 |/
2371 o i-2: c -move-> d, s -move-> t
2371 o i-2: c -move-> d, s -move-> t
2372 |
2372 |
2373 o i-1: a -move-> c, p -move-> s
2373 o i-1: a -move-> c, p -move-> s
2374 |
2374 |
2375 o i-0 initial commit: a b h p q r
2375 o i-0 initial commit: a b h p q r
2376
2376
2377 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")'
2377 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")'
2378 M d
2378 M d
2379 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")'
2379 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")'
2380 M d
2380 M d
2381 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")'
2381 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")'
2382 M b
2382 M b
2383 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")'
2383 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")'
2384 M b
2384 M b
2385 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")'
2385 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")'
2386 M b
2386 M b
2387 M d
2387 M d
2388 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")'
2388 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")'
2389 M b
2389 M b
2390 M d
2390 M d
2391
2391
2392 The bugs makes recorded copy is different depending of where we started the merge from since
2392 The bugs makes recorded copy is different depending of where we started the merge from since
2393
2393
2394 $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644 d'
2394 $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644 d'
2395 b004912a8510032a0350a74daa2803dadfb00e12 644 d
2395 b004912a8510032a0350a74daa2803dadfb00e12 644 d
2396 $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644 d'
2396 $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644 d'
2397 b004912a8510032a0350a74daa2803dadfb00e12 644 d
2397 b004912a8510032a0350a74daa2803dadfb00e12 644 d
2398
2398
2399 $ hg manifest --debug --rev 'desc("d-2")' | grep '644 d'
2399 $ hg manifest --debug --rev 'desc("d-2")' | grep '644 d'
2400 b004912a8510032a0350a74daa2803dadfb00e12 644 d
2400 b004912a8510032a0350a74daa2803dadfb00e12 644 d
2401 $ hg manifest --debug --rev 'desc("b-1")' | grep '644 d'
2401 $ hg manifest --debug --rev 'desc("b-1")' | grep '644 d'
2402 d8252ab2e760b0d4e5288fd44cbd15a0fa567e16 644 d (no-changeset !)
2402 d8252ab2e760b0d4e5288fd44cbd15a0fa567e16 644 d (no-changeset !)
2403 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
2403 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
2404 $ hg debugindex d | head -n 4 | "$PYTHON" ../no-linkrev
2404 $ hg debugindex d | head -n 4 | "$PYTHON" ../no-linkrev
2405 rev linkrev nodeid p1 p2
2405 rev linkrev nodeid p1-nodeid p2-nodeid
2406 0 * d8252ab2e760 000000000000 000000000000 (no-changeset !)
2406 0 * d8252ab2e760 000000000000 000000000000 (no-changeset !)
2407 0 * ae258f702dfe 000000000000 000000000000 (changeset !)
2407 0 * ae258f702dfe 000000000000 000000000000 (changeset !)
2408 1 * b004912a8510 000000000000 000000000000
2408 1 * b004912a8510 000000000000 000000000000
2409 2 * 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
2409 2 * 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
2410 2 * 5cce88bf349f ae258f702dfe 000000000000 (changeset !)
2410 2 * 5cce88bf349f ae258f702dfe 000000000000 (changeset !)
2411
2411
2412 Log output should not include a merge commit as it did not happen
2412 Log output should not include a merge commit as it did not happen
2413
2413
2414 $ hg log -Gfr 'desc("mBDm-0")' d
2414 $ hg log -Gfr 'desc("mBDm-0")' d
2415 o d-2 re-add d
2415 o d-2 re-add d
2416 |
2416 |
2417 ~
2417 ~
2418
2418
2419 $ hg log -Gfr 'desc("mDBm-0")' d
2419 $ hg log -Gfr 'desc("mDBm-0")' d
2420 o d-2 re-add d
2420 o d-2 re-add d
2421 |
2421 |
2422 ~
2422 ~
2423
2423
2424 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
2424 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
2425 M b
2425 M b
2426 A d
2426 A d
2427 A t
2427 A t
2428 p
2428 p
2429 R a
2429 R a
2430 R p
2430 R p
2431 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
2431 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
2432 M b
2432 M b
2433 A d
2433 A d
2434 A t
2434 A t
2435 p
2435 p
2436 R a
2436 R a
2437 R p
2437 R p
2438
2438
2439
2439
2440 Comparing with a merge with colliding rename
2440 Comparing with a merge with colliding rename
2441 --------------------------------------------
2441 --------------------------------------------
2442
2442
2443 Subcase: new copy information on both side
2443 Subcase: new copy information on both side
2444 ``````````````````````````````````````````
2444 ``````````````````````````````````````````
2445
2445
2446 - the "e-" branch renaming b to f (through 'g')
2446 - the "e-" branch renaming b to f (through 'g')
2447 - the "a-" branch renaming d to f (through e)
2447 - the "a-" branch renaming d to f (through e)
2448
2448
2449 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
2449 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
2450 o mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
2450 o mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
2451 |\
2451 |\
2452 +---o mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
2452 +---o mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
2453 | |/
2453 | |/
2454 | o e-2 g -move-> f
2454 | o e-2 g -move-> f
2455 | |
2455 | |
2456 | o e-1 b -move-> g
2456 | o e-1 b -move-> g
2457 | |
2457 | |
2458 o | a-2: e -move-> f
2458 o | a-2: e -move-> f
2459 | |
2459 | |
2460 o | a-1: d -move-> e
2460 o | a-1: d -move-> e
2461 |/
2461 |/
2462 o i-2: c -move-> d, s -move-> t
2462 o i-2: c -move-> d, s -move-> t
2463 |
2463 |
2464 o i-1: a -move-> c, p -move-> s
2464 o i-1: a -move-> c, p -move-> s
2465 |
2465 |
2466 o i-0 initial commit: a b h p q r
2466 o i-0 initial commit: a b h p q r
2467
2467
2468 #if no-changeset
2468 #if no-changeset
2469 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
2469 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
2470 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
2470 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
2471 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
2471 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
2472 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
2472 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
2473 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
2473 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
2474 b76eb76580df486c3d51d63c5c210d4dd43a8ac7 644 f
2474 b76eb76580df486c3d51d63c5c210d4dd43a8ac7 644 f
2475 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
2475 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
2476 e8825b386367b29fec957283a80bb47b47483fe1 644 f
2476 e8825b386367b29fec957283a80bb47b47483fe1 644 f
2477 $ hg debugindex f | "$PYTHON" ../no-linkrev
2477 $ hg debugindex f | "$PYTHON" ../no-linkrev
2478 rev linkrev nodeid p1 p2
2478 rev linkrev nodeid p1-nodeid p2-nodeid
2479 0 * b76eb76580df 000000000000 000000000000
2479 0 * b76eb76580df 000000000000 000000000000
2480 1 * e8825b386367 000000000000 000000000000
2480 1 * e8825b386367 000000000000 000000000000
2481 2 * 2ff93c643948 b76eb76580df e8825b386367
2481 2 * 2ff93c643948 b76eb76580df e8825b386367
2482 3 * 2f649fba7eb2 b76eb76580df e8825b386367
2482 3 * 2f649fba7eb2 b76eb76580df e8825b386367
2483 4 * 774e7c1637d5 e8825b386367 b76eb76580df
2483 4 * 774e7c1637d5 e8825b386367 b76eb76580df
2484 #else
2484 #else
2485 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
2485 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
2486 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2486 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2487 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
2487 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
2488 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2488 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2489 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
2489 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
2490 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2490 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2491 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
2491 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
2492 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2492 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2493 $ hg debugindex f | "$PYTHON" ../no-linkrev
2493 $ hg debugindex f | "$PYTHON" ../no-linkrev
2494 rev linkrev nodeid p1 p2
2494 rev linkrev nodeid p1-nodeid p2-nodeid
2495 0 * ae258f702dfe 000000000000 000000000000
2495 0 * ae258f702dfe 000000000000 000000000000
2496 1 * d3613c1ec831 ae258f702dfe 000000000000
2496 1 * d3613c1ec831 ae258f702dfe 000000000000
2497 2 * 05e03c868bbc ae258f702dfe 000000000000
2497 2 * 05e03c868bbc ae258f702dfe 000000000000
2498 #endif
2498 #endif
2499
2499
2500 # Here the filelog based implementation is not looking at the rename
2500 # Here the filelog based implementation is not looking at the rename
2501 # information (because the file exist on both side). However the changelog
2501 # information (because the file exist on both side). However the changelog
2502 # based on works fine. We have different output.
2502 # based on works fine. We have different output.
2503
2503
2504 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAEm-0")'
2504 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAEm-0")'
2505 M f (no-changeset !)
2505 M f (no-changeset !)
2506 b (no-filelog no-changeset !)
2506 b (no-filelog no-changeset !)
2507 R b
2507 R b
2508 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEAm-0")'
2508 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEAm-0")'
2509 M f (no-changeset !)
2509 M f (no-changeset !)
2510 b (no-filelog no-changeset !)
2510 b (no-filelog no-changeset !)
2511 R b
2511 R b
2512 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAEm-0")'
2512 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAEm-0")'
2513 M f (no-changeset !)
2513 M f (no-changeset !)
2514 d (no-filelog no-changeset !)
2514 d (no-filelog no-changeset !)
2515 R d
2515 R d
2516 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEAm-0")'
2516 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEAm-0")'
2517 M f (no-changeset !)
2517 M f (no-changeset !)
2518 d (no-filelog no-changeset !)
2518 d (no-filelog no-changeset !)
2519 R d
2519 R d
2520 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
2520 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
2521 A f
2521 A f
2522 d
2522 d
2523 R d
2523 R d
2524 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
2524 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
2525 A f
2525 A f
2526 b
2526 b
2527 R b
2527 R b
2528
2528
2529 # From here, we run status against revision where both source file exists.
2529 # From here, we run status against revision where both source file exists.
2530 #
2530 #
2531 # The filelog based implementation picks an arbitrary side based on revision
2531 # The filelog based implementation picks an arbitrary side based on revision
2532 # numbers. So the same side "wins" whatever the parents order is. This is
2532 # numbers. So the same side "wins" whatever the parents order is. This is
2533 # sub-optimal because depending on revision numbers means the result can be
2533 # sub-optimal because depending on revision numbers means the result can be
2534 # different from one repository to the next.
2534 # different from one repository to the next.
2535 #
2535 #
2536 # The changeset based algorithm use the parent order to break tie on conflicting
2536 # The changeset based algorithm use the parent order to break tie on conflicting
2537 # information and will have a different order depending on who is p1 and p2.
2537 # information and will have a different order depending on who is p1 and p2.
2538 # That order is stable accross repositories. (data from p1 prevails)
2538 # That order is stable accross repositories. (data from p1 prevails)
2539
2539
2540 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAEm-0")'
2540 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAEm-0")'
2541 A f
2541 A f
2542 d
2542 d
2543 R b
2543 R b
2544 R d
2544 R d
2545 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEAm-0")'
2545 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEAm-0")'
2546 A f
2546 A f
2547 d (filelog !)
2547 d (filelog !)
2548 b (no-filelog !)
2548 b (no-filelog !)
2549 R b
2549 R b
2550 R d
2550 R d
2551 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm-0")'
2551 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm-0")'
2552 A f
2552 A f
2553 a
2553 a
2554 A t
2554 A t
2555 p
2555 p
2556 R a
2556 R a
2557 R b
2557 R b
2558 R p
2558 R p
2559 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm-0")'
2559 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm-0")'
2560 A f
2560 A f
2561 a (filelog !)
2561 a (filelog !)
2562 b (no-filelog !)
2562 b (no-filelog !)
2563 A t
2563 A t
2564 p
2564 p
2565 R a
2565 R a
2566 R b
2566 R b
2567 R p
2567 R p
2568
2568
2569
2569
2570 Subcase: existing copy information overwritten on one branch
2570 Subcase: existing copy information overwritten on one branch
2571 ````````````````````````````````````````````````````````````
2571 ````````````````````````````````````````````````````````````
2572
2572
2573 Note:
2573 Note:
2574 | In this case, one of the merge wrongly record a merge while there is none.
2574 | In this case, one of the merge wrongly record a merge while there is none.
2575 | This lead to bad copy tracing information to be dug up.
2575 | This lead to bad copy tracing information to be dug up.
2576
2576
2577
2577
2578 Merge:
2578 Merge:
2579 - one with change to an unrelated file (b)
2579 - one with change to an unrelated file (b)
2580 - one overwriting a file (d) with a rename (from h to i to d)
2580 - one overwriting a file (d) with a rename (from h to i to d)
2581
2581
2582 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
2582 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
2583 o mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
2583 o mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
2584 |\
2584 |\
2585 +---o mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
2585 +---o mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
2586 | |/
2586 | |/
2587 | o f-2: rename i -> d
2587 | o f-2: rename i -> d
2588 | |
2588 | |
2589 | o f-1: rename h -> i
2589 | o f-1: rename h -> i
2590 | |
2590 | |
2591 o | b-1: b update
2591 o | b-1: b update
2592 |/
2592 |/
2593 o i-2: c -move-> d, s -move-> t
2593 o i-2: c -move-> d, s -move-> t
2594 |
2594 |
2595 o i-1: a -move-> c, p -move-> s
2595 o i-1: a -move-> c, p -move-> s
2596 |
2596 |
2597 o i-0 initial commit: a b h p q r
2597 o i-0 initial commit: a b h p q r
2598
2598
2599 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBFm-0")'
2599 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBFm-0")'
2600 M b
2600 M b
2601 A d
2601 A d
2602 h
2602 h
2603 A t
2603 A t
2604 p
2604 p
2605 R a
2605 R a
2606 R h
2606 R h
2607 R p
2607 R p
2608 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFBm-0")'
2608 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFBm-0")'
2609 M b
2609 M b
2610 A d
2610 A d
2611 h
2611 h
2612 A t
2612 A t
2613 p
2613 p
2614 R a
2614 R a
2615 R h
2615 R h
2616 R p
2616 R p
2617 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBFm-0")'
2617 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBFm-0")'
2618 M d (no-changeset !)
2618 M d (no-changeset !)
2619 h (no-filelog no-changeset !)
2619 h (no-filelog no-changeset !)
2620 R h
2620 R h
2621 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mBFm-0")'
2621 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mBFm-0")'
2622 M b
2622 M b
2623 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mBFm-0")'
2623 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mBFm-0")'
2624 M b
2624 M b
2625 M d (no-changeset !)
2625 M d (no-changeset !)
2626 i (no-filelog no-changeset !)
2626 i (no-filelog no-changeset !)
2627 R i
2627 R i
2628 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mFBm-0")'
2628 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mFBm-0")'
2629 M d (no-changeset !)
2629 M d (no-changeset !)
2630 h (no-filelog no-changeset !)
2630 h (no-filelog no-changeset !)
2631 R h
2631 R h
2632 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFBm-0")'
2632 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFBm-0")'
2633 M b
2633 M b
2634 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFBm-0")'
2634 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFBm-0")'
2635 M b
2635 M b
2636 M d (no-changeset !)
2636 M d (no-changeset !)
2637 i (no-filelog no-changeset !)
2637 i (no-filelog no-changeset !)
2638 R i
2638 R i
2639
2639
2640 #if no-changeset
2640 #if no-changeset
2641 $ hg log -Gfr 'desc("mBFm-0")' d
2641 $ hg log -Gfr 'desc("mBFm-0")' d
2642 o f-2: rename i -> d
2642 o f-2: rename i -> d
2643 |
2643 |
2644 o f-1: rename h -> i
2644 o f-1: rename h -> i
2645 :
2645 :
2646 o i-0 initial commit: a b h p q r
2646 o i-0 initial commit: a b h p q r
2647
2647
2648 #else
2648 #else
2649 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2649 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2650 $ hg log -Gfr 'desc("mBFm-0")' d
2650 $ hg log -Gfr 'desc("mBFm-0")' d
2651 o i-2: c -move-> d, s -move-> t
2651 o i-2: c -move-> d, s -move-> t
2652 |
2652 |
2653 ~
2653 ~
2654 #endif
2654 #endif
2655
2655
2656 #if no-changeset
2656 #if no-changeset
2657 $ hg log -Gfr 'desc("mFBm-0")' d
2657 $ hg log -Gfr 'desc("mFBm-0")' d
2658 o f-2: rename i -> d
2658 o f-2: rename i -> d
2659 |
2659 |
2660 o f-1: rename h -> i
2660 o f-1: rename h -> i
2661 :
2661 :
2662 o i-0 initial commit: a b h p q r
2662 o i-0 initial commit: a b h p q r
2663
2663
2664 #else
2664 #else
2665 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2665 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2666 $ hg log -Gfr 'desc("mFBm-0")' d
2666 $ hg log -Gfr 'desc("mFBm-0")' d
2667 o i-2: c -move-> d, s -move-> t
2667 o i-2: c -move-> d, s -move-> t
2668 |
2668 |
2669 ~
2669 ~
2670 #endif
2670 #endif
2671
2671
2672
2672
2673 Subcase: existing copy information overwritten on one branch, with different content)
2673 Subcase: existing copy information overwritten on one branch, with different content)
2674 `````````````````````````````````````````````````````````````````````````````````````
2674 `````````````````````````````````````````````````````````````````````````````````````
2675
2675
2676 Merge:
2676 Merge:
2677 - one with change to an unrelated file (b)
2677 - one with change to an unrelated file (b)
2678 - one overwriting a file (t) with a rename (from r to x to t), v content is not the same as on the other branch
2678 - one overwriting a file (t) with a rename (from r to x to t), v content is not the same as on the other branch
2679
2679
2680 $ hg log -G --rev '::(desc("mBRm")+desc("mRBm"))'
2680 $ hg log -G --rev '::(desc("mBRm")+desc("mRBm"))'
2681 o mRBm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - the other way
2681 o mRBm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - the other way
2682 |\
2682 |\
2683 +---o mBRm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - one way
2683 +---o mBRm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - one way
2684 | |/
2684 | |/
2685 | o r-2: rename t -> x
2685 | o r-2: rename t -> x
2686 | |
2686 | |
2687 | o r-1: rename r -> x
2687 | o r-1: rename r -> x
2688 | |
2688 | |
2689 o | b-1: b update
2689 o | b-1: b update
2690 |/
2690 |/
2691 o i-2: c -move-> d, s -move-> t
2691 o i-2: c -move-> d, s -move-> t
2692 |
2692 |
2693 o i-1: a -move-> c, p -move-> s
2693 o i-1: a -move-> c, p -move-> s
2694 |
2694 |
2695 o i-0 initial commit: a b h p q r
2695 o i-0 initial commit: a b h p q r
2696
2696
2697 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBRm-0")'
2697 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBRm-0")'
2698 M b
2698 M b
2699 A d
2699 A d
2700 a
2700 a
2701 A t
2701 A t
2702 r
2702 r
2703 R a
2703 R a
2704 R p
2704 R p
2705 R r
2705 R r
2706 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mRBm-0")'
2706 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mRBm-0")'
2707 M b
2707 M b
2708 A d
2708 A d
2709 a
2709 a
2710 A t
2710 A t
2711 r
2711 r
2712 R a
2712 R a
2713 R p
2713 R p
2714 R r
2714 R r
2715 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBRm-0")'
2715 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBRm-0")'
2716 M t
2716 M t
2717 r (no-filelog !)
2717 r (no-filelog !)
2718 R r
2718 R r
2719 $ hg status --copies --rev 'desc("r-2")' --rev 'desc("mBRm-0")'
2719 $ hg status --copies --rev 'desc("r-2")' --rev 'desc("mBRm-0")'
2720 M b
2720 M b
2721 $ hg status --copies --rev 'desc("r-1")' --rev 'desc("mBRm-0")'
2721 $ hg status --copies --rev 'desc("r-1")' --rev 'desc("mBRm-0")'
2722 M b
2722 M b
2723 M t
2723 M t
2724 x (no-filelog !)
2724 x (no-filelog !)
2725 R x
2725 R x
2726 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mRBm-0")'
2726 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mRBm-0")'
2727 M t
2727 M t
2728 r (no-filelog !)
2728 r (no-filelog !)
2729 R r
2729 R r
2730 $ hg status --copies --rev 'desc("r-2")' --rev 'desc("mRBm-0")'
2730 $ hg status --copies --rev 'desc("r-2")' --rev 'desc("mRBm-0")'
2731 M b
2731 M b
2732 $ hg status --copies --rev 'desc("r-1")' --rev 'desc("mRBm-0")'
2732 $ hg status --copies --rev 'desc("r-1")' --rev 'desc("mRBm-0")'
2733 M b
2733 M b
2734 M t
2734 M t
2735 x (no-filelog !)
2735 x (no-filelog !)
2736 R x
2736 R x
2737
2737
2738 #if no-changeset
2738 #if no-changeset
2739 $ hg log -Gfr 'desc("mBRm-0")' d
2739 $ hg log -Gfr 'desc("mBRm-0")' d
2740 o i-2: c -move-> d, s -move-> t
2740 o i-2: c -move-> d, s -move-> t
2741 |
2741 |
2742 o i-1: a -move-> c, p -move-> s
2742 o i-1: a -move-> c, p -move-> s
2743 |
2743 |
2744 o i-0 initial commit: a b h p q r
2744 o i-0 initial commit: a b h p q r
2745
2745
2746 #else
2746 #else
2747 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2747 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2748 $ hg log -Gfr 'desc("mBRm-0")' d
2748 $ hg log -Gfr 'desc("mBRm-0")' d
2749 o i-2: c -move-> d, s -move-> t
2749 o i-2: c -move-> d, s -move-> t
2750 |
2750 |
2751 ~
2751 ~
2752 #endif
2752 #endif
2753
2753
2754 #if no-changeset
2754 #if no-changeset
2755 $ hg log -Gfr 'desc("mRBm-0")' d
2755 $ hg log -Gfr 'desc("mRBm-0")' d
2756 o i-2: c -move-> d, s -move-> t
2756 o i-2: c -move-> d, s -move-> t
2757 |
2757 |
2758 o i-1: a -move-> c, p -move-> s
2758 o i-1: a -move-> c, p -move-> s
2759 |
2759 |
2760 o i-0 initial commit: a b h p q r
2760 o i-0 initial commit: a b h p q r
2761
2761
2762 #else
2762 #else
2763 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2763 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2764 $ hg log -Gfr 'desc("mRBm-0")' d
2764 $ hg log -Gfr 'desc("mRBm-0")' d
2765 o i-2: c -move-> d, s -move-> t
2765 o i-2: c -move-> d, s -move-> t
2766 |
2766 |
2767 ~
2767 ~
2768 #endif
2768 #endif
2769
2769
2770 Subcase: reset of the copy history on one side
2770 Subcase: reset of the copy history on one side
2771 ``````````````````````````````````````````````
2771 ``````````````````````````````````````````````
2772
2772
2773 Merge:
2773 Merge:
2774 - one with change to a file
2774 - one with change to a file
2775 - one deleting and recreating the file
2775 - one deleting and recreating the file
2776
2776
2777 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
2777 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
2778 consider history and rename on both branch of the merge.
2778 consider history and rename on both branch of the merge.
2779
2779
2780 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
2780 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
2781 o mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
2781 o mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
2782 |\
2782 |\
2783 +---o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2783 +---o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2784 | |/
2784 | |/
2785 | o g-1: update d
2785 | o g-1: update d
2786 | |
2786 | |
2787 o | d-2 re-add d
2787 o | d-2 re-add d
2788 | |
2788 | |
2789 o | d-1 delete d
2789 o | d-1 delete d
2790 |/
2790 |/
2791 o i-2: c -move-> d, s -move-> t
2791 o i-2: c -move-> d, s -move-> t
2792 |
2792 |
2793 o i-1: a -move-> c, p -move-> s
2793 o i-1: a -move-> c, p -move-> s
2794 |
2794 |
2795 o i-0 initial commit: a b h p q r
2795 o i-0 initial commit: a b h p q r
2796
2796
2797 One side of the merge have a long history with rename. The other side of the
2797 One side of the merge have a long history with rename. The other side of the
2798 merge point to a new file with a smaller history. Each side is "valid".
2798 merge point to a new file with a smaller history. Each side is "valid".
2799
2799
2800 (and again the filelog based algorithm only explore one, with a pick based on
2800 (and again the filelog based algorithm only explore one, with a pick based on
2801 revision numbers)
2801 revision numbers)
2802
2802
2803 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDGm-0")'
2803 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDGm-0")'
2804 A d
2804 A d
2805 a (filelog !)
2805 a (filelog !)
2806 A t
2806 A t
2807 p
2807 p
2808 R a
2808 R a
2809 R p
2809 R p
2810 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGDm-0")'
2810 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGDm-0")'
2811 A d
2811 A d
2812 a
2812 a
2813 A t
2813 A t
2814 p
2814 p
2815 R a
2815 R a
2816 R p
2816 R p
2817 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDGm-0")'
2817 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDGm-0")'
2818 M d
2818 M d
2819 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mGDm-0")'
2819 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mGDm-0")'
2820 M d
2820 M d
2821 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mDGm-0")'
2821 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mDGm-0")'
2822 M d
2822 M d
2823 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGDm-0")'
2823 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGDm-0")'
2824 M d
2824 M d
2825
2825
2826 #if no-changeset
2826 #if no-changeset
2827 $ hg log -Gfr 'desc("mDGm-0")' d
2827 $ hg log -Gfr 'desc("mDGm-0")' d
2828 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2828 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2829 |\
2829 |\
2830 | o g-1: update d
2830 | o g-1: update d
2831 | |
2831 | |
2832 o | d-2 re-add d
2832 o | d-2 re-add d
2833 |/
2833 |/
2834 o i-2: c -move-> d, s -move-> t
2834 o i-2: c -move-> d, s -move-> t
2835 |
2835 |
2836 o i-1: a -move-> c, p -move-> s
2836 o i-1: a -move-> c, p -move-> s
2837 |
2837 |
2838 o i-0 initial commit: a b h p q r
2838 o i-0 initial commit: a b h p q r
2839
2839
2840 #else
2840 #else
2841 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2841 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2842 $ hg log -Gfr 'desc("mDGm-0")' d
2842 $ hg log -Gfr 'desc("mDGm-0")' d
2843 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2843 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2844 |\
2844 |\
2845 | o g-1: update d
2845 | o g-1: update d
2846 | |
2846 | |
2847 o | d-2 re-add d
2847 o | d-2 re-add d
2848 |/
2848 |/
2849 o i-2: c -move-> d, s -move-> t
2849 o i-2: c -move-> d, s -move-> t
2850 |
2850 |
2851 ~
2851 ~
2852 #endif
2852 #endif
2853
2853
2854
2854
2855 #if no-changeset
2855 #if no-changeset
2856 $ hg log -Gfr 'desc("mDGm-0")' d
2856 $ hg log -Gfr 'desc("mDGm-0")' d
2857 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2857 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2858 |\
2858 |\
2859 | o g-1: update d
2859 | o g-1: update d
2860 | |
2860 | |
2861 o | d-2 re-add d
2861 o | d-2 re-add d
2862 |/
2862 |/
2863 o i-2: c -move-> d, s -move-> t
2863 o i-2: c -move-> d, s -move-> t
2864 |
2864 |
2865 o i-1: a -move-> c, p -move-> s
2865 o i-1: a -move-> c, p -move-> s
2866 |
2866 |
2867 o i-0 initial commit: a b h p q r
2867 o i-0 initial commit: a b h p q r
2868
2868
2869 #else
2869 #else
2870 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2870 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2871 $ hg log -Gfr 'desc("mDGm-0")' d
2871 $ hg log -Gfr 'desc("mDGm-0")' d
2872 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2872 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2873 |\
2873 |\
2874 | o g-1: update d
2874 | o g-1: update d
2875 | |
2875 | |
2876 o | d-2 re-add d
2876 o | d-2 re-add d
2877 |/
2877 |/
2878 o i-2: c -move-> d, s -move-> t
2878 o i-2: c -move-> d, s -move-> t
2879 |
2879 |
2880 ~
2880 ~
2881 #endif
2881 #endif
2882
2882
2883 Subcase: merging a change to a file with a "copy overwrite" to that file from another branch
2883 Subcase: merging a change to a file with a "copy overwrite" to that file from another branch
2884 ````````````````````````````````````````````````````````````````````````````````````````````
2884 ````````````````````````````````````````````````````````````````````````````````````````````
2885
2885
2886 Merge:
2886 Merge:
2887 - one with change to a file (d)
2887 - one with change to a file (d)
2888 - one overwriting that file with a rename (from h to i, to d)
2888 - one overwriting that file with a rename (from h to i, to d)
2889
2889
2890 This case is similar to BF/FB, but an actual merge happens, so both side of the
2890 This case is similar to BF/FB, but an actual merge happens, so both side of the
2891 history are relevant.
2891 history are relevant.
2892
2892
2893
2893
2894 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
2894 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
2895 o mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
2895 o mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
2896 |\
2896 |\
2897 +---o mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
2897 +---o mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
2898 | |/
2898 | |/
2899 | o g-1: update d
2899 | o g-1: update d
2900 | |
2900 | |
2901 o | f-2: rename i -> d
2901 o | f-2: rename i -> d
2902 | |
2902 | |
2903 o | f-1: rename h -> i
2903 o | f-1: rename h -> i
2904 |/
2904 |/
2905 o i-2: c -move-> d, s -move-> t
2905 o i-2: c -move-> d, s -move-> t
2906 |
2906 |
2907 o i-1: a -move-> c, p -move-> s
2907 o i-1: a -move-> c, p -move-> s
2908 |
2908 |
2909 o i-0 initial commit: a b h p q r
2909 o i-0 initial commit: a b h p q r
2910
2910
2911
2911
2912 Note:
2912 Note:
2913 | In this case, the merge get conflicting information since on one side we have
2913 | In this case, the merge get conflicting information since on one side we have
2914 | "a -> c -> d". and one the other one we have "h -> i -> d".
2914 | "a -> c -> d". and one the other one we have "h -> i -> d".
2915 |
2915 |
2916 | The current code arbitrarily pick one side depending the ordering of the merged hash:
2916 | The current code arbitrarily pick one side depending the ordering of the merged hash:
2917
2917
2918 In this case, the file hash from "f-2" is lower, so it will be `p1` of the resulting filenode its copy tracing information will win (and trace back to "h"):
2918 In this case, the file hash from "f-2" is lower, so it will be `p1` of the resulting filenode its copy tracing information will win (and trace back to "h"):
2919
2919
2920 Details on this hash ordering pick:
2920 Details on this hash ordering pick:
2921
2921
2922 $ hg manifest --debug 'desc("g-1")' | egrep 'd$'
2922 $ hg manifest --debug 'desc("g-1")' | egrep 'd$'
2923 17ec97e605773eb44a117d1136b3849bcdc1924f 644 d (no-changeset !)
2923 17ec97e605773eb44a117d1136b3849bcdc1924f 644 d (no-changeset !)
2924 5cce88bf349f7c742bb440f2c53f81db9c294279 644 d (changeset !)
2924 5cce88bf349f7c742bb440f2c53f81db9c294279 644 d (changeset !)
2925 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("g-1")' d
2925 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("g-1")' d
2926 A d
2926 A d
2927 a (no-changeset no-compatibility !)
2927 a (no-changeset no-compatibility !)
2928
2928
2929 $ hg manifest --debug 'desc("f-2")' | egrep 'd$'
2929 $ hg manifest --debug 'desc("f-2")' | egrep 'd$'
2930 7b79e2fe0c8924e0e598a82f048a7b024afa4d96 644 d (no-changeset !)
2930 7b79e2fe0c8924e0e598a82f048a7b024afa4d96 644 d (no-changeset !)
2931 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
2931 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
2932 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("f-2")' d
2932 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("f-2")' d
2933 A d
2933 A d
2934 h (no-changeset no-compatibility !)
2934 h (no-changeset no-compatibility !)
2935
2935
2936 Copy tracing data on the resulting merge:
2936 Copy tracing data on the resulting merge:
2937
2937
2938 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm-0")'
2938 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm-0")'
2939 A d
2939 A d
2940 h (no-filelog !)
2940 h (no-filelog !)
2941 a (filelog !)
2941 a (filelog !)
2942 A t
2942 A t
2943 p
2943 p
2944 R a
2944 R a
2945 R h
2945 R h
2946 R p
2946 R p
2947 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm-0")'
2947 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm-0")'
2948 A d
2948 A d
2949 a (no-changeset !)
2949 a (no-changeset !)
2950 h (changeset !)
2950 h (changeset !)
2951 A t
2951 A t
2952 p
2952 p
2953 R a
2953 R a
2954 R h
2954 R h
2955 R p
2955 R p
2956 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFGm-0")'
2956 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFGm-0")'
2957 M d
2957 M d
2958 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mGFm-0")'
2958 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mGFm-0")'
2959 M d
2959 M d
2960 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFGm-0")'
2960 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFGm-0")'
2961 M d
2961 M d
2962 i (no-filelog !)
2962 i (no-filelog !)
2963 R i
2963 R i
2964 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mGFm-0")'
2964 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mGFm-0")'
2965 M d
2965 M d
2966 i (no-filelog !)
2966 i (no-filelog !)
2967 R i
2967 R i
2968 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mFGm-0")'
2968 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mFGm-0")'
2969 M d (no-changeset !)
2969 M d (no-changeset !)
2970 h (no-filelog no-changeset !)
2970 h (no-filelog no-changeset !)
2971 R h
2971 R h
2972 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGFm-0")'
2972 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGFm-0")'
2973 M d (no-changeset !)
2973 M d (no-changeset !)
2974 h (no-filelog no-changeset !)
2974 h (no-filelog no-changeset !)
2975 R h
2975 R h
2976
2976
2977 #if no-changeset
2977 #if no-changeset
2978 $ hg log -Gfr 'desc("mFGm-0")' d
2978 $ hg log -Gfr 'desc("mFGm-0")' d
2979 o mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
2979 o mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
2980 |\
2980 |\
2981 | o g-1: update d
2981 | o g-1: update d
2982 | |
2982 | |
2983 o | f-2: rename i -> d
2983 o | f-2: rename i -> d
2984 | |
2984 | |
2985 o | f-1: rename h -> i
2985 o | f-1: rename h -> i
2986 |/
2986 |/
2987 o i-2: c -move-> d, s -move-> t
2987 o i-2: c -move-> d, s -move-> t
2988 |
2988 |
2989 o i-1: a -move-> c, p -move-> s
2989 o i-1: a -move-> c, p -move-> s
2990 |
2990 |
2991 o i-0 initial commit: a b h p q r
2991 o i-0 initial commit: a b h p q r
2992
2992
2993 #else
2993 #else
2994 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2994 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2995 $ hg log -Gfr 'desc("mFGm-0")' d
2995 $ hg log -Gfr 'desc("mFGm-0")' d
2996 o g-1: update d
2996 o g-1: update d
2997 |
2997 |
2998 o i-2: c -move-> d, s -move-> t
2998 o i-2: c -move-> d, s -move-> t
2999 |
2999 |
3000 ~
3000 ~
3001 #endif
3001 #endif
3002
3002
3003 #if no-changeset
3003 #if no-changeset
3004 $ hg log -Gfr 'desc("mGFm-0")' d
3004 $ hg log -Gfr 'desc("mGFm-0")' d
3005 o mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
3005 o mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
3006 |\
3006 |\
3007 | o g-1: update d
3007 | o g-1: update d
3008 | |
3008 | |
3009 o | f-2: rename i -> d
3009 o | f-2: rename i -> d
3010 | |
3010 | |
3011 o | f-1: rename h -> i
3011 o | f-1: rename h -> i
3012 |/
3012 |/
3013 o i-2: c -move-> d, s -move-> t
3013 o i-2: c -move-> d, s -move-> t
3014 |
3014 |
3015 o i-1: a -move-> c, p -move-> s
3015 o i-1: a -move-> c, p -move-> s
3016 |
3016 |
3017 o i-0 initial commit: a b h p q r
3017 o i-0 initial commit: a b h p q r
3018
3018
3019 #else
3019 #else
3020 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
3020 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
3021 $ hg log -Gfr 'desc("mGFm-0")' d
3021 $ hg log -Gfr 'desc("mGFm-0")' d
3022 o g-1: update d
3022 o g-1: update d
3023 |
3023 |
3024 o i-2: c -move-> d, s -move-> t
3024 o i-2: c -move-> d, s -move-> t
3025 |
3025 |
3026 ~
3026 ~
3027 #endif
3027 #endif
3028
3028
3029 Subcase: new copy information on both side with an actual merge happening
3029 Subcase: new copy information on both side with an actual merge happening
3030 `````````````````````````````````````````````````````````````````````````
3030 `````````````````````````````````````````````````````````````````````````
3031
3031
3032 - the "p-" branch renaming 't' to 'v' (through 'u')
3032 - the "p-" branch renaming 't' to 'v' (through 'u')
3033 - the "q-" branch renaming 'r' to 'v' (through 'w')
3033 - the "q-" branch renaming 'r' to 'v' (through 'w')
3034
3034
3035
3035
3036 $ hg log -G --rev '::(desc("mPQm")+desc("mQPm"))'
3036 $ hg log -G --rev '::(desc("mPQm")+desc("mQPm"))'
3037 o mQPm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - the other way
3037 o mQPm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - the other way
3038 |\
3038 |\
3039 +---o mPQm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - one way
3039 +---o mPQm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - one way
3040 | |/
3040 | |/
3041 | o q-2 w -move-> v
3041 | o q-2 w -move-> v
3042 | |
3042 | |
3043 | o q-1 r -move-> w
3043 | o q-1 r -move-> w
3044 | |
3044 | |
3045 o | p-2: u -move-> v
3045 o | p-2: u -move-> v
3046 | |
3046 | |
3047 o | p-1: t -move-> u
3047 o | p-1: t -move-> u
3048 |/
3048 |/
3049 o i-2: c -move-> d, s -move-> t
3049 o i-2: c -move-> d, s -move-> t
3050 |
3050 |
3051 o i-1: a -move-> c, p -move-> s
3051 o i-1: a -move-> c, p -move-> s
3052 |
3052 |
3053 o i-0 initial commit: a b h p q r
3053 o i-0 initial commit: a b h p q r
3054
3054
3055
3055
3056 #if no-changeset
3056 #if no-changeset
3057 $ hg manifest --debug --rev 'desc("mPQm-0")' | grep '644 v'
3057 $ hg manifest --debug --rev 'desc("mPQm-0")' | grep '644 v'
3058 0946c662ef16e4e67397fd717389eb6693d41749 644 v
3058 0946c662ef16e4e67397fd717389eb6693d41749 644 v
3059 $ hg manifest --debug --rev 'desc("mQPm-0")' | grep '644 v'
3059 $ hg manifest --debug --rev 'desc("mQPm-0")' | grep '644 v'
3060 0db3aad7fcc1ec27fab57060e327b9e864ea0cc9 644 v
3060 0db3aad7fcc1ec27fab57060e327b9e864ea0cc9 644 v
3061 $ hg manifest --debug --rev 'desc("p-2")' | grep '644 v'
3061 $ hg manifest --debug --rev 'desc("p-2")' | grep '644 v'
3062 3f91841cd75cadc9a1f1b4e7c1aa6d411f76032e 644 v
3062 3f91841cd75cadc9a1f1b4e7c1aa6d411f76032e 644 v
3063 $ hg manifest --debug --rev 'desc("q-2")' | grep '644 v'
3063 $ hg manifest --debug --rev 'desc("q-2")' | grep '644 v'
3064 c43c088b811fd27983c0a9aadf44f3343cd4cd7e 644 v
3064 c43c088b811fd27983c0a9aadf44f3343cd4cd7e 644 v
3065 $ hg debugindex v | "$PYTHON" ../no-linkrev
3065 $ hg debugindex v | "$PYTHON" ../no-linkrev
3066 rev linkrev nodeid p1 p2
3066 rev linkrev nodeid p1-nodeid p2-nodeid
3067 0 * 3f91841cd75c 000000000000 000000000000
3067 0 * 3f91841cd75c 000000000000 000000000000
3068 1 * c43c088b811f 000000000000 000000000000
3068 1 * c43c088b811f 000000000000 000000000000
3069 2 * 0946c662ef16 3f91841cd75c c43c088b811f
3069 2 * 0946c662ef16 3f91841cd75c c43c088b811f
3070 3 * 0db3aad7fcc1 c43c088b811f 3f91841cd75c
3070 3 * 0db3aad7fcc1 c43c088b811f 3f91841cd75c
3071 #else
3071 #else
3072 $ hg manifest --debug --rev 'desc("mPQm-0")' | grep '644 v'
3072 $ hg manifest --debug --rev 'desc("mPQm-0")' | grep '644 v'
3073 65fde9f6e4d4da23b3f610e07b53673ea9541d75 644 v
3073 65fde9f6e4d4da23b3f610e07b53673ea9541d75 644 v
3074 $ hg manifest --debug --rev 'desc("mQPm-0")' | grep '644 v'
3074 $ hg manifest --debug --rev 'desc("mQPm-0")' | grep '644 v'
3075 a098dda6413aecf154eefc976afc38b295acb7e5 644 v
3075 a098dda6413aecf154eefc976afc38b295acb7e5 644 v
3076 $ hg manifest --debug --rev 'desc("p-2")' | grep '644 v'
3076 $ hg manifest --debug --rev 'desc("p-2")' | grep '644 v'
3077 5aed6a8dbff0301328c08360d24354d3d064cf0d 644 v
3077 5aed6a8dbff0301328c08360d24354d3d064cf0d 644 v
3078 $ hg manifest --debug --rev 'desc("q-2")' | grep '644 v'
3078 $ hg manifest --debug --rev 'desc("q-2")' | grep '644 v'
3079 a38b2fa170219750dac9bc7d19df831f213ba708 644 v
3079 a38b2fa170219750dac9bc7d19df831f213ba708 644 v
3080 $ hg debugindex v | "$PYTHON" ../no-linkrev
3080 $ hg debugindex v | "$PYTHON" ../no-linkrev
3081 rev linkrev nodeid p1 p2
3081 rev linkrev nodeid p1-nodeid p2-nodeid
3082 0 * 5aed6a8dbff0 000000000000 000000000000
3082 0 * 5aed6a8dbff0 000000000000 000000000000
3083 1 * a38b2fa17021 000000000000 000000000000
3083 1 * a38b2fa17021 000000000000 000000000000
3084 2 * 65fde9f6e4d4 5aed6a8dbff0 a38b2fa17021
3084 2 * 65fde9f6e4d4 5aed6a8dbff0 a38b2fa17021
3085 3 * a098dda6413a a38b2fa17021 5aed6a8dbff0
3085 3 * a098dda6413a a38b2fa17021 5aed6a8dbff0
3086 #endif
3086 #endif
3087
3087
3088 # Here the filelog based implementation is not looking at the rename
3088 # Here the filelog based implementation is not looking at the rename
3089 # information (because the file exist on both side). However the changelog
3089 # information (because the file exist on both side). However the changelog
3090 # based on works fine. We have different output.
3090 # based on works fine. We have different output.
3091
3091
3092 $ hg status --copies --rev 'desc("p-2")' --rev 'desc("mPQm-0")'
3092 $ hg status --copies --rev 'desc("p-2")' --rev 'desc("mPQm-0")'
3093 M v
3093 M v
3094 r (no-filelog !)
3094 r (no-filelog !)
3095 R r
3095 R r
3096 $ hg status --copies --rev 'desc("p-2")' --rev 'desc("mQPm-0")'
3096 $ hg status --copies --rev 'desc("p-2")' --rev 'desc("mQPm-0")'
3097 M v
3097 M v
3098 r (no-filelog !)
3098 r (no-filelog !)
3099 R r
3099 R r
3100 $ hg status --copies --rev 'desc("q-2")' --rev 'desc("mPQm-0")'
3100 $ hg status --copies --rev 'desc("q-2")' --rev 'desc("mPQm-0")'
3101 M v
3101 M v
3102 t (no-filelog !)
3102 t (no-filelog !)
3103 R t
3103 R t
3104 $ hg status --copies --rev 'desc("q-2")' --rev 'desc("mQPm-0")'
3104 $ hg status --copies --rev 'desc("q-2")' --rev 'desc("mQPm-0")'
3105 M v
3105 M v
3106 t (no-filelog !)
3106 t (no-filelog !)
3107 R t
3107 R t
3108 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("p-2")'
3108 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("p-2")'
3109 A v
3109 A v
3110 t
3110 t
3111 R t
3111 R t
3112 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("q-2")'
3112 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("q-2")'
3113 A v
3113 A v
3114 r
3114 r
3115 R r
3115 R r
3116
3116
3117 # From here, we run status against revision where both source file exists.
3117 # From here, we run status against revision where both source file exists.
3118 #
3118 #
3119 # The filelog based implementation picks an arbitrary side based on revision
3119 # The filelog based implementation picks an arbitrary side based on revision
3120 # numbers. So the same side "wins" whatever the parents order is. This is
3120 # numbers. So the same side "wins" whatever the parents order is. This is
3121 # sub-optimal because depending on revision numbers means the result can be
3121 # sub-optimal because depending on revision numbers means the result can be
3122 # different from one repository to the next.
3122 # different from one repository to the next.
3123 #
3123 #
3124 # The changeset based algorithm use the parent order to break tie on conflicting
3124 # The changeset based algorithm use the parent order to break tie on conflicting
3125 # information and will have a different order depending on who is p1 and p2.
3125 # information and will have a different order depending on who is p1 and p2.
3126 # That order is stable accross repositories. (data from p1 prevails)
3126 # That order is stable accross repositories. (data from p1 prevails)
3127
3127
3128 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mPQm-0")'
3128 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mPQm-0")'
3129 A v
3129 A v
3130 t
3130 t
3131 R r
3131 R r
3132 R t
3132 R t
3133 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mQPm-0")'
3133 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mQPm-0")'
3134 A v
3134 A v
3135 t (filelog !)
3135 t (filelog !)
3136 r (no-filelog !)
3136 r (no-filelog !)
3137 R r
3137 R r
3138 R t
3138 R t
3139 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mPQm-0")'
3139 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mPQm-0")'
3140 A d
3140 A d
3141 a
3141 a
3142 A v
3142 A v
3143 r (filelog !)
3143 r (filelog !)
3144 p (no-filelog !)
3144 p (no-filelog !)
3145 R a
3145 R a
3146 R p
3146 R p
3147 R r
3147 R r
3148 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mQPm-0")'
3148 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mQPm-0")'
3149 A d
3149 A d
3150 a
3150 a
3151 A v
3151 A v
3152 r
3152 r
3153 R a
3153 R a
3154 R p
3154 R p
3155 R r
3155 R r
3156
3156
3157
3157
3158 Comparing with merging with a deletion (and keeping the file)
3158 Comparing with merging with a deletion (and keeping the file)
3159 -------------------------------------------------------------
3159 -------------------------------------------------------------
3160
3160
3161 Merge:
3161 Merge:
3162 - one removing a file (d)
3162 - one removing a file (d)
3163 - one updating that file
3163 - one updating that file
3164 - the merge keep the modified version of the file (canceling the delete)
3164 - the merge keep the modified version of the file (canceling the delete)
3165
3165
3166 In this case, the file keep on living after the merge. So we should not drop its
3166 In this case, the file keep on living after the merge. So we should not drop its
3167 copy tracing chain.
3167 copy tracing chain.
3168
3168
3169 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
3169 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
3170 o mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
3170 o mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
3171 |\
3171 |\
3172 +---o mCGm-0 merge updated/deleted - revive the file (updated content) - one way
3172 +---o mCGm-0 merge updated/deleted - revive the file (updated content) - one way
3173 | |/
3173 | |/
3174 | o g-1: update d
3174 | o g-1: update d
3175 | |
3175 | |
3176 o | c-1 delete d
3176 o | c-1 delete d
3177 |/
3177 |/
3178 o i-2: c -move-> d, s -move-> t
3178 o i-2: c -move-> d, s -move-> t
3179 |
3179 |
3180 o i-1: a -move-> c, p -move-> s
3180 o i-1: a -move-> c, p -move-> s
3181 |
3181 |
3182 o i-0 initial commit: a b h p q r
3182 o i-0 initial commit: a b h p q r
3183
3183
3184
3184
3185 'a' is the copy source of 'd'
3185 'a' is the copy source of 'd'
3186
3186
3187 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCGm-0")'
3187 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCGm-0")'
3188 A d
3188 A d
3189 a (no-compatibility no-changeset !)
3189 a (no-compatibility no-changeset !)
3190 A t
3190 A t
3191 p
3191 p
3192 R a
3192 R a
3193 R p
3193 R p
3194 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGCm-0")'
3194 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGCm-0")'
3195 A d
3195 A d
3196 a (no-compatibility no-changeset !)
3196 a (no-compatibility no-changeset !)
3197 A t
3197 A t
3198 p
3198 p
3199 R a
3199 R a
3200 R p
3200 R p
3201 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCGm-0")'
3201 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCGm-0")'
3202 A d
3202 A d
3203 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mGCm-0")'
3203 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mGCm-0")'
3204 A d
3204 A d
3205 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mCGm-0")'
3205 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mCGm-0")'
3206 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGCm-0")'
3206 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGCm-0")'
3207
3207
3208
3208
3209 Comparing with merge restoring an untouched deleted file
3209 Comparing with merge restoring an untouched deleted file
3210 --------------------------------------------------------
3210 --------------------------------------------------------
3211
3211
3212 Merge:
3212 Merge:
3213 - one removing a file (d)
3213 - one removing a file (d)
3214 - one leaving the file untouched
3214 - one leaving the file untouched
3215 - the merge actively restore the file to the same content.
3215 - the merge actively restore the file to the same content.
3216
3216
3217 In this case, the file keep on living after the merge. So we should not drop its
3217 In this case, the file keep on living after the merge. So we should not drop its
3218 copy tracing chain.
3218 copy tracing chain.
3219
3219
3220 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
3220 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
3221 o mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
3221 o mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
3222 |\
3222 |\
3223 +---o mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
3223 +---o mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
3224 | |/
3224 | |/
3225 | o c-1 delete d
3225 | o c-1 delete d
3226 | |
3226 | |
3227 o | b-1: b update
3227 o | b-1: b update
3228 |/
3228 |/
3229 o i-2: c -move-> d, s -move-> t
3229 o i-2: c -move-> d, s -move-> t
3230 |
3230 |
3231 o i-1: a -move-> c, p -move-> s
3231 o i-1: a -move-> c, p -move-> s
3232 |
3232 |
3233 o i-0 initial commit: a b h p q r
3233 o i-0 initial commit: a b h p q r
3234
3234
3235
3235
3236 'a' is the the copy source of 'd'
3236 'a' is the the copy source of 'd'
3237
3237
3238 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
3238 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
3239 M b
3239 M b
3240 A d
3240 A d
3241 a (no-compatibility no-changeset !)
3241 a (no-compatibility no-changeset !)
3242 A t
3242 A t
3243 p
3243 p
3244 R a
3244 R a
3245 R p
3245 R p
3246 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
3246 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
3247 M b
3247 M b
3248 A d
3248 A d
3249 a (no-compatibility no-changeset !)
3249 a (no-compatibility no-changeset !)
3250 A t
3250 A t
3251 p
3251 p
3252 R a
3252 R a
3253 R p
3253 R p
3254 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCB-revert-m-0")'
3254 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCB-revert-m-0")'
3255 M b
3255 M b
3256 A d
3256 A d
3257 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBC-revert-m-0")'
3257 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBC-revert-m-0")'
3258 M b
3258 M b
3259 A d
3259 A d
3260 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCB-revert-m-0")'
3260 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCB-revert-m-0")'
3261 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBC-revert-m-0")'
3261 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBC-revert-m-0")'
3262
3262
3263
3263
3264 Merging a branch where a rename was deleted with a branch where the same file was renamed
3264 Merging a branch where a rename was deleted with a branch where the same file was renamed
3265 ------------------------------------------------------------------------------------------
3265 ------------------------------------------------------------------------------------------
3266
3266
3267 Create a "conflicting" merge where `d` get removed on one branch before its
3267 Create a "conflicting" merge where `d` get removed on one branch before its
3268 rename information actually conflict with the other branch.
3268 rename information actually conflict with the other branch.
3269
3269
3270 (the copy information from the branch that was not deleted should win).
3270 (the copy information from the branch that was not deleted should win).
3271
3271
3272 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
3272 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
3273 o mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
3273 o mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
3274 |\
3274 |\
3275 +---o mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
3275 +---o mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
3276 | |/
3276 | |/
3277 | o h-1: b -(move)-> d
3277 | o h-1: b -(move)-> d
3278 | |
3278 | |
3279 o | c-1 delete d
3279 o | c-1 delete d
3280 | |
3280 | |
3281 o | i-2: c -move-> d, s -move-> t
3281 o | i-2: c -move-> d, s -move-> t
3282 | |
3282 | |
3283 o | i-1: a -move-> c, p -move-> s
3283 o | i-1: a -move-> c, p -move-> s
3284 |/
3284 |/
3285 o i-0 initial commit: a b h p q r
3285 o i-0 initial commit: a b h p q r
3286
3286
3287
3287
3288 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCH-delete-before-conflict-m")'
3288 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCH-delete-before-conflict-m")'
3289 A d
3289 A d
3290 b (no-compatibility no-changeset !)
3290 b (no-compatibility no-changeset !)
3291 A t
3291 A t
3292 p
3292 p
3293 R a
3293 R a
3294 R b
3294 R b
3295 R p
3295 R p
3296 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mHC-delete-before-conflict-m")'
3296 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mHC-delete-before-conflict-m")'
3297 A d
3297 A d
3298 b
3298 b
3299 A t
3299 A t
3300 p
3300 p
3301 R a
3301 R a
3302 R b
3302 R b
3303 R p
3303 R p
3304 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCH-delete-before-conflict-m")'
3304 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCH-delete-before-conflict-m")'
3305 A d
3305 A d
3306 b
3306 b
3307 R b
3307 R b
3308 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mHC-delete-before-conflict-m")'
3308 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mHC-delete-before-conflict-m")'
3309 A d
3309 A d
3310 b
3310 b
3311 R b
3311 R b
3312 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mCH-delete-before-conflict-m")'
3312 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mCH-delete-before-conflict-m")'
3313 A t
3313 A t
3314 p
3314 p
3315 R a
3315 R a
3316 R p
3316 R p
3317 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mHC-delete-before-conflict-m")'
3317 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mHC-delete-before-conflict-m")'
3318 A t
3318 A t
3319 p
3319 p
3320 R a
3320 R a
3321 R p
3321 R p
3322
3322
3323 Variant of previous with extra changes introduced by the merge
3323 Variant of previous with extra changes introduced by the merge
3324 --------------------------------------------------------------
3324 --------------------------------------------------------------
3325
3325
3326 (see case declaration for details)
3326 (see case declaration for details)
3327
3327
3328 Subcase: merge has same initial content on both side, but merge introduced a change
3328 Subcase: merge has same initial content on both side, but merge introduced a change
3329 ```````````````````````````````````````````````````````````````````````````````````
3329 ```````````````````````````````````````````````````````````````````````````````````
3330
3330
3331 - the "e-" branch renaming b to f (through 'g')
3331 - the "e-" branch renaming b to f (through 'g')
3332 - the "a-" branch renaming d to f (through e)
3332 - the "a-" branch renaming d to f (through e)
3333 - the merge add new change to b
3333 - the merge add new change to b
3334
3334
3335 $ hg log -G --rev '::(desc("mAE-change-m")+desc("mEA-change-m"))'
3335 $ hg log -G --rev '::(desc("mAE-change-m")+desc("mEA-change-m"))'
3336 o mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
3336 o mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
3337 |\
3337 |\
3338 +---o mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
3338 +---o mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
3339 | |/
3339 | |/
3340 | o e-2 g -move-> f
3340 | o e-2 g -move-> f
3341 | |
3341 | |
3342 | o e-1 b -move-> g
3342 | o e-1 b -move-> g
3343 | |
3343 | |
3344 o | a-2: e -move-> f
3344 o | a-2: e -move-> f
3345 | |
3345 | |
3346 o | a-1: d -move-> e
3346 o | a-1: d -move-> e
3347 |/
3347 |/
3348 o i-2: c -move-> d, s -move-> t
3348 o i-2: c -move-> d, s -move-> t
3349 |
3349 |
3350 o i-1: a -move-> c, p -move-> s
3350 o i-1: a -move-> c, p -move-> s
3351 |
3351 |
3352 o i-0 initial commit: a b h p q r
3352 o i-0 initial commit: a b h p q r
3353
3353
3354 #if no-changeset
3354 #if no-changeset
3355 $ hg manifest --debug --rev 'desc("mAE-change-m-0")' | grep '644 f'
3355 $ hg manifest --debug --rev 'desc("mAE-change-m-0")' | grep '644 f'
3356 2f649fba7eb284e720d02b61f0546fcef694c045 644 f
3356 2f649fba7eb284e720d02b61f0546fcef694c045 644 f
3357 $ hg manifest --debug --rev 'desc("mEA-change-m-0")' | grep '644 f'
3357 $ hg manifest --debug --rev 'desc("mEA-change-m-0")' | grep '644 f'
3358 774e7c1637d536b99e2d8ef16fd731f87a82bd09 644 f
3358 774e7c1637d536b99e2d8ef16fd731f87a82bd09 644 f
3359 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
3359 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
3360 b76eb76580df486c3d51d63c5c210d4dd43a8ac7 644 f
3360 b76eb76580df486c3d51d63c5c210d4dd43a8ac7 644 f
3361 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
3361 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
3362 e8825b386367b29fec957283a80bb47b47483fe1 644 f
3362 e8825b386367b29fec957283a80bb47b47483fe1 644 f
3363 $ hg debugindex f | "$PYTHON" ../no-linkrev
3363 $ hg debugindex f | "$PYTHON" ../no-linkrev
3364 rev linkrev nodeid p1 p2
3364 rev linkrev nodeid p1-nodeid p2-nodeid
3365 0 * b76eb76580df 000000000000 000000000000
3365 0 * b76eb76580df 000000000000 000000000000
3366 1 * e8825b386367 000000000000 000000000000
3366 1 * e8825b386367 000000000000 000000000000
3367 2 * 2ff93c643948 b76eb76580df e8825b386367
3367 2 * 2ff93c643948 b76eb76580df e8825b386367
3368 3 * 2f649fba7eb2 b76eb76580df e8825b386367
3368 3 * 2f649fba7eb2 b76eb76580df e8825b386367
3369 4 * 774e7c1637d5 e8825b386367 b76eb76580df
3369 4 * 774e7c1637d5 e8825b386367 b76eb76580df
3370 #else
3370 #else
3371 $ hg manifest --debug --rev 'desc("mAE-change-m-0")' | grep '644 f'
3371 $ hg manifest --debug --rev 'desc("mAE-change-m-0")' | grep '644 f'
3372 d3613c1ec8310a812ac4268fd853ac576b6caea5 644 f
3372 d3613c1ec8310a812ac4268fd853ac576b6caea5 644 f
3373 $ hg manifest --debug --rev 'desc("mEA-change-m-0")' | grep '644 f'
3373 $ hg manifest --debug --rev 'desc("mEA-change-m-0")' | grep '644 f'
3374 05e03c868bbcab4a649cb33a238d7aa07398a469 644 f
3374 05e03c868bbcab4a649cb33a238d7aa07398a469 644 f
3375 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
3375 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
3376 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
3376 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
3377 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
3377 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
3378 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
3378 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
3379 $ hg debugindex f | "$PYTHON" ../no-linkrev
3379 $ hg debugindex f | "$PYTHON" ../no-linkrev
3380 rev linkrev nodeid p1 p2
3380 rev linkrev nodeid p1-nodeid p2-nodeid
3381 0 * ae258f702dfe 000000000000 000000000000
3381 0 * ae258f702dfe 000000000000 000000000000
3382 1 * d3613c1ec831 ae258f702dfe 000000000000
3382 1 * d3613c1ec831 ae258f702dfe 000000000000
3383 2 * 05e03c868bbc ae258f702dfe 000000000000
3383 2 * 05e03c868bbc ae258f702dfe 000000000000
3384 #endif
3384 #endif
3385
3385
3386 # Here the filelog based implementation is not looking at the rename
3386 # Here the filelog based implementation is not looking at the rename
3387 # information (because the file exist on both side). However the changelog
3387 # information (because the file exist on both side). However the changelog
3388 # based on works fine. We have different output.
3388 # based on works fine. We have different output.
3389
3389
3390 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAE-change-m-0")'
3390 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAE-change-m-0")'
3391 M f
3391 M f
3392 b (no-filelog !)
3392 b (no-filelog !)
3393 R b
3393 R b
3394 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEA-change-m-0")'
3394 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEA-change-m-0")'
3395 M f
3395 M f
3396 b (no-filelog !)
3396 b (no-filelog !)
3397 R b
3397 R b
3398 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAE-change-m-0")'
3398 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAE-change-m-0")'
3399 M f
3399 M f
3400 d (no-filelog !)
3400 d (no-filelog !)
3401 R d
3401 R d
3402 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEA-change-m-0")'
3402 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEA-change-m-0")'
3403 M f
3403 M f
3404 d (no-filelog !)
3404 d (no-filelog !)
3405 R d
3405 R d
3406 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
3406 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
3407 A f
3407 A f
3408 d
3408 d
3409 R d
3409 R d
3410 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
3410 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
3411 A f
3411 A f
3412 b
3412 b
3413 R b
3413 R b
3414
3414
3415 # From here, we run status against revision where both source file exists.
3415 # From here, we run status against revision where both source file exists.
3416 #
3416 #
3417 # The filelog based implementation picks an arbitrary side based on revision
3417 # The filelog based implementation picks an arbitrary side based on revision
3418 # numbers. So the same side "wins" whatever the parents order is. This is
3418 # numbers. So the same side "wins" whatever the parents order is. This is
3419 # sub-optimal because depending on revision numbers means the result can be
3419 # sub-optimal because depending on revision numbers means the result can be
3420 # different from one repository to the next.
3420 # different from one repository to the next.
3421 #
3421 #
3422 # The changeset based algorithm use the parent order to break tie on conflicting
3422 # The changeset based algorithm use the parent order to break tie on conflicting
3423 # information and will have a different order depending on who is p1 and p2.
3423 # information and will have a different order depending on who is p1 and p2.
3424 # That order is stable accross repositories. (data from p1 prevails)
3424 # That order is stable accross repositories. (data from p1 prevails)
3425
3425
3426 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAE-change-m-0")'
3426 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAE-change-m-0")'
3427 A f
3427 A f
3428 d
3428 d
3429 R b
3429 R b
3430 R d
3430 R d
3431 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEA-change-m-0")'
3431 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEA-change-m-0")'
3432 A f
3432 A f
3433 d (filelog !)
3433 d (filelog !)
3434 b (no-filelog !)
3434 b (no-filelog !)
3435 R b
3435 R b
3436 R d
3436 R d
3437 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change-m-0")'
3437 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change-m-0")'
3438 A f
3438 A f
3439 a
3439 a
3440 A t
3440 A t
3441 p
3441 p
3442 R a
3442 R a
3443 R b
3443 R b
3444 R p
3444 R p
3445 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change-m-0")'
3445 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change-m-0")'
3446 A f
3446 A f
3447 a (filelog !)
3447 a (filelog !)
3448 b (no-filelog !)
3448 b (no-filelog !)
3449 A t
3449 A t
3450 p
3450 p
3451 R a
3451 R a
3452 R b
3452 R b
3453 R p
3453 R p
3454
3454
3455
3455
3456 Subcase: merge overwrite common copy information, but with extra change during the merge
3456 Subcase: merge overwrite common copy information, but with extra change during the merge
3457 ```````````````````````````````````````````````````````````````````````````````````
3457 ```````````````````````````````````````````````````````````````````````````````````
3458
3458
3459 Merge:
3459 Merge:
3460 - one with change to an unrelated file (b)
3460 - one with change to an unrelated file (b)
3461 - one overwriting a file (d) with a rename (from h to i to d)
3461 - one overwriting a file (d) with a rename (from h to i to d)
3462
3462
3463 $ hg log -G --rev '::(desc("mBF-change-m")+desc("mFB-change-m"))'
3463 $ hg log -G --rev '::(desc("mBF-change-m")+desc("mFB-change-m"))'
3464 o mFB-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
3464 o mFB-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
3465 |\
3465 |\
3466 +---o mBF-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
3466 +---o mBF-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
3467 | |/
3467 | |/
3468 | o f-2: rename i -> d
3468 | o f-2: rename i -> d
3469 | |
3469 | |
3470 | o f-1: rename h -> i
3470 | o f-1: rename h -> i
3471 | |
3471 | |
3472 o | b-1: b update
3472 o | b-1: b update
3473 |/
3473 |/
3474 o i-2: c -move-> d, s -move-> t
3474 o i-2: c -move-> d, s -move-> t
3475 |
3475 |
3476 o i-1: a -move-> c, p -move-> s
3476 o i-1: a -move-> c, p -move-> s
3477 |
3477 |
3478 o i-0 initial commit: a b h p q r
3478 o i-0 initial commit: a b h p q r
3479
3479
3480 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBF-change-m-0")'
3480 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBF-change-m-0")'
3481 M b
3481 M b
3482 A d
3482 A d
3483 h
3483 h
3484 A t
3484 A t
3485 p
3485 p
3486 R a
3486 R a
3487 R h
3487 R h
3488 R p
3488 R p
3489 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFB-change-m-0")'
3489 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFB-change-m-0")'
3490 M b
3490 M b
3491 A d
3491 A d
3492 h
3492 h
3493 A t
3493 A t
3494 p
3494 p
3495 R a
3495 R a
3496 R h
3496 R h
3497 R p
3497 R p
3498 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBF-change-m-0")'
3498 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBF-change-m-0")'
3499 M d
3499 M d
3500 h (no-filelog !)
3500 h (no-filelog !)
3501 R h
3501 R h
3502 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mBF-change-m-0")'
3502 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mBF-change-m-0")'
3503 M b
3503 M b
3504 M d
3504 M d
3505 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mBF-change-m-0")'
3505 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mBF-change-m-0")'
3506 M b
3506 M b
3507 M d
3507 M d
3508 i (no-filelog !)
3508 i (no-filelog !)
3509 R i
3509 R i
3510 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mFB-change-m-0")'
3510 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mFB-change-m-0")'
3511 M d
3511 M d
3512 h (no-filelog !)
3512 h (no-filelog !)
3513 R h
3513 R h
3514 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFB-change-m-0")'
3514 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFB-change-m-0")'
3515 M b
3515 M b
3516 M d
3516 M d
3517 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFB-change-m-0")'
3517 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFB-change-m-0")'
3518 M b
3518 M b
3519 M d
3519 M d
3520 i (no-filelog !)
3520 i (no-filelog !)
3521 R i
3521 R i
3522
3522
3523 #if no-changeset
3523 #if no-changeset
3524 $ hg log -Gfr 'desc("mBF-change-m-0")' d
3524 $ hg log -Gfr 'desc("mBF-change-m-0")' d
3525 o mBF-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
3525 o mBF-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
3526 |\
3526 |\
3527 o : f-2: rename i -> d
3527 o : f-2: rename i -> d
3528 | :
3528 | :
3529 o : f-1: rename h -> i
3529 o : f-1: rename h -> i
3530 :/
3530 :/
3531 o i-0 initial commit: a b h p q r
3531 o i-0 initial commit: a b h p q r
3532
3532
3533 #else
3533 #else
3534 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
3534 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
3535 $ hg log -Gfr 'desc("mBF-change-m-0")' d
3535 $ hg log -Gfr 'desc("mBF-change-m-0")' d
3536 o mBF-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
3536 o mBF-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
3537 :
3537 :
3538 o i-2: c -move-> d, s -move-> t
3538 o i-2: c -move-> d, s -move-> t
3539 |
3539 |
3540 ~
3540 ~
3541 #endif
3541 #endif
3542
3542
3543 #if no-changeset
3543 #if no-changeset
3544 $ hg log -Gfr 'desc("mFB-change-m-0")' d
3544 $ hg log -Gfr 'desc("mFB-change-m-0")' d
3545 o mFB-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
3545 o mFB-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
3546 |\
3546 |\
3547 o : f-2: rename i -> d
3547 o : f-2: rename i -> d
3548 | :
3548 | :
3549 o : f-1: rename h -> i
3549 o : f-1: rename h -> i
3550 :/
3550 :/
3551 o i-0 initial commit: a b h p q r
3551 o i-0 initial commit: a b h p q r
3552
3552
3553 #else
3553 #else
3554 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
3554 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
3555 $ hg log -Gfr 'desc("mFB-change-m-0")' d
3555 $ hg log -Gfr 'desc("mFB-change-m-0")' d
3556 o mFB-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
3556 o mFB-change-m-0 merge with extra change - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
3557 :
3557 :
3558 o i-2: c -move-> d, s -move-> t
3558 o i-2: c -move-> d, s -move-> t
3559 |
3559 |
3560 ~
3560 ~
3561 #endif
3561 #endif
3562
3562
3563
3563
3564 Subcase: restoring and untouched deleted file, while touching it
3564 Subcase: restoring and untouched deleted file, while touching it
3565 ````````````````````````````````````````````````````````````````
3565 ````````````````````````````````````````````````````````````````
3566
3566
3567 Merge:
3567 Merge:
3568 - one removing a file (d)
3568 - one removing a file (d)
3569 - one leaving the file untouched
3569 - one leaving the file untouched
3570 - the merge actively restore the file to the same content.
3570 - the merge actively restore the file to the same content.
3571
3571
3572 In this case, the file keep on living after the merge. So we should not drop its
3572 In this case, the file keep on living after the merge. So we should not drop its
3573 copy tracing chain.
3573 copy tracing chain.
3574
3574
3575 $ hg log -G --rev '::(desc("mCB-change-m")+desc("mBC-change-m"))'
3575 $ hg log -G --rev '::(desc("mCB-change-m")+desc("mBC-change-m"))'
3576 o mBC-change-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
3576 o mBC-change-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
3577 |\
3577 |\
3578 +---o mCB-change-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
3578 +---o mCB-change-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
3579 | |/
3579 | |/
3580 | o c-1 delete d
3580 | o c-1 delete d
3581 | |
3581 | |
3582 o | b-1: b update
3582 o | b-1: b update
3583 |/
3583 |/
3584 o i-2: c -move-> d, s -move-> t
3584 o i-2: c -move-> d, s -move-> t
3585 |
3585 |
3586 o i-1: a -move-> c, p -move-> s
3586 o i-1: a -move-> c, p -move-> s
3587 |
3587 |
3588 o i-0 initial commit: a b h p q r
3588 o i-0 initial commit: a b h p q r
3589
3589
3590
3590
3591 'a' is the the copy source of 'd'
3591 'a' is the the copy source of 'd'
3592
3592
3593 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-change-m-0")'
3593 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-change-m-0")'
3594 M b
3594 M b
3595 A d
3595 A d
3596 a (no-compatibility no-changeset !)
3596 a (no-compatibility no-changeset !)
3597 A t
3597 A t
3598 p
3598 p
3599 R a
3599 R a
3600 R p
3600 R p
3601 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-change-m-0")'
3601 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-change-m-0")'
3602 M b
3602 M b
3603 A d
3603 A d
3604 a (no-compatibility no-changeset !)
3604 a (no-compatibility no-changeset !)
3605 A t
3605 A t
3606 p
3606 p
3607 R a
3607 R a
3608 R p
3608 R p
3609 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCB-change-m-0")'
3609 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCB-change-m-0")'
3610 M b
3610 M b
3611 A d
3611 A d
3612 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBC-change-m-0")'
3612 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBC-change-m-0")'
3613 M b
3613 M b
3614 A d
3614 A d
3615 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCB-change-m-0")'
3615 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCB-change-m-0")'
3616 M d
3616 M d
3617 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBC-change-m-0")'
3617 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBC-change-m-0")'
3618 M d
3618 M d
3619
3619
3620
3620
3621 Decision from previous merge are properly chained with later merge
3621 Decision from previous merge are properly chained with later merge
3622 ------------------------------------------------------------------
3622 ------------------------------------------------------------------
3623
3623
3624
3624
3625 Subcase: chaining conflicting rename resolution
3625 Subcase: chaining conflicting rename resolution
3626 ```````````````````````````````````````````````
3626 ```````````````````````````````````````````````
3627
3627
3628 The "mAEm" and "mEAm" case create a rename tracking conflict on file 'f'. We
3628 The "mAEm" and "mEAm" case create a rename tracking conflict on file 'f'. We
3629 add more change on the respective branch and merge again. These second merge
3629 add more change on the respective branch and merge again. These second merge
3630 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
3630 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
3631 about that file should stay unchanged.
3631 about that file should stay unchanged.
3632
3632
3633 The result from mAEm is the same for the subsequent merge:
3633 The result from mAEm is the same for the subsequent merge:
3634
3634
3635 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm")' f
3635 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm")' f
3636 A f
3636 A f
3637 a (no-changeset no-compatibility !)
3637 a (no-changeset no-compatibility !)
3638
3638
3639 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE,Km")' f
3639 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE,Km")' f
3640 A f
3640 A f
3641 a (no-changeset no-compatibility !)
3641 a (no-changeset no-compatibility !)
3642
3642
3643 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AEm")' f
3643 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AEm")' f
3644 A f
3644 A f
3645 a (no-changeset no-compatibility !)
3645 a (no-changeset no-compatibility !)
3646
3646
3647
3647
3648 The result from mEAm is the same for the subsequent merge:
3648 The result from mEAm is the same for the subsequent merge:
3649
3649
3650 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm")' f
3650 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm")' f
3651 A f
3651 A f
3652 a (filelog !)
3652 a (filelog !)
3653 b (no-changeset no-compatibility no-filelog !)
3653 b (no-changeset no-compatibility no-filelog !)
3654
3654
3655 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA,Jm")' f
3655 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA,Jm")' f
3656 A f
3656 A f
3657 a (filelog !)
3657 a (filelog !)
3658 b (no-changeset no-compatibility no-filelog !)
3658 b (no-changeset no-compatibility no-filelog !)
3659
3659
3660 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EAm")' f
3660 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EAm")' f
3661 A f
3661 A f
3662 a (filelog !)
3662 a (filelog !)
3663 b (no-changeset no-compatibility no-filelog !)
3663 b (no-changeset no-compatibility no-filelog !)
3664
3664
3665 Subcase: chaining conflicting rename resolution
3665 Subcase: chaining conflicting rename resolution
3666 ```````````````````````````````````````````````
3666 ```````````````````````````````````````````````
3667
3667
3668 The "mPQm" and "mQPm" case create a rename tracking conflict on file 'v'. We
3668 The "mPQm" and "mQPm" case create a rename tracking conflict on file 'v'. We
3669 add more change on the respective branch and merge again. These second merge
3669 add more change on the respective branch and merge again. These second merge
3670 does not involve the file 'v' and the arbitration done within "mPQm" and "mQP"
3670 does not involve the file 'v' and the arbitration done within "mPQm" and "mQP"
3671 about that file should stay unchanged.
3671 about that file should stay unchanged.
3672
3672
3673 The result from mPQm is the same for the subsequent merge:
3673 The result from mPQm is the same for the subsequent merge:
3674
3674
3675 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mPQm")' v
3675 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mPQm")' v
3676 A v
3676 A v
3677 r (filelog !)
3677 r (filelog !)
3678 p (no-changeset no-compatibility no-filelog !)
3678 p (no-changeset no-compatibility no-filelog !)
3679
3679
3680 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mPQ,Tm")' v
3680 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mPQ,Tm")' v
3681 A v
3681 A v
3682 r (filelog !)
3682 r (filelog !)
3683 p (no-changeset no-compatibility no-filelog !)
3683 p (no-changeset no-compatibility no-filelog !)
3684
3684
3685 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mT,PQm")' v
3685 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mT,PQm")' v
3686 A v
3686 A v
3687 r (filelog !)
3687 r (filelog !)
3688 p (no-changeset no-compatibility no-filelog !)
3688 p (no-changeset no-compatibility no-filelog !)
3689
3689
3690 The result from mQPm is the same for the subsequent merge:
3690 The result from mQPm is the same for the subsequent merge:
3691
3691
3692 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mQPm")' v
3692 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mQPm")' v
3693 A v
3693 A v
3694 r (no-changeset no-compatibility !)
3694 r (no-changeset no-compatibility !)
3695
3695
3696 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mQP,Sm")' v
3696 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mQP,Sm")' v
3697 A v
3697 A v
3698 r (no-changeset no-compatibility !)
3698 r (no-changeset no-compatibility !)
3699
3699
3700 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mS,QPm")' v
3700 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mS,QPm")' v
3701 A v
3701 A v
3702 r (filelog !)
3702 r (filelog !)
3703 r (no-changeset no-compatibility no-filelog !)
3703 r (no-changeset no-compatibility no-filelog !)
3704
3704
3705
3705
3706 Subcase: chaining salvage information during a merge
3706 Subcase: chaining salvage information during a merge
3707 ````````````````````````````````````````````````````
3707 ````````````````````````````````````````````````````
3708
3708
3709 We add more change on the branch were the file was deleted. merging again
3709 We add more change on the branch were the file was deleted. merging again
3710 should preserve the fact eh file was salvaged.
3710 should preserve the fact eh file was salvaged.
3711
3711
3712 reference output:
3712 reference output:
3713
3713
3714 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
3714 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
3715 M b
3715 M b
3716 A d
3716 A d
3717 a (no-changeset no-compatibility !)
3717 a (no-changeset no-compatibility !)
3718 A t
3718 A t
3719 p
3719 p
3720 R a
3720 R a
3721 R p
3721 R p
3722 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
3722 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
3723 M b
3723 M b
3724 A d
3724 A d
3725 a (no-changeset no-compatibility !)
3725 a (no-changeset no-compatibility !)
3726 A t
3726 A t
3727 p
3727 p
3728 R a
3728 R a
3729 R p
3729 R p
3730
3730
3731 chained output
3731 chained output
3732 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC+revert,Lm")'
3732 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC+revert,Lm")'
3733 M b
3733 M b
3734 A d
3734 A d
3735 a (no-changeset no-compatibility !)
3735 a (no-changeset no-compatibility !)
3736 A t
3736 A t
3737 p
3737 p
3738 A unrelated-l
3738 A unrelated-l
3739 R a
3739 R a
3740 R p
3740 R p
3741 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB+revert,Lm")'
3741 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB+revert,Lm")'
3742 M b
3742 M b
3743 A d
3743 A d
3744 a (no-changeset no-compatibility !)
3744 a (no-changeset no-compatibility !)
3745 A t
3745 A t
3746 p
3746 p
3747 A unrelated-l
3747 A unrelated-l
3748 R a
3748 R a
3749 R p
3749 R p
3750 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mL,BC+revertm")'
3750 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mL,BC+revertm")'
3751 M b
3751 M b
3752 A d
3752 A d
3753 a (no-changeset no-compatibility !)
3753 a (no-changeset no-compatibility !)
3754 A t
3754 A t
3755 p
3755 p
3756 A unrelated-l
3756 A unrelated-l
3757 R a
3757 R a
3758 R p
3758 R p
3759 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mL,CB+revertm")'
3759 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mL,CB+revertm")'
3760 M b
3760 M b
3761 A d
3761 A d
3762 a (no-changeset no-compatibility !)
3762 a (no-changeset no-compatibility !)
3763 A t
3763 A t
3764 p
3764 p
3765 A unrelated-l
3765 A unrelated-l
3766 R a
3766 R a
3767 R p
3767 R p
3768
3768
3769 Subcase: chaining "merged" information during a merge
3769 Subcase: chaining "merged" information during a merge
3770 ``````````````````````````````````````````````````````
3770 ``````````````````````````````````````````````````````
3771
3771
3772 When a non-rename change are merged with a copy overwrite, the merge pick the copy source from (p1) as the reference. We should preserve this information in subsequent merges.
3772 When a non-rename change are merged with a copy overwrite, the merge pick the copy source from (p1) as the reference. We should preserve this information in subsequent merges.
3773
3773
3774
3774
3775 reference output:
3775 reference output:
3776
3776
3777 (for details about the filelog pick, check the mFGm/mGFm case)
3777 (for details about the filelog pick, check the mFGm/mGFm case)
3778
3778
3779 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm")' d
3779 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm")' d
3780 A d
3780 A d
3781 a (filelog !)
3781 a (filelog !)
3782 h (no-changeset no-compatibility no-filelog !)
3782 h (no-changeset no-compatibility no-filelog !)
3783 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm")' d
3783 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm")' d
3784 A d
3784 A d
3785 a (filelog !)
3785 a (filelog !)
3786 a (no-changeset no-compatibility no-filelog !)
3786 a (no-changeset no-compatibility no-filelog !)
3787
3787
3788 Chained output
3788 Chained output
3789
3789
3790 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mO,FGm")' d
3790 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mO,FGm")' d
3791 A d
3791 A d
3792 a (filelog !)
3792 a (filelog !)
3793 h (no-changeset no-compatibility no-filelog !)
3793 h (no-changeset no-compatibility no-filelog !)
3794 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFG,Om")' d
3794 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFG,Om")' d
3795 A d
3795 A d
3796 a (filelog !)
3796 a (filelog !)
3797 h (no-changeset no-compatibility no-filelog !)
3797 h (no-changeset no-compatibility no-filelog !)
3798
3798
3799
3799
3800 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGF,Nm")' d
3800 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGF,Nm")' d
3801 A d
3801 A d
3802 a (no-changeset no-compatibility !)
3802 a (no-changeset no-compatibility !)
3803 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mN,GFm")' d
3803 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mN,GFm")' d
3804 A d
3804 A d
3805 a (no-changeset no-compatibility !)
3805 a (no-changeset no-compatibility !)
3806
3806
3807
3807
3808 Subcase: chaining conflicting rename resolution, with extra change during the merge
3808 Subcase: chaining conflicting rename resolution, with extra change during the merge
3809 ```````````````````````````````````````````````````````````````````````````````````
3809 ```````````````````````````````````````````````````````````````````````````````````
3810
3810
3811 The "mAEm" and "mEAm" case create a rename tracking conflict on file 'f'. We
3811 The "mAEm" and "mEAm" case create a rename tracking conflict on file 'f'. We
3812 add more change on the respective branch and merge again. These second merge
3812 add more change on the respective branch and merge again. These second merge
3813 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
3813 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
3814 about that file should stay unchanged.
3814 about that file should stay unchanged.
3815
3815
3816 The result from mAEm is the same for the subsequent merge:
3816 The result from mAEm is the same for the subsequent merge:
3817
3817
3818 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change-m")' f
3818 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change-m")' f
3819 A f
3819 A f
3820 a (no-changeset no-compatibility !)
3820 a (no-changeset no-compatibility !)
3821
3821
3822 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change,Km")' f
3822 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change,Km")' f
3823 A f
3823 A f
3824 a (no-changeset no-compatibility !)
3824 a (no-changeset no-compatibility !)
3825
3825
3826 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AE-change-m")' f
3826 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AE-change-m")' f
3827 A f
3827 A f
3828 a (no-changeset no-compatibility !)
3828 a (no-changeset no-compatibility !)
3829
3829
3830
3830
3831 The result from mEAm is the same for the subsequent merge:
3831 The result from mEAm is the same for the subsequent merge:
3832
3832
3833 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change-m")' f
3833 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change-m")' f
3834 A f
3834 A f
3835 a (filelog !)
3835 a (filelog !)
3836 b (no-changeset no-compatibility no-filelog !)
3836 b (no-changeset no-compatibility no-filelog !)
3837
3837
3838 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change,Jm")' f
3838 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change,Jm")' f
3839 A f
3839 A f
3840 a (filelog !)
3840 a (filelog !)
3841 b (no-changeset no-compatibility no-filelog !)
3841 b (no-changeset no-compatibility no-filelog !)
3842
3842
3843 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EA-change-m")' f
3843 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EA-change-m")' f
3844 A f
3844 A f
3845 a (filelog !)
3845 a (filelog !)
3846 b (no-changeset no-compatibility no-filelog !)
3846 b (no-changeset no-compatibility no-filelog !)
@@ -1,488 +1,488 b''
1 #testcases extra sidedata
1 #testcases extra sidedata
2
2
3 #if extra
3 #if extra
4 $ cat >> $HGRCPATH << EOF
4 $ cat >> $HGRCPATH << EOF
5 > [experimental]
5 > [experimental]
6 > copies.write-to=changeset-only
6 > copies.write-to=changeset-only
7 > copies.read-from=changeset-only
7 > copies.read-from=changeset-only
8 > [alias]
8 > [alias]
9 > changesetcopies = log -r . -T 'files: {files}
9 > changesetcopies = log -r . -T 'files: {files}
10 > {extras % "{ifcontains("files", key, "{key}: {value}\n")}"}
10 > {extras % "{ifcontains("files", key, "{key}: {value}\n")}"}
11 > {extras % "{ifcontains("copies", key, "{key}: {value}\n")}"}'
11 > {extras % "{ifcontains("copies", key, "{key}: {value}\n")}"}'
12 > EOF
12 > EOF
13 #endif
13 #endif
14
14
15 #if sidedata
15 #if sidedata
16 $ cat >> $HGRCPATH << EOF
16 $ cat >> $HGRCPATH << EOF
17 > [format]
17 > [format]
18 > exp-use-copies-side-data-changeset = yes
18 > exp-use-copies-side-data-changeset = yes
19 > EOF
19 > EOF
20 #endif
20 #endif
21
21
22 $ cat >> $HGRCPATH << EOF
22 $ cat >> $HGRCPATH << EOF
23 > [alias]
23 > [alias]
24 > showcopies = log -r . -T '{file_copies % "{source} -> {name}\n"}'
24 > showcopies = log -r . -T '{file_copies % "{source} -> {name}\n"}'
25 > [extensions]
25 > [extensions]
26 > rebase =
26 > rebase =
27 > split =
27 > split =
28 > EOF
28 > EOF
29
29
30 Check that copies are recorded correctly
30 Check that copies are recorded correctly
31
31
32 $ hg init repo
32 $ hg init repo
33 $ cd repo
33 $ cd repo
34 #if sidedata
34 #if sidedata
35 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
35 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
36 format-variant repo config default
36 format-variant repo config default
37 copies-sdc: yes yes no
37 copies-sdc: yes yes no
38 revlog-v2: no no no
38 revlog-v2: no no no
39 changelog-v2: yes yes no
39 changelog-v2: yes yes no
40 #else
40 #else
41 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
41 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
42 format-variant repo config default
42 format-variant repo config default
43 copies-sdc: no no no
43 copies-sdc: no no no
44 revlog-v2: no no no
44 revlog-v2: no no no
45 changelog-v2: no no no
45 changelog-v2: no no no
46 #endif
46 #endif
47 $ echo a > a
47 $ echo a > a
48 $ hg add a
48 $ hg add a
49 $ hg ci -m initial
49 $ hg ci -m initial
50 $ hg cp a b
50 $ hg cp a b
51 $ hg cp a c
51 $ hg cp a c
52 $ hg cp a d
52 $ hg cp a d
53 $ hg ci -m 'copy a to b, c, and d'
53 $ hg ci -m 'copy a to b, c, and d'
54
54
55 #if extra
55 #if extra
56
56
57 $ hg changesetcopies
57 $ hg changesetcopies
58 files: b c d
58 files: b c d
59 filesadded: 0
59 filesadded: 0
60 1
60 1
61 2
61 2
62
62
63 p1copies: 0\x00a (esc)
63 p1copies: 0\x00a (esc)
64 1\x00a (esc)
64 1\x00a (esc)
65 2\x00a (esc)
65 2\x00a (esc)
66 #else
66 #else
67 $ hg debugsidedata -c -v -- -1
67 $ hg debugsidedata -c -v -- -1
68 1 sidedata entries
68 1 sidedata entries
69 entry-0014 size 44
69 entry-0014 size 44
70 '\x00\x00\x00\x04\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00abcd'
70 '\x00\x00\x00\x04\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00abcd'
71 #endif
71 #endif
72
72
73 $ hg showcopies
73 $ hg showcopies
74 a -> b
74 a -> b
75 a -> c
75 a -> c
76 a -> d
76 a -> d
77
77
78 #if extra
78 #if extra
79
79
80 $ hg showcopies --config experimental.copies.read-from=compatibility
80 $ hg showcopies --config experimental.copies.read-from=compatibility
81 a -> b
81 a -> b
82 a -> c
82 a -> c
83 a -> d
83 a -> d
84 $ hg showcopies --config experimental.copies.read-from=filelog-only
84 $ hg showcopies --config experimental.copies.read-from=filelog-only
85
85
86 #endif
86 #endif
87
87
88 Check that renames are recorded correctly
88 Check that renames are recorded correctly
89
89
90 $ hg mv b b2
90 $ hg mv b b2
91 $ hg ci -m 'rename b to b2'
91 $ hg ci -m 'rename b to b2'
92
92
93 #if extra
93 #if extra
94
94
95 $ hg changesetcopies
95 $ hg changesetcopies
96 files: b b2
96 files: b b2
97 filesadded: 1
97 filesadded: 1
98 filesremoved: 0
98 filesremoved: 0
99
99
100 p1copies: 1\x00b (esc)
100 p1copies: 1\x00b (esc)
101
101
102 #else
102 #else
103 $ hg debugsidedata -c -v -- -1
103 $ hg debugsidedata -c -v -- -1
104 1 sidedata entries
104 1 sidedata entries
105 entry-0014 size 25
105 entry-0014 size 25
106 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00bb2'
106 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00bb2'
107 #endif
107 #endif
108
108
109 $ hg showcopies
109 $ hg showcopies
110 b -> b2
110 b -> b2
111
111
112
112
113 Rename onto existing file. This should get recorded in the changeset files list and in the extras,
113 Rename onto existing file. This should get recorded in the changeset files list and in the extras,
114 even though there is no filelog entry.
114 even though there is no filelog entry.
115
115
116 $ hg cp b2 c --force
116 $ hg cp b2 c --force
117 $ hg st --copies
117 $ hg st --copies
118 M c
118 M c
119 b2
119 b2
120
120
121 #if extra
121 #if extra
122
122
123 $ hg debugindex c
123 $ hg debugindex c
124 rev linkrev nodeid p1 p2
124 rev linkrev nodeid p1-nodeid p2-nodeid
125 0 1 b789fdd96dc2 000000000000 000000000000
125 0 1 b789fdd96dc2 000000000000 000000000000
126
126
127 #else
127 #else
128
128
129 $ hg debugindex c
129 $ hg debugindex c
130 rev linkrev nodeid p1 p2
130 rev linkrev nodeid p1-nodeid p2-nodeid
131 0 1 37d9b5d994ea 000000000000 000000000000
131 0 1 37d9b5d994ea 000000000000 000000000000
132
132
133 #endif
133 #endif
134
134
135
135
136 $ hg ci -m 'move b onto d'
136 $ hg ci -m 'move b onto d'
137
137
138 #if extra
138 #if extra
139
139
140 $ hg changesetcopies
140 $ hg changesetcopies
141 files: c
141 files: c
142
142
143 p1copies: 0\x00b2 (esc)
143 p1copies: 0\x00b2 (esc)
144
144
145 #else
145 #else
146 $ hg debugsidedata -c -v -- -1
146 $ hg debugsidedata -c -v -- -1
147 1 sidedata entries
147 1 sidedata entries
148 entry-0014 size 25
148 entry-0014 size 25
149 '\x00\x00\x00\x02\x00\x00\x00\x00\x02\x00\x00\x00\x00\x16\x00\x00\x00\x03\x00\x00\x00\x00b2c'
149 '\x00\x00\x00\x02\x00\x00\x00\x00\x02\x00\x00\x00\x00\x16\x00\x00\x00\x03\x00\x00\x00\x00b2c'
150 #endif
150 #endif
151
151
152 $ hg showcopies
152 $ hg showcopies
153 b2 -> c
153 b2 -> c
154
154
155 #if extra
155 #if extra
156
156
157 $ hg debugindex c
157 $ hg debugindex c
158 rev linkrev nodeid p1 p2
158 rev linkrev nodeid p1-nodeid p2-nodeid
159 0 1 b789fdd96dc2 000000000000 000000000000
159 0 1 b789fdd96dc2 000000000000 000000000000
160
160
161 #else
161 #else
162
162
163 $ hg debugindex c
163 $ hg debugindex c
164 rev linkrev nodeid p1 p2
164 rev linkrev nodeid p1-nodeid p2-nodeid
165 0 1 37d9b5d994ea 000000000000 000000000000
165 0 1 37d9b5d994ea 000000000000 000000000000
166 1 3 029625640347 000000000000 000000000000
166 1 3 029625640347 000000000000 000000000000
167
167
168 #endif
168 #endif
169
169
170 Create a merge commit with copying done during merge.
170 Create a merge commit with copying done during merge.
171
171
172 $ hg co 0
172 $ hg co 0
173 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
173 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
174 $ hg cp a e
174 $ hg cp a e
175 $ hg cp a f
175 $ hg cp a f
176 $ hg ci -m 'copy a to e and f'
176 $ hg ci -m 'copy a to e and f'
177 created new head
177 created new head
178 $ hg merge 3
178 $ hg merge 3
179 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
179 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
180 (branch merge, don't forget to commit)
180 (branch merge, don't forget to commit)
181 File 'a' exists on both sides, so 'g' could be recorded as being from p1 or p2, but we currently
181 File 'a' exists on both sides, so 'g' could be recorded as being from p1 or p2, but we currently
182 always record it as being from p1
182 always record it as being from p1
183 $ hg cp a g
183 $ hg cp a g
184 File 'd' exists only in p2, so 'h' should be from p2
184 File 'd' exists only in p2, so 'h' should be from p2
185 $ hg cp d h
185 $ hg cp d h
186 File 'f' exists only in p1, so 'i' should be from p1
186 File 'f' exists only in p1, so 'i' should be from p1
187 $ hg cp f i
187 $ hg cp f i
188 $ hg ci -m 'merge'
188 $ hg ci -m 'merge'
189
189
190 #if extra
190 #if extra
191
191
192 $ hg changesetcopies
192 $ hg changesetcopies
193 files: g h i
193 files: g h i
194 filesadded: 0
194 filesadded: 0
195 1
195 1
196 2
196 2
197
197
198 p1copies: 0\x00a (esc)
198 p1copies: 0\x00a (esc)
199 2\x00f (esc)
199 2\x00f (esc)
200 p2copies: 1\x00d (esc)
200 p2copies: 1\x00d (esc)
201
201
202 #else
202 #else
203 $ hg debugsidedata -c -v -- -1
203 $ hg debugsidedata -c -v -- -1
204 1 sidedata entries
204 1 sidedata entries
205 entry-0014 size 64
205 entry-0014 size 64
206 '\x00\x00\x00\x06\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x01\x06\x00\x00\x00\x06\x00\x00\x00\x02adfghi'
206 '\x00\x00\x00\x06\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x01\x06\x00\x00\x00\x06\x00\x00\x00\x02adfghi'
207 #endif
207 #endif
208
208
209 $ hg showcopies
209 $ hg showcopies
210 a -> g
210 a -> g
211 d -> h
211 d -> h
212 f -> i
212 f -> i
213
213
214 Test writing to both changeset and filelog
214 Test writing to both changeset and filelog
215
215
216 $ hg cp a j
216 $ hg cp a j
217 #if extra
217 #if extra
218 $ hg ci -m 'copy a to j' --config experimental.copies.write-to=compatibility
218 $ hg ci -m 'copy a to j' --config experimental.copies.write-to=compatibility
219 $ hg changesetcopies
219 $ hg changesetcopies
220 files: j
220 files: j
221 filesadded: 0
221 filesadded: 0
222 filesremoved:
222 filesremoved:
223
223
224 p1copies: 0\x00a (esc)
224 p1copies: 0\x00a (esc)
225 p2copies:
225 p2copies:
226 #else
226 #else
227 $ hg ci -m 'copy a to j'
227 $ hg ci -m 'copy a to j'
228 $ hg debugsidedata -c -v -- -1
228 $ hg debugsidedata -c -v -- -1
229 1 sidedata entries
229 1 sidedata entries
230 entry-0014 size 24
230 entry-0014 size 24
231 '\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00aj'
231 '\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00aj'
232 #endif
232 #endif
233 $ hg debugdata j 0
233 $ hg debugdata j 0
234 \x01 (esc)
234 \x01 (esc)
235 copy: a
235 copy: a
236 copyrev: b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
236 copyrev: b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
237 \x01 (esc)
237 \x01 (esc)
238 a
238 a
239 $ hg showcopies
239 $ hg showcopies
240 a -> j
240 a -> j
241 $ hg showcopies --config experimental.copies.read-from=compatibility
241 $ hg showcopies --config experimental.copies.read-from=compatibility
242 a -> j
242 a -> j
243 $ hg showcopies --config experimental.copies.read-from=filelog-only
243 $ hg showcopies --config experimental.copies.read-from=filelog-only
244 a -> j
244 a -> j
245 Existing copy information in the changeset gets removed on amend and writing
245 Existing copy information in the changeset gets removed on amend and writing
246 copy information on to the filelog
246 copy information on to the filelog
247 #if extra
247 #if extra
248 $ hg ci --amend -m 'copy a to j, v2' \
248 $ hg ci --amend -m 'copy a to j, v2' \
249 > --config experimental.copies.write-to=filelog-only
249 > --config experimental.copies.write-to=filelog-only
250 saved backup bundle to $TESTTMP/repo/.hg/strip-backup/*-*-amend.hg (glob)
250 saved backup bundle to $TESTTMP/repo/.hg/strip-backup/*-*-amend.hg (glob)
251 $ hg changesetcopies
251 $ hg changesetcopies
252 files: j
252 files: j
253
253
254 #else
254 #else
255 $ hg ci --amend -m 'copy a to j, v2'
255 $ hg ci --amend -m 'copy a to j, v2'
256 saved backup bundle to $TESTTMP/repo/.hg/strip-backup/*-*-amend.hg (glob)
256 saved backup bundle to $TESTTMP/repo/.hg/strip-backup/*-*-amend.hg (glob)
257 $ hg debugsidedata -c -v -- -1
257 $ hg debugsidedata -c -v -- -1
258 1 sidedata entries
258 1 sidedata entries
259 entry-0014 size 24
259 entry-0014 size 24
260 '\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00aj'
260 '\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00aj'
261 #endif
261 #endif
262 $ hg showcopies --config experimental.copies.read-from=filelog-only
262 $ hg showcopies --config experimental.copies.read-from=filelog-only
263 a -> j
263 a -> j
264 The entries should be written to extras even if they're empty (so the client
264 The entries should be written to extras even if they're empty (so the client
265 won't have to fall back to reading from filelogs)
265 won't have to fall back to reading from filelogs)
266 $ echo x >> j
266 $ echo x >> j
267 #if extra
267 #if extra
268 $ hg ci -m 'modify j' --config experimental.copies.write-to=compatibility
268 $ hg ci -m 'modify j' --config experimental.copies.write-to=compatibility
269 $ hg changesetcopies
269 $ hg changesetcopies
270 files: j
270 files: j
271 filesadded:
271 filesadded:
272 filesremoved:
272 filesremoved:
273
273
274 p1copies:
274 p1copies:
275 p2copies:
275 p2copies:
276 #else
276 #else
277 $ hg ci -m 'modify j'
277 $ hg ci -m 'modify j'
278 $ hg debugsidedata -c -v -- -1
278 $ hg debugsidedata -c -v -- -1
279 1 sidedata entries
279 1 sidedata entries
280 entry-0014 size 14
280 entry-0014 size 14
281 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00j'
281 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00j'
282 #endif
282 #endif
283
283
284 Test writing only to filelog
284 Test writing only to filelog
285
285
286 $ hg cp a k
286 $ hg cp a k
287 #if extra
287 #if extra
288 $ hg ci -m 'copy a to k' --config experimental.copies.write-to=filelog-only
288 $ hg ci -m 'copy a to k' --config experimental.copies.write-to=filelog-only
289
289
290 $ hg changesetcopies
290 $ hg changesetcopies
291 files: k
291 files: k
292
292
293 #else
293 #else
294 $ hg ci -m 'copy a to k'
294 $ hg ci -m 'copy a to k'
295 $ hg debugsidedata -c -v -- -1
295 $ hg debugsidedata -c -v -- -1
296 1 sidedata entries
296 1 sidedata entries
297 entry-0014 size 24
297 entry-0014 size 24
298 '\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ak'
298 '\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ak'
299 #endif
299 #endif
300
300
301 $ hg debugdata k 0
301 $ hg debugdata k 0
302 \x01 (esc)
302 \x01 (esc)
303 copy: a
303 copy: a
304 copyrev: b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
304 copyrev: b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
305 \x01 (esc)
305 \x01 (esc)
306 a
306 a
307 #if extra
307 #if extra
308 $ hg showcopies
308 $ hg showcopies
309
309
310 $ hg showcopies --config experimental.copies.read-from=compatibility
310 $ hg showcopies --config experimental.copies.read-from=compatibility
311 a -> k
311 a -> k
312 $ hg showcopies --config experimental.copies.read-from=filelog-only
312 $ hg showcopies --config experimental.copies.read-from=filelog-only
313 a -> k
313 a -> k
314 #else
314 #else
315 $ hg showcopies
315 $ hg showcopies
316 a -> k
316 a -> k
317 #endif
317 #endif
318
318
319 Existing copy information is preserved by amend
319 Existing copy information is preserved by amend
320 $ hg cp a l
320 $ hg cp a l
321 $ hg ci -m 'copy a to l'
321 $ hg ci -m 'copy a to l'
322 $ hg showcopies
322 $ hg showcopies
323 a -> l
323 a -> l
324 $ hg ci --amend -m 'new description'
324 $ hg ci --amend -m 'new description'
325 saved backup bundle to $TESTTMP/repo/.hg/strip-backup/*-*-amend.hg (glob)
325 saved backup bundle to $TESTTMP/repo/.hg/strip-backup/*-*-amend.hg (glob)
326 $ hg showcopies
326 $ hg showcopies
327 a -> l
327 a -> l
328
328
329 No crash on partial amend
329 No crash on partial amend
330 $ hg st --change .
330 $ hg st --change .
331 A l
331 A l
332 $ echo modified >> a
332 $ echo modified >> a
333 $ hg rm l
333 $ hg rm l
334 $ hg commit --amend a
334 $ hg commit --amend a
335 saved backup bundle to $TESTTMP/repo/.hg/strip-backup/*-*-amend.hg (glob)
335 saved backup bundle to $TESTTMP/repo/.hg/strip-backup/*-*-amend.hg (glob)
336
336
337 $ cd ..
337 $ cd ..
338
338
339 Test rebasing a commit with copy information
339 Test rebasing a commit with copy information
340
340
341 $ hg init rebase-rename
341 $ hg init rebase-rename
342 $ cd rebase-rename
342 $ cd rebase-rename
343 $ echo a > a
343 $ echo a > a
344 $ hg ci -Aqm 'add a'
344 $ hg ci -Aqm 'add a'
345 $ echo a2 > a
345 $ echo a2 > a
346 $ hg ci -m 'modify a'
346 $ hg ci -m 'modify a'
347 $ hg co -q 0
347 $ hg co -q 0
348 $ hg mv a b
348 $ hg mv a b
349 $ hg ci -qm 'rename a to b'
349 $ hg ci -qm 'rename a to b'
350 Not only do we want this to run in-memory, it shouldn't fall back to
350 Not only do we want this to run in-memory, it shouldn't fall back to
351 on-disk merge (no conflicts), so we force it to be in-memory
351 on-disk merge (no conflicts), so we force it to be in-memory
352 with no fallback.
352 with no fallback.
353 $ hg rebase -d 1 --config rebase.experimental.inmemory=yes --config devel.rebase.force-in-memory-merge=yes
353 $ hg rebase -d 1 --config rebase.experimental.inmemory=yes --config devel.rebase.force-in-memory-merge=yes
354 rebasing 2:* tip "rename a to b" (glob)
354 rebasing 2:* tip "rename a to b" (glob)
355 merging a and b to b
355 merging a and b to b
356 saved backup bundle to $TESTTMP/rebase-rename/.hg/strip-backup/*-*-rebase.hg (glob)
356 saved backup bundle to $TESTTMP/rebase-rename/.hg/strip-backup/*-*-rebase.hg (glob)
357 $ hg st --change . --copies
357 $ hg st --change . --copies
358 A b
358 A b
359 a
359 a
360 R a
360 R a
361 $ cd ..
361 $ cd ..
362
362
363 Test splitting a commit
363 Test splitting a commit
364
364
365 $ hg init split
365 $ hg init split
366 $ cd split
366 $ cd split
367 $ echo a > a
367 $ echo a > a
368 $ echo b > b
368 $ echo b > b
369 $ hg ci -Aqm 'add a and b'
369 $ hg ci -Aqm 'add a and b'
370 $ echo a2 > a
370 $ echo a2 > a
371 $ hg mv b c
371 $ hg mv b c
372 $ hg ci -m 'modify a, move b to c'
372 $ hg ci -m 'modify a, move b to c'
373 $ hg --config ui.interactive=yes split <<EOF
373 $ hg --config ui.interactive=yes split <<EOF
374 > y
374 > y
375 > y
375 > y
376 > n
376 > n
377 > y
377 > y
378 > EOF
378 > EOF
379 diff --git a/a b/a
379 diff --git a/a b/a
380 1 hunks, 1 lines changed
380 1 hunks, 1 lines changed
381 examine changes to 'a'?
381 examine changes to 'a'?
382 (enter ? for help) [Ynesfdaq?] y
382 (enter ? for help) [Ynesfdaq?] y
383
383
384 @@ -1,1 +1,1 @@
384 @@ -1,1 +1,1 @@
385 -a
385 -a
386 +a2
386 +a2
387 record this change to 'a'?
387 record this change to 'a'?
388 (enter ? for help) [Ynesfdaq?] y
388 (enter ? for help) [Ynesfdaq?] y
389
389
390 diff --git a/b b/c
390 diff --git a/b b/c
391 rename from b
391 rename from b
392 rename to c
392 rename to c
393 examine changes to 'b' and 'c'?
393 examine changes to 'b' and 'c'?
394 (enter ? for help) [Ynesfdaq?] n
394 (enter ? for help) [Ynesfdaq?] n
395
395
396 created new head
396 created new head
397 diff --git a/b b/c
397 diff --git a/b b/c
398 rename from b
398 rename from b
399 rename to c
399 rename to c
400 examine changes to 'b' and 'c'?
400 examine changes to 'b' and 'c'?
401 (enter ? for help) [Ynesfdaq?] y
401 (enter ? for help) [Ynesfdaq?] y
402
402
403 saved backup bundle to $TESTTMP/split/.hg/strip-backup/*-*-split.hg (glob)
403 saved backup bundle to $TESTTMP/split/.hg/strip-backup/*-*-split.hg (glob)
404 $ cd ..
404 $ cd ..
405
405
406 Test committing half a rename
406 Test committing half a rename
407
407
408 $ hg init partial
408 $ hg init partial
409 $ cd partial
409 $ cd partial
410 $ echo a > a
410 $ echo a > a
411 $ hg ci -Aqm 'add a'
411 $ hg ci -Aqm 'add a'
412 $ hg mv a b
412 $ hg mv a b
413 $ hg ci -m 'remove a' a
413 $ hg ci -m 'remove a' a
414
414
415 #if sidedata
415 #if sidedata
416
416
417 Test upgrading/downgrading to sidedata storage
417 Test upgrading/downgrading to sidedata storage
418 ==============================================
418 ==============================================
419
419
420 downgrading
420 downgrading
421
421
422 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
422 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
423 format-variant repo config default
423 format-variant repo config default
424 copies-sdc: yes yes no
424 copies-sdc: yes yes no
425 revlog-v2: no no no
425 revlog-v2: no no no
426 changelog-v2: yes yes no
426 changelog-v2: yes yes no
427 $ hg debugsidedata -c -- 0
427 $ hg debugsidedata -c -- 0
428 1 sidedata entries
428 1 sidedata entries
429 entry-0014 size 14
429 entry-0014 size 14
430 $ hg debugsidedata -c -- 1
430 $ hg debugsidedata -c -- 1
431 1 sidedata entries
431 1 sidedata entries
432 entry-0014 size 14
432 entry-0014 size 14
433 $ hg debugsidedata -m -- 0
433 $ hg debugsidedata -m -- 0
434 $ cat << EOF > .hg/hgrc
434 $ cat << EOF > .hg/hgrc
435 > [format]
435 > [format]
436 > exp-use-copies-side-data-changeset = no
436 > exp-use-copies-side-data-changeset = no
437 > EOF
437 > EOF
438 $ hg debugupgraderepo --run --quiet --no-backup
438 $ hg debugupgraderepo --run --quiet --no-backup
439 upgrade will perform the following actions:
439 upgrade will perform the following actions:
440
440
441 requirements
441 requirements
442 preserved: * (glob)
442 preserved: * (glob)
443 removed: exp-changelog-v2, exp-copies-sidedata-changeset
443 removed: exp-changelog-v2, exp-copies-sidedata-changeset
444
444
445 processed revlogs:
445 processed revlogs:
446 - changelog
446 - changelog
447
447
448 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
448 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
449 format-variant repo config default
449 format-variant repo config default
450 copies-sdc: no no no
450 copies-sdc: no no no
451 revlog-v2: no no no
451 revlog-v2: no no no
452 changelog-v2: no no no
452 changelog-v2: no no no
453 $ hg debugsidedata -c -- 0
453 $ hg debugsidedata -c -- 0
454 $ hg debugsidedata -c -- 1
454 $ hg debugsidedata -c -- 1
455 $ hg debugsidedata -m -- 0
455 $ hg debugsidedata -m -- 0
456
456
457 upgrading
457 upgrading
458
458
459 $ cat << EOF > .hg/hgrc
459 $ cat << EOF > .hg/hgrc
460 > [format]
460 > [format]
461 > exp-use-copies-side-data-changeset = yes
461 > exp-use-copies-side-data-changeset = yes
462 > EOF
462 > EOF
463 $ hg debugupgraderepo --run --quiet --no-backup
463 $ hg debugupgraderepo --run --quiet --no-backup
464 upgrade will perform the following actions:
464 upgrade will perform the following actions:
465
465
466 requirements
466 requirements
467 preserved: * (glob)
467 preserved: * (glob)
468 added: exp-changelog-v2, exp-copies-sidedata-changeset
468 added: exp-changelog-v2, exp-copies-sidedata-changeset
469
469
470 processed revlogs:
470 processed revlogs:
471 - changelog
471 - changelog
472
472
473 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
473 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
474 format-variant repo config default
474 format-variant repo config default
475 copies-sdc: yes yes no
475 copies-sdc: yes yes no
476 revlog-v2: no no no
476 revlog-v2: no no no
477 changelog-v2: yes yes no
477 changelog-v2: yes yes no
478 $ hg debugsidedata -c -- 0
478 $ hg debugsidedata -c -- 0
479 1 sidedata entries
479 1 sidedata entries
480 entry-0014 size 14
480 entry-0014 size 14
481 $ hg debugsidedata -c -- 1
481 $ hg debugsidedata -c -- 1
482 1 sidedata entries
482 1 sidedata entries
483 entry-0014 size 14
483 entry-0014 size 14
484 $ hg debugsidedata -m -- 0
484 $ hg debugsidedata -m -- 0
485
485
486 #endif
486 #endif
487
487
488 $ cd ..
488 $ cd ..
@@ -1,416 +1,416 b''
1 $ mkdir part1
1 $ mkdir part1
2 $ cd part1
2 $ cd part1
3
3
4 $ hg init
4 $ hg init
5 $ echo a > a
5 $ echo a > a
6 $ hg add a
6 $ hg add a
7 $ hg commit -m "1"
7 $ hg commit -m "1"
8 $ hg status
8 $ hg status
9 $ hg copy a b
9 $ hg copy a b
10 $ hg --config ui.portablefilenames=abort copy a con.xml
10 $ hg --config ui.portablefilenames=abort copy a con.xml
11 abort: filename contains 'con', which is reserved on Windows: con.xml
11 abort: filename contains 'con', which is reserved on Windows: con.xml
12 [10]
12 [10]
13 $ hg status
13 $ hg status
14 A b
14 A b
15 $ hg sum
15 $ hg sum
16 parent: 0:c19d34741b0a tip
16 parent: 0:c19d34741b0a tip
17 1
17 1
18 branch: default
18 branch: default
19 commit: 1 copied
19 commit: 1 copied
20 update: (current)
20 update: (current)
21 phases: 1 draft
21 phases: 1 draft
22 $ hg --debug commit -m "2"
22 $ hg --debug commit -m "2"
23 committing files:
23 committing files:
24 b
24 b
25 b: copy a:b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
25 b: copy a:b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
26 committing manifest
26 committing manifest
27 committing changelog
27 committing changelog
28 updating the branch cache
28 updating the branch cache
29 committed changeset 1:93580a2c28a50a56f63526fb305067e6fbf739c4
29 committed changeset 1:93580a2c28a50a56f63526fb305067e6fbf739c4
30
30
31 we should see two history entries
31 we should see two history entries
32
32
33 $ hg history -v
33 $ hg history -v
34 changeset: 1:93580a2c28a5
34 changeset: 1:93580a2c28a5
35 tag: tip
35 tag: tip
36 user: test
36 user: test
37 date: Thu Jan 01 00:00:00 1970 +0000
37 date: Thu Jan 01 00:00:00 1970 +0000
38 files: b
38 files: b
39 description:
39 description:
40 2
40 2
41
41
42
42
43 changeset: 0:c19d34741b0a
43 changeset: 0:c19d34741b0a
44 user: test
44 user: test
45 date: Thu Jan 01 00:00:00 1970 +0000
45 date: Thu Jan 01 00:00:00 1970 +0000
46 files: a
46 files: a
47 description:
47 description:
48 1
48 1
49
49
50
50
51
51
52 we should see one log entry for a
52 we should see one log entry for a
53
53
54 $ hg log a
54 $ hg log a
55 changeset: 0:c19d34741b0a
55 changeset: 0:c19d34741b0a
56 user: test
56 user: test
57 date: Thu Jan 01 00:00:00 1970 +0000
57 date: Thu Jan 01 00:00:00 1970 +0000
58 summary: 1
58 summary: 1
59
59
60
60
61 this should show a revision linked to changeset 0
61 this should show a revision linked to changeset 0
62
62
63 $ hg debugindex a
63 $ hg debugindex a
64 rev linkrev nodeid p1 p2
64 rev linkrev nodeid p1-nodeid p2-nodeid
65 0 0 b789fdd96dc2 000000000000 000000000000
65 0 0 b789fdd96dc2 000000000000 000000000000
66
66
67 we should see one log entry for b
67 we should see one log entry for b
68
68
69 $ hg log b
69 $ hg log b
70 changeset: 1:93580a2c28a5
70 changeset: 1:93580a2c28a5
71 tag: tip
71 tag: tip
72 user: test
72 user: test
73 date: Thu Jan 01 00:00:00 1970 +0000
73 date: Thu Jan 01 00:00:00 1970 +0000
74 summary: 2
74 summary: 2
75
75
76
76
77 this should show a revision linked to changeset 1
77 this should show a revision linked to changeset 1
78
78
79 $ hg debugindex b
79 $ hg debugindex b
80 rev linkrev nodeid p1 p2
80 rev linkrev nodeid p1-nodeid p2-nodeid
81 0 1 37d9b5d994ea 000000000000 000000000000
81 0 1 37d9b5d994ea 000000000000 000000000000
82
82
83 this should show the rename information in the metadata
83 this should show the rename information in the metadata
84
84
85 $ hg debugdata b 0 | head -3 | tail -2
85 $ hg debugdata b 0 | head -3 | tail -2
86 copy: a
86 copy: a
87 copyrev: b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
87 copyrev: b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
88
88
89 #if reporevlogstore
89 #if reporevlogstore
90 $ md5sum.py .hg/store/data/b.i
90 $ md5sum.py .hg/store/data/b.i
91 44913824c8f5890ae218f9829535922e .hg/store/data/b.i
91 44913824c8f5890ae218f9829535922e .hg/store/data/b.i
92 #endif
92 #endif
93 $ hg cat b > bsum
93 $ hg cat b > bsum
94 $ md5sum.py bsum
94 $ md5sum.py bsum
95 60b725f10c9c85c70d97880dfe8191b3 bsum
95 60b725f10c9c85c70d97880dfe8191b3 bsum
96 $ hg cat a > asum
96 $ hg cat a > asum
97 $ md5sum.py asum
97 $ md5sum.py asum
98 60b725f10c9c85c70d97880dfe8191b3 asum
98 60b725f10c9c85c70d97880dfe8191b3 asum
99 $ hg verify
99 $ hg verify
100 checking changesets
100 checking changesets
101 checking manifests
101 checking manifests
102 crosschecking files in changesets and manifests
102 crosschecking files in changesets and manifests
103 checking files
103 checking files
104 checked 2 changesets with 2 changes to 2 files
104 checked 2 changesets with 2 changes to 2 files
105
105
106 $ cd ..
106 $ cd ..
107
107
108
108
109 $ mkdir part2
109 $ mkdir part2
110 $ cd part2
110 $ cd part2
111
111
112 $ hg init
112 $ hg init
113 $ echo foo > foo
113 $ echo foo > foo
114 should fail - foo is not managed
114 should fail - foo is not managed
115 $ hg mv foo bar
115 $ hg mv foo bar
116 foo: not copying - file is not managed
116 foo: not copying - file is not managed
117 abort: no files to copy
117 abort: no files to copy
118 (maybe you meant to use --after --at-rev=.)
118 (maybe you meant to use --after --at-rev=.)
119 [10]
119 [10]
120 $ hg st -A
120 $ hg st -A
121 ? foo
121 ? foo
122 respects ui.relative-paths
122 respects ui.relative-paths
123 $ mkdir dir
123 $ mkdir dir
124 $ cd dir
124 $ cd dir
125 $ hg mv ../foo ../bar
125 $ hg mv ../foo ../bar
126 ../foo: not copying - file is not managed
126 ../foo: not copying - file is not managed
127 abort: no files to copy
127 abort: no files to copy
128 (maybe you meant to use --after --at-rev=.)
128 (maybe you meant to use --after --at-rev=.)
129 [10]
129 [10]
130 $ hg mv ../foo ../bar --config ui.relative-paths=yes
130 $ hg mv ../foo ../bar --config ui.relative-paths=yes
131 ../foo: not copying - file is not managed
131 ../foo: not copying - file is not managed
132 abort: no files to copy
132 abort: no files to copy
133 (maybe you meant to use --after --at-rev=.)
133 (maybe you meant to use --after --at-rev=.)
134 [10]
134 [10]
135 $ hg mv ../foo ../bar --config ui.relative-paths=no
135 $ hg mv ../foo ../bar --config ui.relative-paths=no
136 foo: not copying - file is not managed
136 foo: not copying - file is not managed
137 abort: no files to copy
137 abort: no files to copy
138 (maybe you meant to use --after --at-rev=.)
138 (maybe you meant to use --after --at-rev=.)
139 [10]
139 [10]
140 $ cd ..
140 $ cd ..
141 $ rmdir dir
141 $ rmdir dir
142 $ hg add foo
142 $ hg add foo
143 dry-run; print a warning that this is not a real copy; foo is added
143 dry-run; print a warning that this is not a real copy; foo is added
144 $ hg mv --dry-run foo bar
144 $ hg mv --dry-run foo bar
145 foo has not been committed yet, so no copy data will be stored for bar.
145 foo has not been committed yet, so no copy data will be stored for bar.
146 $ hg st -A
146 $ hg st -A
147 A foo
147 A foo
148 should print a warning that this is not a real copy; bar is added
148 should print a warning that this is not a real copy; bar is added
149 $ hg mv foo bar
149 $ hg mv foo bar
150 foo has not been committed yet, so no copy data will be stored for bar.
150 foo has not been committed yet, so no copy data will be stored for bar.
151 $ hg st -A
151 $ hg st -A
152 A bar
152 A bar
153 should print a warning that this is not a real copy; foo is added
153 should print a warning that this is not a real copy; foo is added
154 $ hg cp bar foo
154 $ hg cp bar foo
155 bar has not been committed yet, so no copy data will be stored for foo.
155 bar has not been committed yet, so no copy data will be stored for foo.
156 $ hg rm -f bar
156 $ hg rm -f bar
157 $ rm bar
157 $ rm bar
158 $ hg st -A
158 $ hg st -A
159 A foo
159 A foo
160 $ hg commit -m1
160 $ hg commit -m1
161
161
162 moving a missing file
162 moving a missing file
163 $ rm foo
163 $ rm foo
164 $ hg mv foo foo3
164 $ hg mv foo foo3
165 foo: deleted in working directory
165 foo: deleted in working directory
166 foo3 does not exist!
166 foo3 does not exist!
167 $ hg up -qC .
167 $ hg up -qC .
168
168
169 copy --after to a nonexistent target filename
169 copy --after to a nonexistent target filename
170 $ hg cp -A foo dummy
170 $ hg cp -A foo dummy
171 foo: not recording copy - dummy does not exist
171 foo: not recording copy - dummy does not exist
172 [1]
172 [1]
173
173
174 dry-run; should show that foo is clean
174 dry-run; should show that foo is clean
175 $ hg copy --dry-run foo bar
175 $ hg copy --dry-run foo bar
176 $ hg st -A
176 $ hg st -A
177 C foo
177 C foo
178 should show copy
178 should show copy
179 $ hg copy foo bar
179 $ hg copy foo bar
180 $ hg st -C
180 $ hg st -C
181 A bar
181 A bar
182 foo
182 foo
183
183
184 shouldn't show copy
184 shouldn't show copy
185 $ hg commit -m2
185 $ hg commit -m2
186 $ hg st -C
186 $ hg st -C
187
187
188 should match
188 should match
189 $ hg debugindex foo
189 $ hg debugindex foo
190 rev linkrev nodeid p1 p2
190 rev linkrev nodeid p1-nodeid p2-nodeid
191 0 0 2ed2a3912a0b 000000000000 000000000000
191 0 0 2ed2a3912a0b 000000000000 000000000000
192 $ hg debugrename bar
192 $ hg debugrename bar
193 bar renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd
193 bar renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd
194
194
195 $ echo bleah > foo
195 $ echo bleah > foo
196 $ echo quux > bar
196 $ echo quux > bar
197 $ hg commit -m3
197 $ hg commit -m3
198
198
199 should not be renamed
199 should not be renamed
200 $ hg debugrename bar
200 $ hg debugrename bar
201 bar not renamed
201 bar not renamed
202
202
203 $ hg copy -f foo bar
203 $ hg copy -f foo bar
204 should show copy
204 should show copy
205 $ hg st -C
205 $ hg st -C
206 M bar
206 M bar
207 foo
207 foo
208
208
209 XXX: filtering lfilesrepo.status() in 3.3-rc causes the copy source to not be
209 XXX: filtering lfilesrepo.status() in 3.3-rc causes the copy source to not be
210 displayed.
210 displayed.
211 $ hg st -C --config extensions.largefiles=
211 $ hg st -C --config extensions.largefiles=
212 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
212 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
213 M bar
213 M bar
214 foo
214 foo
215
215
216 $ hg commit -m3
216 $ hg commit -m3
217
217
218 should show no parents for tip
218 should show no parents for tip
219 $ hg debugindex bar
219 $ hg debugindex bar
220 rev linkrev nodeid p1 p2
220 rev linkrev nodeid p1-nodeid p2-nodeid
221 0 1 7711d36246cc 000000000000 000000000000
221 0 1 7711d36246cc 000000000000 000000000000
222 1 2 bdf70a2b8d03 7711d36246cc 000000000000
222 1 2 bdf70a2b8d03 7711d36246cc 000000000000
223 2 3 b2558327ea8d 000000000000 000000000000
223 2 3 b2558327ea8d 000000000000 000000000000
224 should match
224 should match
225 $ hg debugindex foo
225 $ hg debugindex foo
226 rev linkrev nodeid p1 p2
226 rev linkrev nodeid p1-nodeid p2-nodeid
227 0 0 2ed2a3912a0b 000000000000 000000000000
227 0 0 2ed2a3912a0b 000000000000 000000000000
228 1 2 dd12c926cf16 2ed2a3912a0b 000000000000
228 1 2 dd12c926cf16 2ed2a3912a0b 000000000000
229 $ hg debugrename bar
229 $ hg debugrename bar
230 bar renamed from foo:dd12c926cf165e3eb4cf87b084955cb617221c17
230 bar renamed from foo:dd12c926cf165e3eb4cf87b084955cb617221c17
231
231
232 should show no copies
232 should show no copies
233 $ hg st -C
233 $ hg st -C
234
234
235 note: since filelog based copy tracing only trace copy for new file, the copy information here is not displayed.
235 note: since filelog based copy tracing only trace copy for new file, the copy information here is not displayed.
236
236
237 $ hg status --copies --change .
237 $ hg status --copies --change .
238 M bar
238 M bar
239
239
240 They are a devel option to walk all file and fine this information anyway.
240 They are a devel option to walk all file and fine this information anyway.
241
241
242 $ hg status --copies --change . --config devel.copy-tracing.trace-all-files=yes
242 $ hg status --copies --change . --config devel.copy-tracing.trace-all-files=yes
243 M bar
243 M bar
244 foo
244 foo
245
245
246 copy --after on an added file
246 copy --after on an added file
247 $ cp bar baz
247 $ cp bar baz
248 $ hg add baz
248 $ hg add baz
249 $ hg cp -A bar baz
249 $ hg cp -A bar baz
250 $ hg st -C
250 $ hg st -C
251 A baz
251 A baz
252 bar
252 bar
253
253
254 foo was clean:
254 foo was clean:
255 $ hg st -AC foo
255 $ hg st -AC foo
256 C foo
256 C foo
257 Trying to copy on top of an existing file fails,
257 Trying to copy on top of an existing file fails,
258 $ hg copy -A bar foo
258 $ hg copy -A bar foo
259 foo: not overwriting - file already committed
259 foo: not overwriting - file already committed
260 ('hg copy --after --force' to replace the file by recording a copy)
260 ('hg copy --after --force' to replace the file by recording a copy)
261 [1]
261 [1]
262 same error without the --after, so the user doesn't have to go through
262 same error without the --after, so the user doesn't have to go through
263 two hints:
263 two hints:
264 $ hg copy bar foo
264 $ hg copy bar foo
265 foo: not overwriting - file already committed
265 foo: not overwriting - file already committed
266 ('hg copy --force' to replace the file by recording a copy)
266 ('hg copy --force' to replace the file by recording a copy)
267 [1]
267 [1]
268 but it's considered modified after a copy --after --force
268 but it's considered modified after a copy --after --force
269 $ hg copy -Af bar foo
269 $ hg copy -Af bar foo
270 $ hg st -AC foo
270 $ hg st -AC foo
271 M foo
271 M foo
272 bar
272 bar
273 The hint for a file that exists but is not in file history doesn't
273 The hint for a file that exists but is not in file history doesn't
274 mention --force:
274 mention --force:
275 $ touch xyzzy
275 $ touch xyzzy
276 $ hg cp bar xyzzy
276 $ hg cp bar xyzzy
277 xyzzy: not overwriting - file exists
277 xyzzy: not overwriting - file exists
278 ('hg copy --after' to record the copy)
278 ('hg copy --after' to record the copy)
279 [1]
279 [1]
280 $ hg co -qC .
280 $ hg co -qC .
281 $ rm baz xyzzy
281 $ rm baz xyzzy
282
282
283
283
284 Test unmarking copy/rename of a single file
284 Test unmarking copy/rename of a single file
285
285
286 # Set up by creating a copy
286 # Set up by creating a copy
287 $ hg cp bar baz
287 $ hg cp bar baz
288 # Test unmarking as copy a non-existent file
288 # Test unmarking as copy a non-existent file
289 $ hg copy --forget non-existent
289 $ hg copy --forget non-existent
290 non-existent: $ENOENT$
290 non-existent: $ENOENT$
291 $ hg rename --forget non-existent
291 $ hg rename --forget non-existent
292 non-existent: $ENOENT$
292 non-existent: $ENOENT$
293 # Test unmarking as copy an tracked but unrelated file
293 # Test unmarking as copy an tracked but unrelated file
294 $ hg copy --forget foo
294 $ hg copy --forget foo
295 foo: not unmarking as copy - file is not marked as copied
295 foo: not unmarking as copy - file is not marked as copied
296 $ hg rename --forget foo
296 $ hg rename --forget foo
297 foo: not unmarking as copy - file is not marked as copied
297 foo: not unmarking as copy - file is not marked as copied
298 # Test unmarking as copy a copy source
298 # Test unmarking as copy a copy source
299 $ hg copy --forget bar
299 $ hg copy --forget bar
300 bar: not unmarking as copy - file is not marked as copied
300 bar: not unmarking as copy - file is not marked as copied
301 $ hg rename --forget bar
301 $ hg rename --forget bar
302 bar: not unmarking as copy - file is not marked as copied
302 bar: not unmarking as copy - file is not marked as copied
303 # baz should still be marked as a copy
303 # baz should still be marked as a copy
304 $ hg st -C
304 $ hg st -C
305 A baz
305 A baz
306 bar
306 bar
307 # Test the normal case
307 # Test the normal case
308 $ hg copy --forget baz
308 $ hg copy --forget baz
309 $ hg st -C
309 $ hg st -C
310 A baz
310 A baz
311 $ rm bar
311 $ rm bar
312 $ hg rename --after bar baz
312 $ hg rename --after bar baz
313 $ hg st -C
313 $ hg st -C
314 A baz
314 A baz
315 bar
315 bar
316 R bar
316 R bar
317 $ hg rename --forget baz
317 $ hg rename --forget baz
318 $ hg st -C
318 $ hg st -C
319 A baz
319 A baz
320 R bar
320 R bar
321 $ hg revert bar
321 $ hg revert bar
322 # Test unmarking as copy with matching an non-matching patterns
322 # Test unmarking as copy with matching an non-matching patterns
323 $ hg cp bar baz --after
323 $ hg cp bar baz --after
324 $ hg copy --forget bar baz
324 $ hg copy --forget bar baz
325 bar: not unmarking as copy - file is not marked as copied
325 bar: not unmarking as copy - file is not marked as copied
326 $ hg cp bar baz --after
326 $ hg cp bar baz --after
327 $ hg rename --forget bar baz
327 $ hg rename --forget bar baz
328 bar: not unmarking as copy - file is not marked as copied
328 bar: not unmarking as copy - file is not marked as copied
329 $ hg st -C
329 $ hg st -C
330 A baz
330 A baz
331 # Test unmarking as copy with no exact matches
331 # Test unmarking as copy with no exact matches
332 $ hg cp bar baz --after
332 $ hg cp bar baz --after
333 $ hg copy --forget .
333 $ hg copy --forget .
334 $ hg st -C
334 $ hg st -C
335 A baz
335 A baz
336 $ hg cp bar baz --after
336 $ hg cp bar baz --after
337 $ hg st -C
337 $ hg st -C
338 A baz
338 A baz
339 bar
339 bar
340 $ hg rename --forget .
340 $ hg rename --forget .
341 $ hg st -C
341 $ hg st -C
342 A baz
342 A baz
343 $ hg forget baz
343 $ hg forget baz
344 $ rm baz
344 $ rm baz
345
345
346 Test unmarking copy of a directory
346 Test unmarking copy of a directory
347
347
348 $ mkdir dir
348 $ mkdir dir
349 $ echo foo > dir/foo
349 $ echo foo > dir/foo
350 $ echo bar > dir/bar
350 $ echo bar > dir/bar
351 $ hg add dir
351 $ hg add dir
352 adding dir/bar
352 adding dir/bar
353 adding dir/foo
353 adding dir/foo
354 $ hg ci -m 'add dir/'
354 $ hg ci -m 'add dir/'
355 $ hg cp dir dir2
355 $ hg cp dir dir2
356 copying dir/bar to dir2/bar
356 copying dir/bar to dir2/bar
357 copying dir/foo to dir2/foo
357 copying dir/foo to dir2/foo
358 $ touch dir2/untracked
358 $ touch dir2/untracked
359 $ hg copy --forget dir2
359 $ hg copy --forget dir2
360 $ hg st -C
360 $ hg st -C
361 A dir2/bar
361 A dir2/bar
362 A dir2/foo
362 A dir2/foo
363 ? dir2/untracked
363 ? dir2/untracked
364 # Clean up for next test
364 # Clean up for next test
365 $ hg forget dir2
365 $ hg forget dir2
366 removing dir2/bar
366 removing dir2/bar
367 removing dir2/foo
367 removing dir2/foo
368 $ rm -r dir2
368 $ rm -r dir2
369
369
370 Test uncopy on committed copies
370 Test uncopy on committed copies
371
371
372 # Commit some copies
372 # Commit some copies
373 $ hg cp bar baz
373 $ hg cp bar baz
374 $ hg cp bar qux
374 $ hg cp bar qux
375 $ hg ci -m copies
375 $ hg ci -m copies
376 $ hg st -C --change .
376 $ hg st -C --change .
377 A baz
377 A baz
378 bar
378 bar
379 A qux
379 A qux
380 bar
380 bar
381 $ base=$(hg log -r '.^' -T '{rev}')
381 $ base=$(hg log -r '.^' -T '{rev}')
382 $ hg log -G -T '{rev}:{node|short} {desc}\n' -r $base:
382 $ hg log -G -T '{rev}:{node|short} {desc}\n' -r $base:
383 @ 5:a612dc2edfda copies
383 @ 5:a612dc2edfda copies
384 |
384 |
385 o 4:4800b1f1f38e add dir/
385 o 4:4800b1f1f38e add dir/
386 |
386 |
387 ~
387 ~
388 # Add a dirty change on top to show that it's unaffected
388 # Add a dirty change on top to show that it's unaffected
389 $ echo dirty >> baz
389 $ echo dirty >> baz
390 $ hg st
390 $ hg st
391 M baz
391 M baz
392 $ cat baz
392 $ cat baz
393 bleah
393 bleah
394 dirty
394 dirty
395 $ hg copy --forget --at-rev . baz
395 $ hg copy --forget --at-rev . baz
396 saved backup bundle to $TESTTMP/part2/.hg/strip-backup/a612dc2edfda-e36b4448-uncopy.hg
396 saved backup bundle to $TESTTMP/part2/.hg/strip-backup/a612dc2edfda-e36b4448-uncopy.hg
397 # The unwanted copy is no longer recorded, but the unrelated one is
397 # The unwanted copy is no longer recorded, but the unrelated one is
398 $ hg st -C --change .
398 $ hg st -C --change .
399 A baz
399 A baz
400 A qux
400 A qux
401 bar
401 bar
402 # The old commit is gone and we have updated to the new commit
402 # The old commit is gone and we have updated to the new commit
403 $ hg log -G -T '{rev}:{node|short} {desc}\n' -r $base:
403 $ hg log -G -T '{rev}:{node|short} {desc}\n' -r $base:
404 @ 5:c45090e5effe copies
404 @ 5:c45090e5effe copies
405 |
405 |
406 o 4:4800b1f1f38e add dir/
406 o 4:4800b1f1f38e add dir/
407 |
407 |
408 ~
408 ~
409 # Working copy still has the uncommitted change
409 # Working copy still has the uncommitted change
410 $ hg st
410 $ hg st
411 M baz
411 M baz
412 $ cat baz
412 $ cat baz
413 bleah
413 bleah
414 dirty
414 dirty
415
415
416 $ cd ..
416 $ cd ..
@@ -1,717 +1,717 b''
1 $ cat << EOF >> $HGRCPATH
1 $ cat << EOF >> $HGRCPATH
2 > [ui]
2 > [ui]
3 > interactive=yes
3 > interactive=yes
4 > EOF
4 > EOF
5
5
6 $ hg init debugrevlog
6 $ hg init debugrevlog
7 $ cd debugrevlog
7 $ cd debugrevlog
8 $ echo a > a
8 $ echo a > a
9 $ hg ci -Am adda
9 $ hg ci -Am adda
10 adding a
10 adding a
11 $ hg rm .
11 $ hg rm .
12 removing a
12 removing a
13 $ hg ci -Am make-it-empty
13 $ hg ci -Am make-it-empty
14 $ hg revert --all -r 0
14 $ hg revert --all -r 0
15 adding a
15 adding a
16 $ hg ci -Am make-it-full
16 $ hg ci -Am make-it-full
17 #if reporevlogstore
17 #if reporevlogstore
18 $ hg debugrevlog -c
18 $ hg debugrevlog -c
19 format : 1
19 format : 1
20 flags : inline
20 flags : inline
21
21
22 revisions : 3
22 revisions : 3
23 merges : 0 ( 0.00%)
23 merges : 0 ( 0.00%)
24 normal : 3 (100.00%)
24 normal : 3 (100.00%)
25 revisions : 3
25 revisions : 3
26 empty : 0 ( 0.00%)
26 empty : 0 ( 0.00%)
27 text : 0 (100.00%)
27 text : 0 (100.00%)
28 delta : 0 (100.00%)
28 delta : 0 (100.00%)
29 snapshot : 3 (100.00%)
29 snapshot : 3 (100.00%)
30 lvl-0 : 3 (100.00%)
30 lvl-0 : 3 (100.00%)
31 deltas : 0 ( 0.00%)
31 deltas : 0 ( 0.00%)
32 revision size : 191
32 revision size : 191
33 snapshot : 191 (100.00%)
33 snapshot : 191 (100.00%)
34 lvl-0 : 191 (100.00%)
34 lvl-0 : 191 (100.00%)
35 deltas : 0 ( 0.00%)
35 deltas : 0 ( 0.00%)
36
36
37 chunks : 3
37 chunks : 3
38 0x75 (u) : 3 (100.00%)
38 0x75 (u) : 3 (100.00%)
39 chunks size : 191
39 chunks size : 191
40 0x75 (u) : 191 (100.00%)
40 0x75 (u) : 191 (100.00%)
41
41
42 avg chain length : 0
42 avg chain length : 0
43 max chain length : 0
43 max chain length : 0
44 max chain reach : 67
44 max chain reach : 67
45 compression ratio : 0
45 compression ratio : 0
46
46
47 uncompressed data size (min/max/avg) : 57 / 66 / 62
47 uncompressed data size (min/max/avg) : 57 / 66 / 62
48 full revision size (min/max/avg) : 58 / 67 / 63
48 full revision size (min/max/avg) : 58 / 67 / 63
49 inter-snapshot size (min/max/avg) : 0 / 0 / 0
49 inter-snapshot size (min/max/avg) : 0 / 0 / 0
50 delta size (min/max/avg) : 0 / 0 / 0
50 delta size (min/max/avg) : 0 / 0 / 0
51 $ hg debugrevlog -m
51 $ hg debugrevlog -m
52 format : 1
52 format : 1
53 flags : inline, generaldelta
53 flags : inline, generaldelta
54
54
55 revisions : 3
55 revisions : 3
56 merges : 0 ( 0.00%)
56 merges : 0 ( 0.00%)
57 normal : 3 (100.00%)
57 normal : 3 (100.00%)
58 revisions : 3
58 revisions : 3
59 empty : 1 (33.33%)
59 empty : 1 (33.33%)
60 text : 1 (100.00%)
60 text : 1 (100.00%)
61 delta : 0 ( 0.00%)
61 delta : 0 ( 0.00%)
62 snapshot : 2 (66.67%)
62 snapshot : 2 (66.67%)
63 lvl-0 : 2 (66.67%)
63 lvl-0 : 2 (66.67%)
64 deltas : 0 ( 0.00%)
64 deltas : 0 ( 0.00%)
65 revision size : 88
65 revision size : 88
66 snapshot : 88 (100.00%)
66 snapshot : 88 (100.00%)
67 lvl-0 : 88 (100.00%)
67 lvl-0 : 88 (100.00%)
68 deltas : 0 ( 0.00%)
68 deltas : 0 ( 0.00%)
69
69
70 chunks : 3
70 chunks : 3
71 empty : 1 (33.33%)
71 empty : 1 (33.33%)
72 0x75 (u) : 2 (66.67%)
72 0x75 (u) : 2 (66.67%)
73 chunks size : 88
73 chunks size : 88
74 empty : 0 ( 0.00%)
74 empty : 0 ( 0.00%)
75 0x75 (u) : 88 (100.00%)
75 0x75 (u) : 88 (100.00%)
76
76
77 avg chain length : 0
77 avg chain length : 0
78 max chain length : 0
78 max chain length : 0
79 max chain reach : 44
79 max chain reach : 44
80 compression ratio : 0
80 compression ratio : 0
81
81
82 uncompressed data size (min/max/avg) : 0 / 43 / 28
82 uncompressed data size (min/max/avg) : 0 / 43 / 28
83 full revision size (min/max/avg) : 44 / 44 / 44
83 full revision size (min/max/avg) : 44 / 44 / 44
84 inter-snapshot size (min/max/avg) : 0 / 0 / 0
84 inter-snapshot size (min/max/avg) : 0 / 0 / 0
85 delta size (min/max/avg) : 0 / 0 / 0
85 delta size (min/max/avg) : 0 / 0 / 0
86 $ hg debugrevlog a
86 $ hg debugrevlog a
87 format : 1
87 format : 1
88 flags : inline, generaldelta
88 flags : inline, generaldelta
89
89
90 revisions : 1
90 revisions : 1
91 merges : 0 ( 0.00%)
91 merges : 0 ( 0.00%)
92 normal : 1 (100.00%)
92 normal : 1 (100.00%)
93 revisions : 1
93 revisions : 1
94 empty : 0 ( 0.00%)
94 empty : 0 ( 0.00%)
95 text : 0 (100.00%)
95 text : 0 (100.00%)
96 delta : 0 (100.00%)
96 delta : 0 (100.00%)
97 snapshot : 1 (100.00%)
97 snapshot : 1 (100.00%)
98 lvl-0 : 1 (100.00%)
98 lvl-0 : 1 (100.00%)
99 deltas : 0 ( 0.00%)
99 deltas : 0 ( 0.00%)
100 revision size : 3
100 revision size : 3
101 snapshot : 3 (100.00%)
101 snapshot : 3 (100.00%)
102 lvl-0 : 3 (100.00%)
102 lvl-0 : 3 (100.00%)
103 deltas : 0 ( 0.00%)
103 deltas : 0 ( 0.00%)
104
104
105 chunks : 1
105 chunks : 1
106 0x75 (u) : 1 (100.00%)
106 0x75 (u) : 1 (100.00%)
107 chunks size : 3
107 chunks size : 3
108 0x75 (u) : 3 (100.00%)
108 0x75 (u) : 3 (100.00%)
109
109
110 avg chain length : 0
110 avg chain length : 0
111 max chain length : 0
111 max chain length : 0
112 max chain reach : 3
112 max chain reach : 3
113 compression ratio : 0
113 compression ratio : 0
114
114
115 uncompressed data size (min/max/avg) : 2 / 2 / 2
115 uncompressed data size (min/max/avg) : 2 / 2 / 2
116 full revision size (min/max/avg) : 3 / 3 / 3
116 full revision size (min/max/avg) : 3 / 3 / 3
117 inter-snapshot size (min/max/avg) : 0 / 0 / 0
117 inter-snapshot size (min/max/avg) : 0 / 0 / 0
118 delta size (min/max/avg) : 0 / 0 / 0
118 delta size (min/max/avg) : 0 / 0 / 0
119 #endif
119 #endif
120
120
121 Test debugindex, with and without the --verbose/--debug flag
121 Test debugindex, with and without the --verbose/--debug flag
122 $ hg debugrevlogindex a
122 $ hg debugrevlogindex a
123 rev linkrev nodeid p1 p2
123 rev linkrev nodeid p1 p2
124 0 0 b789fdd96dc2 000000000000 000000000000
124 0 0 b789fdd96dc2 000000000000 000000000000
125
125
126 #if no-reposimplestore
126 #if no-reposimplestore
127 $ hg --verbose debugrevlogindex a
127 $ hg --verbose debugrevlogindex a
128 rev offset length linkrev nodeid p1 p2
128 rev offset length linkrev nodeid p1 p2
129 0 0 3 0 b789fdd96dc2 000000000000 000000000000
129 0 0 3 0 b789fdd96dc2 000000000000 000000000000
130
130
131 $ hg --debug debugrevlogindex a
131 $ hg --debug debugrevlogindex a
132 rev offset length linkrev nodeid p1 p2
132 rev offset length linkrev nodeid p1 p2
133 0 0 3 0 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
133 0 0 3 0 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
134 #endif
134 #endif
135
135
136 $ hg debugrevlogindex -f 1 a
136 $ hg debugrevlogindex -f 1 a
137 rev flag size link p1 p2 nodeid
137 rev flag size link p1 p2 nodeid
138 0 0000 2 0 -1 -1 b789fdd96dc2
138 0 0000 2 0 -1 -1 b789fdd96dc2
139
139
140 #if no-reposimplestore
140 #if no-reposimplestore
141 $ hg --verbose debugrevlogindex -f 1 a
141 $ hg --verbose debugrevlogindex -f 1 a
142 rev flag offset length size link p1 p2 nodeid
142 rev flag offset length size link p1 p2 nodeid
143 0 0000 0 3 2 0 -1 -1 b789fdd96dc2
143 0 0000 0 3 2 0 -1 -1 b789fdd96dc2
144
144
145 $ hg --debug debugrevlogindex -f 1 a
145 $ hg --debug debugrevlogindex -f 1 a
146 rev flag offset length size link p1 p2 nodeid
146 rev flag offset length size link p1 p2 nodeid
147 0 0000 0 3 2 0 -1 -1 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
147 0 0000 0 3 2 0 -1 -1 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
148 #endif
148 #endif
149
149
150 $ hg debugindex -c
150 $ hg debugindex -c
151 rev linkrev nodeid p1 p2
151 rev linkrev nodeid p1-nodeid p2-nodeid
152 0 0 07f494440405 000000000000 000000000000
152 0 0 07f494440405 000000000000 000000000000
153 1 1 8cccb4b5fec2 07f494440405 000000000000
153 1 1 8cccb4b5fec2 07f494440405 000000000000
154 2 2 b1e228c512c5 8cccb4b5fec2 000000000000
154 2 2 b1e228c512c5 8cccb4b5fec2 000000000000
155 $ hg debugindex -c --debug
155 $ hg debugindex -c --debug
156 rev linkrev nodeid p1 p2
156 rev linkrev nodeid p1-nodeid p2-nodeid
157 0 0 07f4944404050f47db2e5c5071e0e84e7a27bba9 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
157 0 0 07f4944404050f47db2e5c5071e0e84e7a27bba9 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
158 1 1 8cccb4b5fec20cafeb99dd01c26d4dee8ea4388a 07f4944404050f47db2e5c5071e0e84e7a27bba9 0000000000000000000000000000000000000000
158 1 1 8cccb4b5fec20cafeb99dd01c26d4dee8ea4388a 07f4944404050f47db2e5c5071e0e84e7a27bba9 0000000000000000000000000000000000000000
159 2 2 b1e228c512c5d7066d70562ed839c3323a62d6d2 8cccb4b5fec20cafeb99dd01c26d4dee8ea4388a 0000000000000000000000000000000000000000
159 2 2 b1e228c512c5d7066d70562ed839c3323a62d6d2 8cccb4b5fec20cafeb99dd01c26d4dee8ea4388a 0000000000000000000000000000000000000000
160 $ hg debugindex -m
160 $ hg debugindex -m
161 rev linkrev nodeid p1 p2
161 rev linkrev nodeid p1-nodeid p2-nodeid
162 0 0 a0c8bcbbb45c 000000000000 000000000000
162 0 0 a0c8bcbbb45c 000000000000 000000000000
163 1 1 57faf8a737ae a0c8bcbbb45c 000000000000
163 1 1 57faf8a737ae a0c8bcbbb45c 000000000000
164 2 2 a35b10320954 57faf8a737ae 000000000000
164 2 2 a35b10320954 57faf8a737ae 000000000000
165 $ hg debugindex -m --debug
165 $ hg debugindex -m --debug
166 rev linkrev nodeid p1 p2
166 rev linkrev nodeid p1-nodeid p2-nodeid
167 0 0 a0c8bcbbb45c63b90b70ad007bf38961f64f2af0 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
167 0 0 a0c8bcbbb45c63b90b70ad007bf38961f64f2af0 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
168 1 1 57faf8a737ae7faf490582941a82319ba6529dca a0c8bcbbb45c63b90b70ad007bf38961f64f2af0 0000000000000000000000000000000000000000
168 1 1 57faf8a737ae7faf490582941a82319ba6529dca a0c8bcbbb45c63b90b70ad007bf38961f64f2af0 0000000000000000000000000000000000000000
169 2 2 a35b103209548032201c16c7688cb2657f037a38 57faf8a737ae7faf490582941a82319ba6529dca 0000000000000000000000000000000000000000
169 2 2 a35b103209548032201c16c7688cb2657f037a38 57faf8a737ae7faf490582941a82319ba6529dca 0000000000000000000000000000000000000000
170 $ hg debugindex a
170 $ hg debugindex a
171 rev linkrev nodeid p1 p2
171 rev linkrev nodeid p1-nodeid p2-nodeid
172 0 0 b789fdd96dc2 000000000000 000000000000
172 0 0 b789fdd96dc2 000000000000 000000000000
173 $ hg debugindex --debug a
173 $ hg debugindex --debug a
174 rev linkrev nodeid p1 p2
174 rev linkrev nodeid p1-nodeid p2-nodeid
175 0 0 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
175 0 0 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
176
176
177 debugdelta chain basic output
177 debugdelta chain basic output
178
178
179 #if reporevlogstore pure
179 #if reporevlogstore pure
180 $ hg debugindexstats
180 $ hg debugindexstats
181 abort: debugindexstats only works with native code
181 abort: debugindexstats only works with native code
182 [255]
182 [255]
183 #endif
183 #endif
184 #if reporevlogstore no-pure
184 #if reporevlogstore no-pure
185 $ hg debugindexstats
185 $ hg debugindexstats
186 node trie capacity: 4
186 node trie capacity: 4
187 node trie count: 2
187 node trie count: 2
188 node trie depth: 1
188 node trie depth: 1
189 node trie last rev scanned: -1 (no-rust !)
189 node trie last rev scanned: -1 (no-rust !)
190 node trie last rev scanned: 3 (rust !)
190 node trie last rev scanned: 3 (rust !)
191 node trie lookups: 4 (no-rust !)
191 node trie lookups: 4 (no-rust !)
192 node trie lookups: 2 (rust !)
192 node trie lookups: 2 (rust !)
193 node trie misses: 1
193 node trie misses: 1
194 node trie splits: 1
194 node trie splits: 1
195 revs in memory: 3
195 revs in memory: 3
196 #endif
196 #endif
197
197
198 #if reporevlogstore no-pure
198 #if reporevlogstore no-pure
199 $ hg debugdeltachain -m
199 $ hg debugdeltachain -m
200 rev p1 p2 chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio readsize largestblk rddensity srchunks
200 rev p1 p2 chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio readsize largestblk rddensity srchunks
201 0 -1 -1 1 1 -1 base 44 43 44 1.02326 44 0 0.00000 44 44 1.00000 1
201 0 -1 -1 1 1 -1 base 44 43 44 1.02326 44 0 0.00000 44 44 1.00000 1
202 1 0 -1 2 1 -1 base 0 0 0 0.00000 0 0 0.00000 0 0 1.00000 1
202 1 0 -1 2 1 -1 base 0 0 0 0.00000 0 0 0.00000 0 0 1.00000 1
203 2 1 -1 3 1 -1 base 44 43 44 1.02326 44 0 0.00000 44 44 1.00000 1
203 2 1 -1 3 1 -1 base 44 43 44 1.02326 44 0 0.00000 44 44 1.00000 1
204
204
205 $ hg debugdeltachain -m -T '{rev} {chainid} {chainlen}\n'
205 $ hg debugdeltachain -m -T '{rev} {chainid} {chainlen}\n'
206 0 1 1
206 0 1 1
207 1 2 1
207 1 2 1
208 2 3 1
208 2 3 1
209
209
210 $ hg debugdeltachain -m -Tjson
210 $ hg debugdeltachain -m -Tjson
211 [
211 [
212 {
212 {
213 "chainid": 1,
213 "chainid": 1,
214 "chainlen": 1,
214 "chainlen": 1,
215 "chainratio": 1.0232558139534884, (py3 !)
215 "chainratio": 1.0232558139534884, (py3 !)
216 "chainsize": 44,
216 "chainsize": 44,
217 "compsize": 44,
217 "compsize": 44,
218 "deltatype": "base",
218 "deltatype": "base",
219 "extradist": 0,
219 "extradist": 0,
220 "extraratio": 0.0,
220 "extraratio": 0.0,
221 "largestblock": 44,
221 "largestblock": 44,
222 "lindist": 44,
222 "lindist": 44,
223 "p1": -1,
223 "p1": -1,
224 "p2": -1,
224 "p2": -1,
225 "prevrev": -1,
225 "prevrev": -1,
226 "readdensity": 1.0,
226 "readdensity": 1.0,
227 "readsize": 44,
227 "readsize": 44,
228 "rev": 0,
228 "rev": 0,
229 "srchunks": 1,
229 "srchunks": 1,
230 "uncompsize": 43
230 "uncompsize": 43
231 },
231 },
232 {
232 {
233 "chainid": 2,
233 "chainid": 2,
234 "chainlen": 1,
234 "chainlen": 1,
235 "chainratio": 0,
235 "chainratio": 0,
236 "chainsize": 0,
236 "chainsize": 0,
237 "compsize": 0,
237 "compsize": 0,
238 "deltatype": "base",
238 "deltatype": "base",
239 "extradist": 0,
239 "extradist": 0,
240 "extraratio": 0,
240 "extraratio": 0,
241 "largestblock": 0,
241 "largestblock": 0,
242 "lindist": 0,
242 "lindist": 0,
243 "p1": 0,
243 "p1": 0,
244 "p2": -1,
244 "p2": -1,
245 "prevrev": -1,
245 "prevrev": -1,
246 "readdensity": 1,
246 "readdensity": 1,
247 "readsize": 0,
247 "readsize": 0,
248 "rev": 1,
248 "rev": 1,
249 "srchunks": 1,
249 "srchunks": 1,
250 "uncompsize": 0
250 "uncompsize": 0
251 },
251 },
252 {
252 {
253 "chainid": 3,
253 "chainid": 3,
254 "chainlen": 1,
254 "chainlen": 1,
255 "chainratio": 1.0232558139534884, (py3 !)
255 "chainratio": 1.0232558139534884, (py3 !)
256 "chainsize": 44,
256 "chainsize": 44,
257 "compsize": 44,
257 "compsize": 44,
258 "deltatype": "base",
258 "deltatype": "base",
259 "extradist": 0,
259 "extradist": 0,
260 "extraratio": 0.0,
260 "extraratio": 0.0,
261 "largestblock": 44,
261 "largestblock": 44,
262 "lindist": 44,
262 "lindist": 44,
263 "p1": 1,
263 "p1": 1,
264 "p2": -1,
264 "p2": -1,
265 "prevrev": -1,
265 "prevrev": -1,
266 "readdensity": 1.0,
266 "readdensity": 1.0,
267 "readsize": 44,
267 "readsize": 44,
268 "rev": 2,
268 "rev": 2,
269 "srchunks": 1,
269 "srchunks": 1,
270 "uncompsize": 43
270 "uncompsize": 43
271 }
271 }
272 ]
272 ]
273
273
274 debugdelta chain with sparse read enabled
274 debugdelta chain with sparse read enabled
275
275
276 $ cat >> $HGRCPATH <<EOF
276 $ cat >> $HGRCPATH <<EOF
277 > [experimental]
277 > [experimental]
278 > sparse-read = True
278 > sparse-read = True
279 > EOF
279 > EOF
280 $ hg debugdeltachain -m
280 $ hg debugdeltachain -m
281 rev p1 p2 chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio readsize largestblk rddensity srchunks
281 rev p1 p2 chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio readsize largestblk rddensity srchunks
282 0 -1 -1 1 1 -1 base 44 43 44 1.02326 44 0 0.00000 44 44 1.00000 1
282 0 -1 -1 1 1 -1 base 44 43 44 1.02326 44 0 0.00000 44 44 1.00000 1
283 1 0 -1 2 1 -1 base 0 0 0 0.00000 0 0 0.00000 0 0 1.00000 1
283 1 0 -1 2 1 -1 base 0 0 0 0.00000 0 0 0.00000 0 0 1.00000 1
284 2 1 -1 3 1 -1 base 44 43 44 1.02326 44 0 0.00000 44 44 1.00000 1
284 2 1 -1 3 1 -1 base 44 43 44 1.02326 44 0 0.00000 44 44 1.00000 1
285
285
286 $ hg debugdeltachain -m -T '{rev} {chainid} {chainlen} {readsize} {largestblock} {readdensity}\n'
286 $ hg debugdeltachain -m -T '{rev} {chainid} {chainlen} {readsize} {largestblock} {readdensity}\n'
287 0 1 1 44 44 1.0
287 0 1 1 44 44 1.0
288 1 2 1 0 0 1
288 1 2 1 0 0 1
289 2 3 1 44 44 1.0
289 2 3 1 44 44 1.0
290
290
291 $ hg debugdeltachain -m -Tjson
291 $ hg debugdeltachain -m -Tjson
292 [
292 [
293 {
293 {
294 "chainid": 1,
294 "chainid": 1,
295 "chainlen": 1,
295 "chainlen": 1,
296 "chainratio": 1.0232558139534884, (py3 !)
296 "chainratio": 1.0232558139534884, (py3 !)
297 "chainsize": 44,
297 "chainsize": 44,
298 "compsize": 44,
298 "compsize": 44,
299 "deltatype": "base",
299 "deltatype": "base",
300 "extradist": 0,
300 "extradist": 0,
301 "extraratio": 0.0,
301 "extraratio": 0.0,
302 "largestblock": 44,
302 "largestblock": 44,
303 "lindist": 44,
303 "lindist": 44,
304 "p1": -1,
304 "p1": -1,
305 "p2": -1,
305 "p2": -1,
306 "prevrev": -1,
306 "prevrev": -1,
307 "readdensity": 1.0,
307 "readdensity": 1.0,
308 "readsize": 44,
308 "readsize": 44,
309 "rev": 0,
309 "rev": 0,
310 "srchunks": 1,
310 "srchunks": 1,
311 "uncompsize": 43
311 "uncompsize": 43
312 },
312 },
313 {
313 {
314 "chainid": 2,
314 "chainid": 2,
315 "chainlen": 1,
315 "chainlen": 1,
316 "chainratio": 0,
316 "chainratio": 0,
317 "chainsize": 0,
317 "chainsize": 0,
318 "compsize": 0,
318 "compsize": 0,
319 "deltatype": "base",
319 "deltatype": "base",
320 "extradist": 0,
320 "extradist": 0,
321 "extraratio": 0,
321 "extraratio": 0,
322 "largestblock": 0,
322 "largestblock": 0,
323 "lindist": 0,
323 "lindist": 0,
324 "p1": 0,
324 "p1": 0,
325 "p2": -1,
325 "p2": -1,
326 "prevrev": -1,
326 "prevrev": -1,
327 "readdensity": 1,
327 "readdensity": 1,
328 "readsize": 0,
328 "readsize": 0,
329 "rev": 1,
329 "rev": 1,
330 "srchunks": 1,
330 "srchunks": 1,
331 "uncompsize": 0
331 "uncompsize": 0
332 },
332 },
333 {
333 {
334 "chainid": 3,
334 "chainid": 3,
335 "chainlen": 1,
335 "chainlen": 1,
336 "chainratio": 1.0232558139534884, (py3 !)
336 "chainratio": 1.0232558139534884, (py3 !)
337 "chainsize": 44,
337 "chainsize": 44,
338 "compsize": 44,
338 "compsize": 44,
339 "deltatype": "base",
339 "deltatype": "base",
340 "extradist": 0,
340 "extradist": 0,
341 "extraratio": 0.0,
341 "extraratio": 0.0,
342 "largestblock": 44,
342 "largestblock": 44,
343 "lindist": 44,
343 "lindist": 44,
344 "p1": 1,
344 "p1": 1,
345 "p2": -1,
345 "p2": -1,
346 "prevrev": -1,
346 "prevrev": -1,
347 "readdensity": 1.0,
347 "readdensity": 1.0,
348 "readsize": 44,
348 "readsize": 44,
349 "rev": 2,
349 "rev": 2,
350 "srchunks": 1,
350 "srchunks": 1,
351 "uncompsize": 43
351 "uncompsize": 43
352 }
352 }
353 ]
353 ]
354
354
355 $ printf "This test checks things.\n" >> a
355 $ printf "This test checks things.\n" >> a
356 $ hg ci -m a
356 $ hg ci -m a
357 $ hg branch other
357 $ hg branch other
358 marked working directory as branch other
358 marked working directory as branch other
359 (branches are permanent and global, did you want a bookmark?)
359 (branches are permanent and global, did you want a bookmark?)
360 $ for i in `$TESTDIR/seq.py 5`; do
360 $ for i in `$TESTDIR/seq.py 5`; do
361 > printf "shorter ${i}" >> a
361 > printf "shorter ${i}" >> a
362 > hg ci -m "a other:$i"
362 > hg ci -m "a other:$i"
363 > hg up -q default
363 > hg up -q default
364 > printf "for the branch default we want longer chains: ${i}" >> a
364 > printf "for the branch default we want longer chains: ${i}" >> a
365 > hg ci -m "a default:$i"
365 > hg ci -m "a default:$i"
366 > hg up -q other
366 > hg up -q other
367 > done
367 > done
368 $ hg debugdeltachain a -T '{rev} {srchunks}\n' \
368 $ hg debugdeltachain a -T '{rev} {srchunks}\n' \
369 > --config experimental.sparse-read.density-threshold=0.50 \
369 > --config experimental.sparse-read.density-threshold=0.50 \
370 > --config experimental.sparse-read.min-gap-size=0
370 > --config experimental.sparse-read.min-gap-size=0
371 0 1
371 0 1
372 1 1
372 1 1
373 2 1
373 2 1
374 3 1
374 3 1
375 4 1
375 4 1
376 5 1
376 5 1
377 6 1
377 6 1
378 7 1
378 7 1
379 8 1
379 8 1
380 9 1
380 9 1
381 10 2 (no-zstd !)
381 10 2 (no-zstd !)
382 10 1 (zstd !)
382 10 1 (zstd !)
383 11 1
383 11 1
384 $ hg --config extensions.strip= strip --no-backup -r 1
384 $ hg --config extensions.strip= strip --no-backup -r 1
385 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
385 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
386
386
387 Test max chain len
387 Test max chain len
388 $ cat >> $HGRCPATH << EOF
388 $ cat >> $HGRCPATH << EOF
389 > [format]
389 > [format]
390 > maxchainlen=4
390 > maxchainlen=4
391 > EOF
391 > EOF
392
392
393 $ printf "This test checks if maxchainlen config value is respected also it can serve as basic test for debugrevlog -d <file>.\n" >> a
393 $ printf "This test checks if maxchainlen config value is respected also it can serve as basic test for debugrevlog -d <file>.\n" >> a
394 $ hg ci -m a
394 $ hg ci -m a
395 $ printf "b\n" >> a
395 $ printf "b\n" >> a
396 $ hg ci -m a
396 $ hg ci -m a
397 $ printf "c\n" >> a
397 $ printf "c\n" >> a
398 $ hg ci -m a
398 $ hg ci -m a
399 $ printf "d\n" >> a
399 $ printf "d\n" >> a
400 $ hg ci -m a
400 $ hg ci -m a
401 $ printf "e\n" >> a
401 $ printf "e\n" >> a
402 $ hg ci -m a
402 $ hg ci -m a
403 $ printf "f\n" >> a
403 $ printf "f\n" >> a
404 $ hg ci -m a
404 $ hg ci -m a
405 $ printf 'g\n' >> a
405 $ printf 'g\n' >> a
406 $ hg ci -m a
406 $ hg ci -m a
407 $ printf 'h\n' >> a
407 $ printf 'h\n' >> a
408 $ hg ci -m a
408 $ hg ci -m a
409
409
410 $ hg debugrevlog -d a
410 $ hg debugrevlog -d a
411 # rev p1rev p2rev start end deltastart base p1 p2 rawsize totalsize compression heads chainlen
411 # rev p1rev p2rev start end deltastart base p1 p2 rawsize totalsize compression heads chainlen
412 0 -1 -1 0 ??? 0 0 0 0 ??? ???? ? 1 0 (glob)
412 0 -1 -1 0 ??? 0 0 0 0 ??? ???? ? 1 0 (glob)
413 1 0 -1 ??? ??? 0 0 0 0 ??? ???? ? 1 1 (glob)
413 1 0 -1 ??? ??? 0 0 0 0 ??? ???? ? 1 1 (glob)
414 2 1 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 2 (glob)
414 2 1 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 2 (glob)
415 3 2 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 3 (glob)
415 3 2 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 3 (glob)
416 4 3 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 4 (glob)
416 4 3 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 4 (glob)
417 5 4 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 0 (glob)
417 5 4 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 0 (glob)
418 6 5 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 1 (glob)
418 6 5 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 1 (glob)
419 7 6 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 2 (glob)
419 7 6 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 2 (glob)
420 8 7 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 3 (glob)
420 8 7 -1 ??? ??? ??? ??? ??? 0 ??? ???? ? 1 3 (glob)
421 #endif
421 #endif
422
422
423 Test debuglocks command:
423 Test debuglocks command:
424
424
425 $ hg debuglocks
425 $ hg debuglocks
426 lock: free
426 lock: free
427 wlock: free
427 wlock: free
428
428
429 * Test setting the lock
429 * Test setting the lock
430
430
431 waitlock <file> will wait for file to be created. If it isn't in a reasonable
431 waitlock <file> will wait for file to be created. If it isn't in a reasonable
432 amount of time, displays error message and returns 1
432 amount of time, displays error message and returns 1
433 $ waitlock() {
433 $ waitlock() {
434 > start=`date +%s`
434 > start=`date +%s`
435 > timeout=5
435 > timeout=5
436 > while [ \( ! -f $1 \) -a \( ! -L $1 \) ]; do
436 > while [ \( ! -f $1 \) -a \( ! -L $1 \) ]; do
437 > now=`date +%s`
437 > now=`date +%s`
438 > if [ "`expr $now - $start`" -gt $timeout ]; then
438 > if [ "`expr $now - $start`" -gt $timeout ]; then
439 > echo "timeout: $1 was not created in $timeout seconds"
439 > echo "timeout: $1 was not created in $timeout seconds"
440 > return 1
440 > return 1
441 > fi
441 > fi
442 > sleep 0.1
442 > sleep 0.1
443 > done
443 > done
444 > }
444 > }
445 $ dolock() {
445 $ dolock() {
446 > {
446 > {
447 > waitlock .hg/unlock
447 > waitlock .hg/unlock
448 > rm -f .hg/unlock
448 > rm -f .hg/unlock
449 > echo y
449 > echo y
450 > } | hg debuglocks "$@" > /dev/null
450 > } | hg debuglocks "$@" > /dev/null
451 > }
451 > }
452 $ dolock -s &
452 $ dolock -s &
453 $ waitlock .hg/store/lock
453 $ waitlock .hg/store/lock
454
454
455 $ hg debuglocks
455 $ hg debuglocks
456 lock: user *, process * (*s) (glob)
456 lock: user *, process * (*s) (glob)
457 wlock: free
457 wlock: free
458 [1]
458 [1]
459 $ touch .hg/unlock
459 $ touch .hg/unlock
460 $ wait
460 $ wait
461 $ [ -f .hg/store/lock ] || echo "There is no lock"
461 $ [ -f .hg/store/lock ] || echo "There is no lock"
462 There is no lock
462 There is no lock
463
463
464 * Test setting the wlock
464 * Test setting the wlock
465
465
466 $ dolock -S &
466 $ dolock -S &
467 $ waitlock .hg/wlock
467 $ waitlock .hg/wlock
468
468
469 $ hg debuglocks
469 $ hg debuglocks
470 lock: free
470 lock: free
471 wlock: user *, process * (*s) (glob)
471 wlock: user *, process * (*s) (glob)
472 [1]
472 [1]
473 $ touch .hg/unlock
473 $ touch .hg/unlock
474 $ wait
474 $ wait
475 $ [ -f .hg/wlock ] || echo "There is no wlock"
475 $ [ -f .hg/wlock ] || echo "There is no wlock"
476 There is no wlock
476 There is no wlock
477
477
478 * Test setting both locks
478 * Test setting both locks
479
479
480 $ dolock -Ss &
480 $ dolock -Ss &
481 $ waitlock .hg/wlock && waitlock .hg/store/lock
481 $ waitlock .hg/wlock && waitlock .hg/store/lock
482
482
483 $ hg debuglocks
483 $ hg debuglocks
484 lock: user *, process * (*s) (glob)
484 lock: user *, process * (*s) (glob)
485 wlock: user *, process * (*s) (glob)
485 wlock: user *, process * (*s) (glob)
486 [2]
486 [2]
487
487
488 * Test failing to set a lock
488 * Test failing to set a lock
489
489
490 $ hg debuglocks -s
490 $ hg debuglocks -s
491 abort: lock is already held
491 abort: lock is already held
492 [255]
492 [255]
493
493
494 $ hg debuglocks -S
494 $ hg debuglocks -S
495 abort: wlock is already held
495 abort: wlock is already held
496 [255]
496 [255]
497
497
498 $ touch .hg/unlock
498 $ touch .hg/unlock
499 $ wait
499 $ wait
500
500
501 $ hg debuglocks
501 $ hg debuglocks
502 lock: free
502 lock: free
503 wlock: free
503 wlock: free
504
504
505 * Test forcing the lock
505 * Test forcing the lock
506
506
507 $ dolock -s &
507 $ dolock -s &
508 $ waitlock .hg/store/lock
508 $ waitlock .hg/store/lock
509
509
510 $ hg debuglocks
510 $ hg debuglocks
511 lock: user *, process * (*s) (glob)
511 lock: user *, process * (*s) (glob)
512 wlock: free
512 wlock: free
513 [1]
513 [1]
514
514
515 $ hg debuglocks -L
515 $ hg debuglocks -L
516
516
517 $ hg debuglocks
517 $ hg debuglocks
518 lock: free
518 lock: free
519 wlock: free
519 wlock: free
520
520
521 $ touch .hg/unlock
521 $ touch .hg/unlock
522 $ wait
522 $ wait
523
523
524 * Test forcing the wlock
524 * Test forcing the wlock
525
525
526 $ dolock -S &
526 $ dolock -S &
527 $ waitlock .hg/wlock
527 $ waitlock .hg/wlock
528
528
529 $ hg debuglocks
529 $ hg debuglocks
530 lock: free
530 lock: free
531 wlock: user *, process * (*s) (glob)
531 wlock: user *, process * (*s) (glob)
532 [1]
532 [1]
533
533
534 $ hg debuglocks -W
534 $ hg debuglocks -W
535
535
536 $ hg debuglocks
536 $ hg debuglocks
537 lock: free
537 lock: free
538 wlock: free
538 wlock: free
539
539
540 $ touch .hg/unlock
540 $ touch .hg/unlock
541 $ wait
541 $ wait
542
542
543 Test WdirUnsupported exception
543 Test WdirUnsupported exception
544
544
545 $ hg debugdata -c ffffffffffffffffffffffffffffffffffffffff
545 $ hg debugdata -c ffffffffffffffffffffffffffffffffffffffff
546 abort: working directory revision cannot be specified
546 abort: working directory revision cannot be specified
547 [255]
547 [255]
548
548
549 Test cache warming command
549 Test cache warming command
550
550
551 $ rm -rf .hg/cache/
551 $ rm -rf .hg/cache/
552 $ hg debugupdatecaches --debug
552 $ hg debugupdatecaches --debug
553 updating the branch cache
553 updating the branch cache
554 $ ls -r .hg/cache/*
554 $ ls -r .hg/cache/*
555 .hg/cache/tags2-served
555 .hg/cache/tags2-served
556 .hg/cache/tags2
556 .hg/cache/tags2
557 .hg/cache/rbc-revs-v1
557 .hg/cache/rbc-revs-v1
558 .hg/cache/rbc-names-v1
558 .hg/cache/rbc-names-v1
559 .hg/cache/hgtagsfnodes1
559 .hg/cache/hgtagsfnodes1
560 .hg/cache/branch2-visible-hidden
560 .hg/cache/branch2-visible-hidden
561 .hg/cache/branch2-visible
561 .hg/cache/branch2-visible
562 .hg/cache/branch2-served.hidden
562 .hg/cache/branch2-served.hidden
563 .hg/cache/branch2-served
563 .hg/cache/branch2-served
564 .hg/cache/branch2-immutable
564 .hg/cache/branch2-immutable
565 .hg/cache/branch2-base
565 .hg/cache/branch2-base
566
566
567 Test debugcolor
567 Test debugcolor
568
568
569 #if no-windows
569 #if no-windows
570 $ hg debugcolor --style --color always | egrep 'mode|style|log\.'
570 $ hg debugcolor --style --color always | egrep 'mode|style|log\.'
571 color mode: 'ansi'
571 color mode: 'ansi'
572 available style:
572 available style:
573 \x1b[0;33mlog.changeset\x1b[0m: \x1b[0;33myellow\x1b[0m (esc)
573 \x1b[0;33mlog.changeset\x1b[0m: \x1b[0;33myellow\x1b[0m (esc)
574 #endif
574 #endif
575
575
576 $ hg debugcolor --style --color never
576 $ hg debugcolor --style --color never
577 color mode: None
577 color mode: None
578 available style:
578 available style:
579
579
580 $ cd ..
580 $ cd ..
581
581
582 Test internal debugstacktrace command
582 Test internal debugstacktrace command
583
583
584 $ cat > debugstacktrace.py << EOF
584 $ cat > debugstacktrace.py << EOF
585 > from mercurial import (
585 > from mercurial import (
586 > util,
586 > util,
587 > )
587 > )
588 > from mercurial.utils import (
588 > from mercurial.utils import (
589 > procutil,
589 > procutil,
590 > )
590 > )
591 > def f():
591 > def f():
592 > util.debugstacktrace(f=procutil.stdout)
592 > util.debugstacktrace(f=procutil.stdout)
593 > g()
593 > g()
594 > def g():
594 > def g():
595 > util.dst(b'hello from g\\n', skip=1)
595 > util.dst(b'hello from g\\n', skip=1)
596 > h()
596 > h()
597 > def h():
597 > def h():
598 > util.dst(b'hi ...\\nfrom h hidden in g', 1, depth=2)
598 > util.dst(b'hi ...\\nfrom h hidden in g', 1, depth=2)
599 > f()
599 > f()
600 > EOF
600 > EOF
601 $ "$PYTHON" debugstacktrace.py
601 $ "$PYTHON" debugstacktrace.py
602 stacktrace at:
602 stacktrace at:
603 *debugstacktrace.py:15 in * (glob)
603 *debugstacktrace.py:15 in * (glob)
604 *debugstacktrace.py:8 in f (glob)
604 *debugstacktrace.py:8 in f (glob)
605 hello from g at:
605 hello from g at:
606 *debugstacktrace.py:15 in * (glob)
606 *debugstacktrace.py:15 in * (glob)
607 *debugstacktrace.py:9 in f (glob)
607 *debugstacktrace.py:9 in f (glob)
608 hi ...
608 hi ...
609 from h hidden in g at:
609 from h hidden in g at:
610 *debugstacktrace.py:9 in f (glob)
610 *debugstacktrace.py:9 in f (glob)
611 *debugstacktrace.py:12 in g (glob)
611 *debugstacktrace.py:12 in g (glob)
612
612
613 Test debugcapabilities command:
613 Test debugcapabilities command:
614
614
615 $ hg debugcapabilities ./debugrevlog/
615 $ hg debugcapabilities ./debugrevlog/
616 Main capabilities:
616 Main capabilities:
617 branchmap
617 branchmap
618 $USUAL_BUNDLE2_CAPS$
618 $USUAL_BUNDLE2_CAPS$
619 getbundle
619 getbundle
620 known
620 known
621 lookup
621 lookup
622 pushkey
622 pushkey
623 unbundle
623 unbundle
624 Bundle2 capabilities:
624 Bundle2 capabilities:
625 HG20
625 HG20
626 bookmarks
626 bookmarks
627 changegroup
627 changegroup
628 01
628 01
629 02
629 02
630 checkheads
630 checkheads
631 related
631 related
632 digests
632 digests
633 md5
633 md5
634 sha1
634 sha1
635 sha512
635 sha512
636 error
636 error
637 abort
637 abort
638 unsupportedcontent
638 unsupportedcontent
639 pushraced
639 pushraced
640 pushkey
640 pushkey
641 hgtagsfnodes
641 hgtagsfnodes
642 listkeys
642 listkeys
643 phases
643 phases
644 heads
644 heads
645 pushkey
645 pushkey
646 remote-changegroup
646 remote-changegroup
647 http
647 http
648 https
648 https
649 stream
649 stream
650 v2
650 v2
651
651
652 Test debugpeer
652 Test debugpeer
653
653
654 $ hg debugpeer ssh://user@dummy/debugrevlog
654 $ hg debugpeer ssh://user@dummy/debugrevlog
655 url: ssh://user@dummy/debugrevlog
655 url: ssh://user@dummy/debugrevlog
656 local: no
656 local: no
657 pushable: yes
657 pushable: yes
658
658
659 #if rust
659 #if rust
660
660
661 $ hg --debug debugpeer ssh://user@dummy/debugrevlog
661 $ hg --debug debugpeer ssh://user@dummy/debugrevlog
662 running .* ".*[/\\]dummyssh" ['"]user@dummy['"] ['"]hg -R debugrevlog serve --stdio['"] (re)
662 running .* ".*[/\\]dummyssh" ['"]user@dummy['"] ['"]hg -R debugrevlog serve --stdio['"] (re)
663 devel-peer-request: hello+between
663 devel-peer-request: hello+between
664 devel-peer-request: pairs: 81 bytes
664 devel-peer-request: pairs: 81 bytes
665 sending hello command
665 sending hello command
666 sending between command
666 sending between command
667 remote: 468
667 remote: 468
668 remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlog-compression-zstd,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
668 remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlog-compression-zstd,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
669 remote: 1
669 remote: 1
670 devel-peer-request: protocaps
670 devel-peer-request: protocaps
671 devel-peer-request: caps: * bytes (glob)
671 devel-peer-request: caps: * bytes (glob)
672 sending protocaps command
672 sending protocaps command
673 url: ssh://user@dummy/debugrevlog
673 url: ssh://user@dummy/debugrevlog
674 local: no
674 local: no
675 pushable: yes
675 pushable: yes
676
676
677 #endif
677 #endif
678
678
679 #if no-rust zstd
679 #if no-rust zstd
680
680
681 $ hg --debug debugpeer ssh://user@dummy/debugrevlog
681 $ hg --debug debugpeer ssh://user@dummy/debugrevlog
682 running .* ".*[/\\]dummyssh" ['"]user@dummy['"] ['"]hg -R debugrevlog serve --stdio['"] (re)
682 running .* ".*[/\\]dummyssh" ['"]user@dummy['"] ['"]hg -R debugrevlog serve --stdio['"] (re)
683 devel-peer-request: hello+between
683 devel-peer-request: hello+between
684 devel-peer-request: pairs: 81 bytes
684 devel-peer-request: pairs: 81 bytes
685 sending hello command
685 sending hello command
686 sending between command
686 sending between command
687 remote: 468
687 remote: 468
688 remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlog-compression-zstd,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
688 remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlog-compression-zstd,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
689 remote: 1
689 remote: 1
690 devel-peer-request: protocaps
690 devel-peer-request: protocaps
691 devel-peer-request: caps: * bytes (glob)
691 devel-peer-request: caps: * bytes (glob)
692 sending protocaps command
692 sending protocaps command
693 url: ssh://user@dummy/debugrevlog
693 url: ssh://user@dummy/debugrevlog
694 local: no
694 local: no
695 pushable: yes
695 pushable: yes
696
696
697 #endif
697 #endif
698
698
699 #if no-rust no-zstd
699 #if no-rust no-zstd
700
700
701 $ hg --debug debugpeer ssh://user@dummy/debugrevlog
701 $ hg --debug debugpeer ssh://user@dummy/debugrevlog
702 running .* ".*[/\\]dummyssh" ['"]user@dummy['"] ['"]hg -R debugrevlog serve --stdio['"] (re)
702 running .* ".*[/\\]dummyssh" ['"]user@dummy['"] ['"]hg -R debugrevlog serve --stdio['"] (re)
703 devel-peer-request: hello+between
703 devel-peer-request: hello+between
704 devel-peer-request: pairs: 81 bytes
704 devel-peer-request: pairs: 81 bytes
705 sending hello command
705 sending hello command
706 sending between command
706 sending between command
707 remote: 444
707 remote: 444
708 remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
708 remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
709 remote: 1
709 remote: 1
710 devel-peer-request: protocaps
710 devel-peer-request: protocaps
711 devel-peer-request: caps: * bytes (glob)
711 devel-peer-request: caps: * bytes (glob)
712 sending protocaps command
712 sending protocaps command
713 url: ssh://user@dummy/debugrevlog
713 url: ssh://user@dummy/debugrevlog
714 local: no
714 local: no
715 pushable: yes
715 pushable: yes
716
716
717 #endif
717 #endif
@@ -1,101 +1,101 b''
1 $ hg init
1 $ hg init
2
2
3 $ echo foo > a
3 $ echo foo > a
4 $ echo foo > b
4 $ echo foo > b
5 $ hg add a b
5 $ hg add a b
6
6
7 $ hg ci -m "test"
7 $ hg ci -m "test"
8
8
9 $ echo blah > a
9 $ echo blah > a
10
10
11 $ hg ci -m "branch a"
11 $ hg ci -m "branch a"
12
12
13 $ hg co 0
13 $ hg co 0
14 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
14 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
15
15
16 $ echo blah > b
16 $ echo blah > b
17
17
18 $ hg ci -m "branch b"
18 $ hg ci -m "branch b"
19 created new head
19 created new head
20 $ HGMERGE=true hg merge 1
20 $ HGMERGE=true hg merge 1
21 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
21 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
22 (branch merge, don't forget to commit)
22 (branch merge, don't forget to commit)
23
23
24 $ hg ci -m "merge b/a -> blah"
24 $ hg ci -m "merge b/a -> blah"
25
25
26 $ hg co 1
26 $ hg co 1
27 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
27 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
28 $ HGMERGE=true hg merge 2
28 $ HGMERGE=true hg merge 2
29 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
29 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
30 (branch merge, don't forget to commit)
30 (branch merge, don't forget to commit)
31 $ hg ci -m "merge a/b -> blah"
31 $ hg ci -m "merge a/b -> blah"
32 created new head
32 created new head
33
33
34 $ hg log
34 $ hg log
35 changeset: 4:2ee31f665a86
35 changeset: 4:2ee31f665a86
36 tag: tip
36 tag: tip
37 parent: 1:96155394af80
37 parent: 1:96155394af80
38 parent: 2:92cc4c306b19
38 parent: 2:92cc4c306b19
39 user: test
39 user: test
40 date: Thu Jan 01 00:00:00 1970 +0000
40 date: Thu Jan 01 00:00:00 1970 +0000
41 summary: merge a/b -> blah
41 summary: merge a/b -> blah
42
42
43 changeset: 3:e16a66a37edd
43 changeset: 3:e16a66a37edd
44 parent: 2:92cc4c306b19
44 parent: 2:92cc4c306b19
45 parent: 1:96155394af80
45 parent: 1:96155394af80
46 user: test
46 user: test
47 date: Thu Jan 01 00:00:00 1970 +0000
47 date: Thu Jan 01 00:00:00 1970 +0000
48 summary: merge b/a -> blah
48 summary: merge b/a -> blah
49
49
50 changeset: 2:92cc4c306b19
50 changeset: 2:92cc4c306b19
51 parent: 0:5e0375449e74
51 parent: 0:5e0375449e74
52 user: test
52 user: test
53 date: Thu Jan 01 00:00:00 1970 +0000
53 date: Thu Jan 01 00:00:00 1970 +0000
54 summary: branch b
54 summary: branch b
55
55
56 changeset: 1:96155394af80
56 changeset: 1:96155394af80
57 user: test
57 user: test
58 date: Thu Jan 01 00:00:00 1970 +0000
58 date: Thu Jan 01 00:00:00 1970 +0000
59 summary: branch a
59 summary: branch a
60
60
61 changeset: 0:5e0375449e74
61 changeset: 0:5e0375449e74
62 user: test
62 user: test
63 date: Thu Jan 01 00:00:00 1970 +0000
63 date: Thu Jan 01 00:00:00 1970 +0000
64 summary: test
64 summary: test
65
65
66 $ hg debugindex --changelog
66 $ hg debugindex --changelog
67 rev linkrev nodeid p1 p2
67 rev linkrev nodeid p1-nodeid p2-nodeid
68 0 0 5e0375449e74 000000000000 000000000000
68 0 0 5e0375449e74 000000000000 000000000000
69 1 1 96155394af80 5e0375449e74 000000000000
69 1 1 96155394af80 5e0375449e74 000000000000
70 2 2 92cc4c306b19 5e0375449e74 000000000000
70 2 2 92cc4c306b19 5e0375449e74 000000000000
71 3 3 e16a66a37edd 92cc4c306b19 96155394af80
71 3 3 e16a66a37edd 92cc4c306b19 96155394af80
72 4 4 2ee31f665a86 96155394af80 92cc4c306b19
72 4 4 2ee31f665a86 96155394af80 92cc4c306b19
73
73
74 revision 1
74 revision 1
75 $ hg manifest --debug 1
75 $ hg manifest --debug 1
76 79d7492df40aa0fa093ec4209be78043c181f094 644 a
76 79d7492df40aa0fa093ec4209be78043c181f094 644 a
77 2ed2a3912a0b24502043eae84ee4b279c18b90dd 644 b
77 2ed2a3912a0b24502043eae84ee4b279c18b90dd 644 b
78 revision 2
78 revision 2
79 $ hg manifest --debug 2
79 $ hg manifest --debug 2
80 2ed2a3912a0b24502043eae84ee4b279c18b90dd 644 a
80 2ed2a3912a0b24502043eae84ee4b279c18b90dd 644 a
81 79d7492df40aa0fa093ec4209be78043c181f094 644 b
81 79d7492df40aa0fa093ec4209be78043c181f094 644 b
82 revision 3
82 revision 3
83 $ hg manifest --debug 3
83 $ hg manifest --debug 3
84 79d7492df40aa0fa093ec4209be78043c181f094 644 a
84 79d7492df40aa0fa093ec4209be78043c181f094 644 a
85 79d7492df40aa0fa093ec4209be78043c181f094 644 b
85 79d7492df40aa0fa093ec4209be78043c181f094 644 b
86 revision 4
86 revision 4
87 $ hg manifest --debug 4
87 $ hg manifest --debug 4
88 79d7492df40aa0fa093ec4209be78043c181f094 644 a
88 79d7492df40aa0fa093ec4209be78043c181f094 644 a
89 79d7492df40aa0fa093ec4209be78043c181f094 644 b
89 79d7492df40aa0fa093ec4209be78043c181f094 644 b
90
90
91 $ hg debugindex a
91 $ hg debugindex a
92 rev linkrev nodeid p1 p2
92 rev linkrev nodeid p1-nodeid p2-nodeid
93 0 0 2ed2a3912a0b 000000000000 000000000000
93 0 0 2ed2a3912a0b 000000000000 000000000000
94 1 1 79d7492df40a 2ed2a3912a0b 000000000000
94 1 1 79d7492df40a 2ed2a3912a0b 000000000000
95
95
96 $ hg verify
96 $ hg verify
97 checking changesets
97 checking changesets
98 checking manifests
98 checking manifests
99 crosschecking files in changesets and manifests
99 crosschecking files in changesets and manifests
100 checking files
100 checking files
101 checked 5 changesets with 4 changes to 2 files
101 checked 5 changesets with 4 changes to 2 files
@@ -1,21 +1,21 b''
1 Issue351: mq: qrefresh can create extra revlog entry
1 Issue351: mq: qrefresh can create extra revlog entry
2
2
3 $ echo "[extensions]" >> $HGRCPATH
3 $ echo "[extensions]" >> $HGRCPATH
4 $ echo "mq=" >> $HGRCPATH
4 $ echo "mq=" >> $HGRCPATH
5
5
6 $ hg init
6 $ hg init
7 $ hg qinit
7 $ hg qinit
8
8
9 $ echo b > b
9 $ echo b > b
10 $ hg ci -A -m foo
10 $ hg ci -A -m foo
11 adding b
11 adding b
12
12
13 $ echo cc > b
13 $ echo cc > b
14 $ hg qnew -f foo.diff
14 $ hg qnew -f foo.diff
15 $ echo b > b
15 $ echo b > b
16 $ hg qrefresh
16 $ hg qrefresh
17
17
18 $ hg debugindex b
18 $ hg debugindex b
19 rev linkrev nodeid p1 p2
19 rev linkrev nodeid p1-nodeid p2-nodeid
20 0 0 1e88685f5dde 000000000000 000000000000
20 0 0 1e88685f5dde 000000000000 000000000000
21
21
@@ -1,145 +1,145 b''
1 This test makes sure that we don't mark a file as merged with its ancestor
1 This test makes sure that we don't mark a file as merged with its ancestor
2 when we do a merge.
2 when we do a merge.
3
3
4 $ cat <<EOF > merge
4 $ cat <<EOF > merge
5 > import sys, os
5 > import sys, os
6 > print("merging for", os.path.basename(sys.argv[1]))
6 > print("merging for", os.path.basename(sys.argv[1]))
7 > EOF
7 > EOF
8 $ HGMERGE="\"$PYTHON\" ../merge"; export HGMERGE
8 $ HGMERGE="\"$PYTHON\" ../merge"; export HGMERGE
9
9
10 Creating base:
10 Creating base:
11
11
12 $ hg init a
12 $ hg init a
13 $ cd a
13 $ cd a
14 $ echo 1 > foo
14 $ echo 1 > foo
15 $ echo 1 > bar
15 $ echo 1 > bar
16 $ echo 1 > baz
16 $ echo 1 > baz
17 $ echo 1 > quux
17 $ echo 1 > quux
18 $ hg add foo bar baz quux
18 $ hg add foo bar baz quux
19 $ hg commit -m "base"
19 $ hg commit -m "base"
20
20
21 $ cd ..
21 $ cd ..
22 $ hg clone a b
22 $ hg clone a b
23 updating to branch default
23 updating to branch default
24 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
24 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
25
25
26 Creating branch a:
26 Creating branch a:
27
27
28 $ cd a
28 $ cd a
29 $ echo 2a > foo
29 $ echo 2a > foo
30 $ echo 2a > bar
30 $ echo 2a > bar
31 $ hg commit -m "branch a"
31 $ hg commit -m "branch a"
32
32
33 Creating branch b:
33 Creating branch b:
34
34
35 $ cd ..
35 $ cd ..
36 $ cd b
36 $ cd b
37 $ echo 2b > foo
37 $ echo 2b > foo
38 $ echo 2b > baz
38 $ echo 2b > baz
39 $ hg commit -m "branch b"
39 $ hg commit -m "branch b"
40
40
41 We shouldn't have anything but n state here:
41 We shouldn't have anything but n state here:
42
42
43 $ hg debugstate --no-dates | grep -v "^n"
43 $ hg debugstate --no-dates | grep -v "^n"
44 [1]
44 [1]
45
45
46 Merging:
46 Merging:
47
47
48 $ hg pull ../a
48 $ hg pull ../a
49 pulling from ../a
49 pulling from ../a
50 searching for changes
50 searching for changes
51 adding changesets
51 adding changesets
52 adding manifests
52 adding manifests
53 adding file changes
53 adding file changes
54 added 1 changesets with 2 changes to 2 files (+1 heads)
54 added 1 changesets with 2 changes to 2 files (+1 heads)
55 new changesets bdd988058d16
55 new changesets bdd988058d16
56 (run 'hg heads' to see heads, 'hg merge' to merge)
56 (run 'hg heads' to see heads, 'hg merge' to merge)
57
57
58 $ hg merge -v
58 $ hg merge -v
59 resolving manifests
59 resolving manifests
60 getting bar
60 getting bar
61 merging foo
61 merging foo
62 merging for foo
62 merging for foo
63 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
63 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
64 (branch merge, don't forget to commit)
64 (branch merge, don't forget to commit)
65
65
66 $ echo 2m > foo
66 $ echo 2m > foo
67 $ echo 2b > baz
67 $ echo 2b > baz
68 $ echo new > quux
68 $ echo new > quux
69
69
70 $ hg ci -m "merge"
70 $ hg ci -m "merge"
71
71
72 main: we should have a merge here:
72 main: we should have a merge here:
73
73
74 $ hg debugindex --changelog
74 $ hg debugindex --changelog
75 rev linkrev nodeid p1 p2
75 rev linkrev nodeid p1-nodeid p2-nodeid
76 0 0 cdca01651b96 000000000000 000000000000
76 0 0 cdca01651b96 000000000000 000000000000
77 1 1 f6718a9cb7f3 cdca01651b96 000000000000
77 1 1 f6718a9cb7f3 cdca01651b96 000000000000
78 2 2 bdd988058d16 cdca01651b96 000000000000
78 2 2 bdd988058d16 cdca01651b96 000000000000
79 3 3 d8a521142a3c f6718a9cb7f3 bdd988058d16
79 3 3 d8a521142a3c f6718a9cb7f3 bdd988058d16
80
80
81 log should show foo and quux changed:
81 log should show foo and quux changed:
82
82
83 $ hg log -v -r tip
83 $ hg log -v -r tip
84 changeset: 3:d8a521142a3c
84 changeset: 3:d8a521142a3c
85 tag: tip
85 tag: tip
86 parent: 1:f6718a9cb7f3
86 parent: 1:f6718a9cb7f3
87 parent: 2:bdd988058d16
87 parent: 2:bdd988058d16
88 user: test
88 user: test
89 date: Thu Jan 01 00:00:00 1970 +0000
89 date: Thu Jan 01 00:00:00 1970 +0000
90 files: foo quux
90 files: foo quux
91 description:
91 description:
92 merge
92 merge
93
93
94
94
95
95
96 foo: we should have a merge here:
96 foo: we should have a merge here:
97
97
98 $ hg debugindex foo
98 $ hg debugindex foo
99 rev linkrev nodeid p1 p2
99 rev linkrev nodeid p1-nodeid p2-nodeid
100 0 0 b8e02f643373 000000000000 000000000000
100 0 0 b8e02f643373 000000000000 000000000000
101 1 1 2ffeddde1b65 b8e02f643373 000000000000
101 1 1 2ffeddde1b65 b8e02f643373 000000000000
102 2 2 33d1fb69067a b8e02f643373 000000000000
102 2 2 33d1fb69067a b8e02f643373 000000000000
103 3 3 aa27919ee430 2ffeddde1b65 33d1fb69067a
103 3 3 aa27919ee430 2ffeddde1b65 33d1fb69067a
104
104
105 bar: we should not have a merge here:
105 bar: we should not have a merge here:
106
106
107 $ hg debugindex bar
107 $ hg debugindex bar
108 rev linkrev nodeid p1 p2
108 rev linkrev nodeid p1-nodeid p2-nodeid
109 0 0 b8e02f643373 000000000000 000000000000
109 0 0 b8e02f643373 000000000000 000000000000
110 1 2 33d1fb69067a b8e02f643373 000000000000
110 1 2 33d1fb69067a b8e02f643373 000000000000
111
111
112 baz: we should not have a merge here:
112 baz: we should not have a merge here:
113
113
114 $ hg debugindex baz
114 $ hg debugindex baz
115 rev linkrev nodeid p1 p2
115 rev linkrev nodeid p1-nodeid p2-nodeid
116 0 0 b8e02f643373 000000000000 000000000000
116 0 0 b8e02f643373 000000000000 000000000000
117 1 1 2ffeddde1b65 b8e02f643373 000000000000
117 1 1 2ffeddde1b65 b8e02f643373 000000000000
118
118
119 quux: we should not have a merge here:
119 quux: we should not have a merge here:
120
120
121 $ hg debugindex quux
121 $ hg debugindex quux
122 rev linkrev nodeid p1 p2
122 rev linkrev nodeid p1-nodeid p2-nodeid
123 0 0 b8e02f643373 000000000000 000000000000
123 0 0 b8e02f643373 000000000000 000000000000
124 1 3 6128c0f33108 b8e02f643373 000000000000
124 1 3 6128c0f33108 b8e02f643373 000000000000
125
125
126 Manifest entries should match tips of all files:
126 Manifest entries should match tips of all files:
127
127
128 $ hg manifest --debug
128 $ hg manifest --debug
129 33d1fb69067a0139622a3fa3b7ba1cdb1367972e 644 bar
129 33d1fb69067a0139622a3fa3b7ba1cdb1367972e 644 bar
130 2ffeddde1b65b4827f6746174a145474129fa2ce 644 baz
130 2ffeddde1b65b4827f6746174a145474129fa2ce 644 baz
131 aa27919ee4303cfd575e1fb932dd64d75aa08be4 644 foo
131 aa27919ee4303cfd575e1fb932dd64d75aa08be4 644 foo
132 6128c0f33108e8cfbb4e0824d13ae48b466d7280 644 quux
132 6128c0f33108e8cfbb4e0824d13ae48b466d7280 644 quux
133
133
134 Everything should be clean now:
134 Everything should be clean now:
135
135
136 $ hg status
136 $ hg status
137
137
138 $ hg verify
138 $ hg verify
139 checking changesets
139 checking changesets
140 checking manifests
140 checking manifests
141 crosschecking files in changesets and manifests
141 crosschecking files in changesets and manifests
142 checking files
142 checking files
143 checked 4 changesets with 10 changes to 4 files
143 checked 4 changesets with 10 changes to 4 files
144
144
145 $ cd ..
145 $ cd ..
@@ -1,158 +1,158 b''
1 #require execbit
1 #require execbit
2
2
3 $ umask 027
3 $ umask 027
4
4
5 $ hg init test1
5 $ hg init test1
6 $ cd test1
6 $ cd test1
7 $ touch a b
7 $ touch a b
8 $ hg add a b
8 $ hg add a b
9 $ hg ci -m "added a b"
9 $ hg ci -m "added a b"
10
10
11 $ cd ..
11 $ cd ..
12 $ hg clone test1 test3
12 $ hg clone test1 test3
13 updating to branch default
13 updating to branch default
14 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
14 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
15
15
16 $ hg init test2
16 $ hg init test2
17 $ cd test2
17 $ cd test2
18 $ hg pull ../test1
18 $ hg pull ../test1
19 pulling from ../test1
19 pulling from ../test1
20 requesting all changes
20 requesting all changes
21 adding changesets
21 adding changesets
22 adding manifests
22 adding manifests
23 adding file changes
23 adding file changes
24 added 1 changesets with 2 changes to 2 files
24 added 1 changesets with 2 changes to 2 files
25 new changesets 22a449e20da5
25 new changesets 22a449e20da5
26 (run 'hg update' to get a working copy)
26 (run 'hg update' to get a working copy)
27 $ hg co
27 $ hg co
28 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
28 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
29 $ chmod +x a
29 $ chmod +x a
30 $ hg ci -m "chmod +x a"
30 $ hg ci -m "chmod +x a"
31
31
32 the changelog should mention file a:
32 the changelog should mention file a:
33
33
34 $ hg tip --template '{files}\n'
34 $ hg tip --template '{files}\n'
35 a
35 a
36
36
37 $ cd ../test1
37 $ cd ../test1
38 $ echo 123 >>a
38 $ echo 123 >>a
39 $ hg ci -m "a updated"
39 $ hg ci -m "a updated"
40
40
41 $ hg pull ../test2
41 $ hg pull ../test2
42 pulling from ../test2
42 pulling from ../test2
43 searching for changes
43 searching for changes
44 adding changesets
44 adding changesets
45 adding manifests
45 adding manifests
46 adding file changes
46 adding file changes
47 added 1 changesets with 0 changes to 0 files (+1 heads)
47 added 1 changesets with 0 changes to 0 files (+1 heads)
48 new changesets 7f4313b42a34
48 new changesets 7f4313b42a34
49 1 local changesets published
49 1 local changesets published
50 (run 'hg heads' to see heads, 'hg merge' to merge)
50 (run 'hg heads' to see heads, 'hg merge' to merge)
51 $ hg heads
51 $ hg heads
52 changeset: 2:7f4313b42a34
52 changeset: 2:7f4313b42a34
53 tag: tip
53 tag: tip
54 parent: 0:22a449e20da5
54 parent: 0:22a449e20da5
55 user: test
55 user: test
56 date: Thu Jan 01 00:00:00 1970 +0000
56 date: Thu Jan 01 00:00:00 1970 +0000
57 summary: chmod +x a
57 summary: chmod +x a
58
58
59 changeset: 1:c6ecefc45368
59 changeset: 1:c6ecefc45368
60 user: test
60 user: test
61 date: Thu Jan 01 00:00:00 1970 +0000
61 date: Thu Jan 01 00:00:00 1970 +0000
62 summary: a updated
62 summary: a updated
63
63
64 $ hg history
64 $ hg history
65 changeset: 2:7f4313b42a34
65 changeset: 2:7f4313b42a34
66 tag: tip
66 tag: tip
67 parent: 0:22a449e20da5
67 parent: 0:22a449e20da5
68 user: test
68 user: test
69 date: Thu Jan 01 00:00:00 1970 +0000
69 date: Thu Jan 01 00:00:00 1970 +0000
70 summary: chmod +x a
70 summary: chmod +x a
71
71
72 changeset: 1:c6ecefc45368
72 changeset: 1:c6ecefc45368
73 user: test
73 user: test
74 date: Thu Jan 01 00:00:00 1970 +0000
74 date: Thu Jan 01 00:00:00 1970 +0000
75 summary: a updated
75 summary: a updated
76
76
77 changeset: 0:22a449e20da5
77 changeset: 0:22a449e20da5
78 user: test
78 user: test
79 date: Thu Jan 01 00:00:00 1970 +0000
79 date: Thu Jan 01 00:00:00 1970 +0000
80 summary: added a b
80 summary: added a b
81
81
82
82
83 $ hg -v merge
83 $ hg -v merge
84 resolving manifests
84 resolving manifests
85 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
85 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
86 (branch merge, don't forget to commit)
86 (branch merge, don't forget to commit)
87 $ cat a
87 $ cat a
88 123
88 123
89 $ [ -x a ]
89 $ [ -x a ]
90
90
91 $ cd ../test3
91 $ cd ../test3
92 $ echo 123 >>b
92 $ echo 123 >>b
93 $ hg ci -m "b updated"
93 $ hg ci -m "b updated"
94
94
95 $ hg pull ../test2
95 $ hg pull ../test2
96 pulling from ../test2
96 pulling from ../test2
97 searching for changes
97 searching for changes
98 adding changesets
98 adding changesets
99 adding manifests
99 adding manifests
100 adding file changes
100 adding file changes
101 added 1 changesets with 0 changes to 0 files (+1 heads)
101 added 1 changesets with 0 changes to 0 files (+1 heads)
102 new changesets 7f4313b42a34
102 new changesets 7f4313b42a34
103 (run 'hg heads' to see heads, 'hg merge' to merge)
103 (run 'hg heads' to see heads, 'hg merge' to merge)
104 $ hg heads
104 $ hg heads
105 changeset: 2:7f4313b42a34
105 changeset: 2:7f4313b42a34
106 tag: tip
106 tag: tip
107 parent: 0:22a449e20da5
107 parent: 0:22a449e20da5
108 user: test
108 user: test
109 date: Thu Jan 01 00:00:00 1970 +0000
109 date: Thu Jan 01 00:00:00 1970 +0000
110 summary: chmod +x a
110 summary: chmod +x a
111
111
112 changeset: 1:dc57ead75f79
112 changeset: 1:dc57ead75f79
113 user: test
113 user: test
114 date: Thu Jan 01 00:00:00 1970 +0000
114 date: Thu Jan 01 00:00:00 1970 +0000
115 summary: b updated
115 summary: b updated
116
116
117 $ hg history
117 $ hg history
118 changeset: 2:7f4313b42a34
118 changeset: 2:7f4313b42a34
119 tag: tip
119 tag: tip
120 parent: 0:22a449e20da5
120 parent: 0:22a449e20da5
121 user: test
121 user: test
122 date: Thu Jan 01 00:00:00 1970 +0000
122 date: Thu Jan 01 00:00:00 1970 +0000
123 summary: chmod +x a
123 summary: chmod +x a
124
124
125 changeset: 1:dc57ead75f79
125 changeset: 1:dc57ead75f79
126 user: test
126 user: test
127 date: Thu Jan 01 00:00:00 1970 +0000
127 date: Thu Jan 01 00:00:00 1970 +0000
128 summary: b updated
128 summary: b updated
129
129
130 changeset: 0:22a449e20da5
130 changeset: 0:22a449e20da5
131 user: test
131 user: test
132 date: Thu Jan 01 00:00:00 1970 +0000
132 date: Thu Jan 01 00:00:00 1970 +0000
133 summary: added a b
133 summary: added a b
134
134
135
135
136 $ hg -v merge
136 $ hg -v merge
137 resolving manifests
137 resolving manifests
138 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
138 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
139 (branch merge, don't forget to commit)
139 (branch merge, don't forget to commit)
140
140
141 $ ls -l ../test[123]/a > foo
141 $ ls -l ../test[123]/a > foo
142 $ cut -b 1-10 < foo
142 $ cut -b 1-10 < foo
143 -rwxr-x---
143 -rwxr-x---
144 -rwxr-x---
144 -rwxr-x---
145 -rwxr-x---
145 -rwxr-x---
146
146
147 $ hg debugindex a
147 $ hg debugindex a
148 rev linkrev nodeid p1 p2
148 rev linkrev nodeid p1-nodeid p2-nodeid
149 0 0 b80de5d13875 000000000000 000000000000
149 0 0 b80de5d13875 000000000000 000000000000
150 $ hg debugindex -R ../test2 a
150 $ hg debugindex -R ../test2 a
151 rev linkrev nodeid p1 p2
151 rev linkrev nodeid p1-nodeid p2-nodeid
152 0 0 b80de5d13875 000000000000 000000000000
152 0 0 b80de5d13875 000000000000 000000000000
153 $ hg debugindex -R ../test1 a
153 $ hg debugindex -R ../test1 a
154 rev linkrev nodeid p1 p2
154 rev linkrev nodeid p1-nodeid p2-nodeid
155 0 0 b80de5d13875 000000000000 000000000000
155 0 0 b80de5d13875 000000000000 000000000000
156 1 1 7fe919cc0336 b80de5d13875 000000000000
156 1 1 7fe919cc0336 b80de5d13875 000000000000
157
157
158 $ cd ..
158 $ cd ..
@@ -1,52 +1,52 b''
1 https://bz.mercurial-scm.org/522
1 https://bz.mercurial-scm.org/522
2
2
3 In the merge below, the file "foo" has the same contents in both
3 In the merge below, the file "foo" has the same contents in both
4 parents, but if we look at the file-level history, we'll notice that
4 parents, but if we look at the file-level history, we'll notice that
5 the version in p1 is an ancestor of the version in p2. This test makes
5 the version in p1 is an ancestor of the version in p2. This test makes
6 sure that we'll use the version from p2 in the manifest of the merge
6 sure that we'll use the version from p2 in the manifest of the merge
7 revision.
7 revision.
8
8
9 $ hg init
9 $ hg init
10
10
11 $ echo foo > foo
11 $ echo foo > foo
12 $ hg ci -qAm 'add foo'
12 $ hg ci -qAm 'add foo'
13
13
14 $ echo bar >> foo
14 $ echo bar >> foo
15 $ hg ci -m 'change foo'
15 $ hg ci -m 'change foo'
16
16
17 $ hg backout -r tip -m 'backout changed foo'
17 $ hg backout -r tip -m 'backout changed foo'
18 reverting foo
18 reverting foo
19 changeset 2:4d9e78aaceee backs out changeset 1:b515023e500e
19 changeset 2:4d9e78aaceee backs out changeset 1:b515023e500e
20
20
21 $ hg up -C 0
21 $ hg up -C 0
22 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
22 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
23
23
24 $ touch bar
24 $ touch bar
25 $ hg ci -qAm 'add bar'
25 $ hg ci -qAm 'add bar'
26
26
27 $ hg merge --debug
27 $ hg merge --debug
28 resolving manifests
28 resolving manifests
29 branchmerge: True, force: False, partial: False
29 branchmerge: True, force: False, partial: False
30 ancestor: bbd179dfa0a7, local: 71766447bdbb+, remote: 4d9e78aaceee
30 ancestor: bbd179dfa0a7, local: 71766447bdbb+, remote: 4d9e78aaceee
31 foo: remote is newer -> g
31 foo: remote is newer -> g
32 getting foo
32 getting foo
33 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
33 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
34 (branch merge, don't forget to commit)
34 (branch merge, don't forget to commit)
35
35
36 $ hg debugstate | grep foo
36 $ hg debugstate | grep foo
37 m 0 -2 unset foo
37 m 0 -2 unset foo
38
38
39 $ hg st -A foo
39 $ hg st -A foo
40 M foo
40 M foo
41
41
42 $ hg ci -m 'merge'
42 $ hg ci -m 'merge'
43
43
44 $ hg manifest --debug | grep foo
44 $ hg manifest --debug | grep foo
45 c6fc755d7e68f49f880599da29f15add41f42f5a 644 foo
45 c6fc755d7e68f49f880599da29f15add41f42f5a 644 foo
46
46
47 $ hg debugindex foo
47 $ hg debugindex foo
48 rev linkrev nodeid p1 p2
48 rev linkrev nodeid p1-nodeid p2-nodeid
49 0 0 2ed2a3912a0b 000000000000 000000000000
49 0 0 2ed2a3912a0b 000000000000 000000000000
50 1 1 6f4310b00b9a 2ed2a3912a0b 000000000000
50 1 1 6f4310b00b9a 2ed2a3912a0b 000000000000
51 2 2 c6fc755d7e68 6f4310b00b9a 000000000000
51 2 2 c6fc755d7e68 6f4310b00b9a 000000000000
52
52
@@ -1,183 +1,183 b''
1 Check that renames are correctly saved by a commit after a merge
1 Check that renames are correctly saved by a commit after a merge
2
2
3 Test with the merge on 3 having the rename on the local parent
3 Test with the merge on 3 having the rename on the local parent
4
4
5 $ hg init a
5 $ hg init a
6 $ cd a
6 $ cd a
7
7
8 $ echo line1 > foo
8 $ echo line1 > foo
9 $ hg add foo
9 $ hg add foo
10 $ hg ci -m '0: add foo'
10 $ hg ci -m '0: add foo'
11
11
12 $ echo line2 >> foo
12 $ echo line2 >> foo
13 $ hg ci -m '1: change foo'
13 $ hg ci -m '1: change foo'
14
14
15 $ hg up -C 0
15 $ hg up -C 0
16 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
16 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
17
17
18 $ hg mv foo bar
18 $ hg mv foo bar
19 $ rm bar
19 $ rm bar
20 $ echo line0 > bar
20 $ echo line0 > bar
21 $ echo line1 >> bar
21 $ echo line1 >> bar
22 $ hg ci -m '2: mv foo bar; change bar'
22 $ hg ci -m '2: mv foo bar; change bar'
23 created new head
23 created new head
24
24
25 $ hg merge 1
25 $ hg merge 1
26 merging bar and foo to bar
26 merging bar and foo to bar
27 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
27 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
28 (branch merge, don't forget to commit)
28 (branch merge, don't forget to commit)
29
29
30 $ cat bar
30 $ cat bar
31 line0
31 line0
32 line1
32 line1
33 line2
33 line2
34
34
35 $ hg ci -m '3: merge with local rename'
35 $ hg ci -m '3: merge with local rename'
36
36
37 $ hg debugindex bar
37 $ hg debugindex bar
38 rev linkrev nodeid p1 p2
38 rev linkrev nodeid p1-nodeid p2-nodeid
39 0 2 d35118874825 000000000000 000000000000
39 0 2 d35118874825 000000000000 000000000000
40 1 3 5345f5ab8abd 000000000000 d35118874825
40 1 3 5345f5ab8abd 000000000000 d35118874825
41
41
42 $ hg debugrename bar
42 $ hg debugrename bar
43 bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
43 bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
44
44
45 $ hg debugindex foo
45 $ hg debugindex foo
46 rev linkrev nodeid p1 p2
46 rev linkrev nodeid p1-nodeid p2-nodeid
47 0 0 690b295714ae 000000000000 000000000000
47 0 0 690b295714ae 000000000000 000000000000
48 1 1 9e25c27b8757 690b295714ae 000000000000
48 1 1 9e25c27b8757 690b295714ae 000000000000
49
49
50
50
51 Revert the content change from rev 2:
51 Revert the content change from rev 2:
52
52
53 $ hg up -C 2
53 $ hg up -C 2
54 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
54 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
55 $ rm bar
55 $ rm bar
56 $ echo line1 > bar
56 $ echo line1 > bar
57 $ hg ci -m '4: revert content change from rev 2'
57 $ hg ci -m '4: revert content change from rev 2'
58 created new head
58 created new head
59
59
60 $ hg log --template '{rev}:{node|short} {parents}\n'
60 $ hg log --template '{rev}:{node|short} {parents}\n'
61 4:2263c1be0967 2:0f2ff26688b9
61 4:2263c1be0967 2:0f2ff26688b9
62 3:0555950ead28 2:0f2ff26688b9 1:5cd961e4045d
62 3:0555950ead28 2:0f2ff26688b9 1:5cd961e4045d
63 2:0f2ff26688b9 0:2665aaee66e9
63 2:0f2ff26688b9 0:2665aaee66e9
64 1:5cd961e4045d
64 1:5cd961e4045d
65 0:2665aaee66e9
65 0:2665aaee66e9
66
66
67 This should use bar@rev2 as the ancestor:
67 This should use bar@rev2 as the ancestor:
68
68
69 $ hg --debug merge 3
69 $ hg --debug merge 3
70 resolving manifests
70 resolving manifests
71 branchmerge: True, force: False, partial: False
71 branchmerge: True, force: False, partial: False
72 ancestor: 0f2ff26688b9, local: 2263c1be0967+, remote: 0555950ead28
72 ancestor: 0f2ff26688b9, local: 2263c1be0967+, remote: 0555950ead28
73 starting 4 threads for background file closing (?)
73 starting 4 threads for background file closing (?)
74 preserving bar for resolve of bar
74 preserving bar for resolve of bar
75 bar: versions differ -> m
75 bar: versions differ -> m
76 picked tool ':merge' for bar (binary False symlink False changedelete False)
76 picked tool ':merge' for bar (binary False symlink False changedelete False)
77 merging bar
77 merging bar
78 my bar@2263c1be0967+ other bar@0555950ead28 ancestor bar@0f2ff26688b9
78 my bar@2263c1be0967+ other bar@0555950ead28 ancestor bar@0f2ff26688b9
79 premerge successful
79 premerge successful
80 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
80 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
81 (branch merge, don't forget to commit)
81 (branch merge, don't forget to commit)
82
82
83 $ cat bar
83 $ cat bar
84 line1
84 line1
85 line2
85 line2
86
86
87 $ hg ci -m '5: merge'
87 $ hg ci -m '5: merge'
88
88
89 $ hg debugindex bar
89 $ hg debugindex bar
90 rev linkrev nodeid p1 p2
90 rev linkrev nodeid p1-nodeid p2-nodeid
91 0 2 d35118874825 000000000000 000000000000
91 0 2 d35118874825 000000000000 000000000000
92 1 3 5345f5ab8abd 000000000000 d35118874825
92 1 3 5345f5ab8abd 000000000000 d35118874825
93 2 4 ff4b45017382 d35118874825 000000000000
93 2 4 ff4b45017382 d35118874825 000000000000
94 3 5 3701b4893544 ff4b45017382 5345f5ab8abd
94 3 5 3701b4893544 ff4b45017382 5345f5ab8abd
95
95
96
96
97 Same thing, but with the merge on 3 having the rename
97 Same thing, but with the merge on 3 having the rename
98 on the remote parent:
98 on the remote parent:
99
99
100 $ cd ..
100 $ cd ..
101 $ hg clone -U -r 1 -r 2 a b
101 $ hg clone -U -r 1 -r 2 a b
102 adding changesets
102 adding changesets
103 adding manifests
103 adding manifests
104 adding file changes
104 adding file changes
105 added 3 changesets with 3 changes to 2 files (+1 heads)
105 added 3 changesets with 3 changes to 2 files (+1 heads)
106 new changesets 2665aaee66e9:0f2ff26688b9
106 new changesets 2665aaee66e9:0f2ff26688b9
107 $ cd b
107 $ cd b
108
108
109 $ hg up -C 1
109 $ hg up -C 1
110 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
110 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
111
111
112 $ hg merge 2
112 $ hg merge 2
113 merging foo and bar to bar
113 merging foo and bar to bar
114 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
114 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
115 (branch merge, don't forget to commit)
115 (branch merge, don't forget to commit)
116
116
117 $ cat bar
117 $ cat bar
118 line0
118 line0
119 line1
119 line1
120 line2
120 line2
121
121
122 $ hg ci -m '3: merge with remote rename'
122 $ hg ci -m '3: merge with remote rename'
123
123
124 $ hg debugindex bar
124 $ hg debugindex bar
125 rev linkrev nodeid p1 p2
125 rev linkrev nodeid p1-nodeid p2-nodeid
126 0 2 d35118874825 000000000000 000000000000
126 0 2 d35118874825 000000000000 000000000000
127 1 3 5345f5ab8abd 000000000000 d35118874825
127 1 3 5345f5ab8abd 000000000000 d35118874825
128
128
129 $ hg debugrename bar
129 $ hg debugrename bar
130 bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
130 bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
131
131
132 $ hg debugindex foo
132 $ hg debugindex foo
133 rev linkrev nodeid p1 p2
133 rev linkrev nodeid p1-nodeid p2-nodeid
134 0 0 690b295714ae 000000000000 000000000000
134 0 0 690b295714ae 000000000000 000000000000
135 1 1 9e25c27b8757 690b295714ae 000000000000
135 1 1 9e25c27b8757 690b295714ae 000000000000
136
136
137
137
138 Revert the content change from rev 2:
138 Revert the content change from rev 2:
139
139
140 $ hg up -C 2
140 $ hg up -C 2
141 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
141 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
142 $ rm bar
142 $ rm bar
143 $ echo line1 > bar
143 $ echo line1 > bar
144 $ hg ci -m '4: revert content change from rev 2'
144 $ hg ci -m '4: revert content change from rev 2'
145 created new head
145 created new head
146
146
147 $ hg log --template '{rev}:{node|short} {parents}\n'
147 $ hg log --template '{rev}:{node|short} {parents}\n'
148 4:2263c1be0967 2:0f2ff26688b9
148 4:2263c1be0967 2:0f2ff26688b9
149 3:3ffa6b9e35f0 1:5cd961e4045d 2:0f2ff26688b9
149 3:3ffa6b9e35f0 1:5cd961e4045d 2:0f2ff26688b9
150 2:0f2ff26688b9 0:2665aaee66e9
150 2:0f2ff26688b9 0:2665aaee66e9
151 1:5cd961e4045d
151 1:5cd961e4045d
152 0:2665aaee66e9
152 0:2665aaee66e9
153
153
154 This should use bar@rev2 as the ancestor:
154 This should use bar@rev2 as the ancestor:
155
155
156 $ hg --debug merge 3
156 $ hg --debug merge 3
157 resolving manifests
157 resolving manifests
158 branchmerge: True, force: False, partial: False
158 branchmerge: True, force: False, partial: False
159 ancestor: 0f2ff26688b9, local: 2263c1be0967+, remote: 3ffa6b9e35f0
159 ancestor: 0f2ff26688b9, local: 2263c1be0967+, remote: 3ffa6b9e35f0
160 starting 4 threads for background file closing (?)
160 starting 4 threads for background file closing (?)
161 preserving bar for resolve of bar
161 preserving bar for resolve of bar
162 bar: versions differ -> m
162 bar: versions differ -> m
163 picked tool ':merge' for bar (binary False symlink False changedelete False)
163 picked tool ':merge' for bar (binary False symlink False changedelete False)
164 merging bar
164 merging bar
165 my bar@2263c1be0967+ other bar@3ffa6b9e35f0 ancestor bar@0f2ff26688b9
165 my bar@2263c1be0967+ other bar@3ffa6b9e35f0 ancestor bar@0f2ff26688b9
166 premerge successful
166 premerge successful
167 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
167 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
168 (branch merge, don't forget to commit)
168 (branch merge, don't forget to commit)
169
169
170 $ cat bar
170 $ cat bar
171 line1
171 line1
172 line2
172 line2
173
173
174 $ hg ci -m '5: merge'
174 $ hg ci -m '5: merge'
175
175
176 $ hg debugindex bar
176 $ hg debugindex bar
177 rev linkrev nodeid p1 p2
177 rev linkrev nodeid p1-nodeid p2-nodeid
178 0 2 d35118874825 000000000000 000000000000
178 0 2 d35118874825 000000000000 000000000000
179 1 3 5345f5ab8abd 000000000000 d35118874825
179 1 3 5345f5ab8abd 000000000000 d35118874825
180 2 4 ff4b45017382 d35118874825 000000000000
180 2 4 ff4b45017382 d35118874825 000000000000
181 3 5 3701b4893544 ff4b45017382 5345f5ab8abd
181 3 5 3701b4893544 ff4b45017382 5345f5ab8abd
182
182
183 $ cd ..
183 $ cd ..
@@ -1,147 +1,147 b''
1 initial
1 initial
2 $ hg init test-a
2 $ hg init test-a
3 $ cd test-a
3 $ cd test-a
4 $ cat >test.txt <<"EOF"
4 $ cat >test.txt <<"EOF"
5 > 1
5 > 1
6 > 2
6 > 2
7 > 3
7 > 3
8 > EOF
8 > EOF
9 $ hg add test.txt
9 $ hg add test.txt
10 $ hg commit -m "Initial"
10 $ hg commit -m "Initial"
11
11
12 clone
12 clone
13 $ cd ..
13 $ cd ..
14 $ hg clone test-a test-b
14 $ hg clone test-a test-b
15 updating to branch default
15 updating to branch default
16 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
16 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
17
17
18 change test-a
18 change test-a
19 $ cd test-a
19 $ cd test-a
20 $ cat >test.txt <<"EOF"
20 $ cat >test.txt <<"EOF"
21 > one
21 > one
22 > two
22 > two
23 > three
23 > three
24 > EOF
24 > EOF
25 $ hg commit -m "Numbers as words"
25 $ hg commit -m "Numbers as words"
26
26
27 change test-b
27 change test-b
28 $ cd ../test-b
28 $ cd ../test-b
29 $ cat >test.txt <<"EOF"
29 $ cat >test.txt <<"EOF"
30 > 1
30 > 1
31 > 2.5
31 > 2.5
32 > 3
32 > 3
33 > EOF
33 > EOF
34 $ hg commit -m "2 -> 2.5"
34 $ hg commit -m "2 -> 2.5"
35
35
36 now pull and merge from test-a
36 now pull and merge from test-a
37 $ hg pull ../test-a
37 $ hg pull ../test-a
38 pulling from ../test-a
38 pulling from ../test-a
39 searching for changes
39 searching for changes
40 adding changesets
40 adding changesets
41 adding manifests
41 adding manifests
42 adding file changes
42 adding file changes
43 added 1 changesets with 1 changes to 1 files (+1 heads)
43 added 1 changesets with 1 changes to 1 files (+1 heads)
44 new changesets 96b70246a118
44 new changesets 96b70246a118
45 (run 'hg heads' to see heads, 'hg merge' to merge)
45 (run 'hg heads' to see heads, 'hg merge' to merge)
46 $ hg merge
46 $ hg merge
47 merging test.txt
47 merging test.txt
48 warning: conflicts while merging test.txt! (edit, then use 'hg resolve --mark')
48 warning: conflicts while merging test.txt! (edit, then use 'hg resolve --mark')
49 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
49 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
50 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
50 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
51 [1]
51 [1]
52 resolve conflict
52 resolve conflict
53 $ cat >test.txt <<"EOF"
53 $ cat >test.txt <<"EOF"
54 > one
54 > one
55 > two-point-five
55 > two-point-five
56 > three
56 > three
57 > EOF
57 > EOF
58 $ rm -f *.orig
58 $ rm -f *.orig
59 $ hg resolve -m test.txt
59 $ hg resolve -m test.txt
60 (no more unresolved files)
60 (no more unresolved files)
61 $ hg commit -m "Merge 1"
61 $ hg commit -m "Merge 1"
62
62
63 change test-a again
63 change test-a again
64 $ cd ../test-a
64 $ cd ../test-a
65 $ cat >test.txt <<"EOF"
65 $ cat >test.txt <<"EOF"
66 > one
66 > one
67 > two-point-one
67 > two-point-one
68 > three
68 > three
69 > EOF
69 > EOF
70 $ hg commit -m "two -> two-point-one"
70 $ hg commit -m "two -> two-point-one"
71
71
72 pull and merge from test-a again
72 pull and merge from test-a again
73 $ cd ../test-b
73 $ cd ../test-b
74 $ hg pull ../test-a
74 $ hg pull ../test-a
75 pulling from ../test-a
75 pulling from ../test-a
76 searching for changes
76 searching for changes
77 adding changesets
77 adding changesets
78 adding manifests
78 adding manifests
79 adding file changes
79 adding file changes
80 added 1 changesets with 1 changes to 1 files (+1 heads)
80 added 1 changesets with 1 changes to 1 files (+1 heads)
81 new changesets 40d11a4173a8
81 new changesets 40d11a4173a8
82 (run 'hg heads' to see heads, 'hg merge' to merge)
82 (run 'hg heads' to see heads, 'hg merge' to merge)
83 $ hg merge --debug
83 $ hg merge --debug
84 resolving manifests
84 resolving manifests
85 branchmerge: True, force: False, partial: False
85 branchmerge: True, force: False, partial: False
86 ancestor: 96b70246a118, local: 50c3a7e29886+, remote: 40d11a4173a8
86 ancestor: 96b70246a118, local: 50c3a7e29886+, remote: 40d11a4173a8
87 starting 4 threads for background file closing (?)
87 starting 4 threads for background file closing (?)
88 preserving test.txt for resolve of test.txt
88 preserving test.txt for resolve of test.txt
89 test.txt: versions differ -> m
89 test.txt: versions differ -> m
90 picked tool ':merge' for test.txt (binary False symlink False changedelete False)
90 picked tool ':merge' for test.txt (binary False symlink False changedelete False)
91 merging test.txt
91 merging test.txt
92 my test.txt@50c3a7e29886+ other test.txt@40d11a4173a8 ancestor test.txt@96b70246a118
92 my test.txt@50c3a7e29886+ other test.txt@40d11a4173a8 ancestor test.txt@96b70246a118
93 warning: conflicts while merging test.txt! (edit, then use 'hg resolve --mark')
93 warning: conflicts while merging test.txt! (edit, then use 'hg resolve --mark')
94 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
94 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
95 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
95 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
96 [1]
96 [1]
97
97
98 $ cat test.txt
98 $ cat test.txt
99 one
99 one
100 <<<<<<< working copy: 50c3a7e29886 - test: Merge 1
100 <<<<<<< working copy: 50c3a7e29886 - test: Merge 1
101 two-point-five
101 two-point-five
102 =======
102 =======
103 two-point-one
103 two-point-one
104 >>>>>>> merge rev: 40d11a4173a8 - test: two -> two-point-one
104 >>>>>>> merge rev: 40d11a4173a8 - test: two -> two-point-one
105 three
105 three
106
106
107 $ hg debugindex test.txt
107 $ hg debugindex test.txt
108 rev linkrev nodeid p1 p2
108 rev linkrev nodeid p1-nodeid p2-nodeid
109 0 0 01365c4cca56 000000000000 000000000000
109 0 0 01365c4cca56 000000000000 000000000000
110 1 1 7b013192566a 01365c4cca56 000000000000
110 1 1 7b013192566a 01365c4cca56 000000000000
111 2 2 8fe46a3eb557 01365c4cca56 000000000000
111 2 2 8fe46a3eb557 01365c4cca56 000000000000
112 3 3 fc3148072371 7b013192566a 8fe46a3eb557
112 3 3 fc3148072371 7b013192566a 8fe46a3eb557
113 4 4 d40249267ae3 8fe46a3eb557 000000000000
113 4 4 d40249267ae3 8fe46a3eb557 000000000000
114
114
115 $ hg log
115 $ hg log
116 changeset: 4:40d11a4173a8
116 changeset: 4:40d11a4173a8
117 tag: tip
117 tag: tip
118 parent: 2:96b70246a118
118 parent: 2:96b70246a118
119 user: test
119 user: test
120 date: Thu Jan 01 00:00:00 1970 +0000
120 date: Thu Jan 01 00:00:00 1970 +0000
121 summary: two -> two-point-one
121 summary: two -> two-point-one
122
122
123 changeset: 3:50c3a7e29886
123 changeset: 3:50c3a7e29886
124 parent: 1:d1e159716d41
124 parent: 1:d1e159716d41
125 parent: 2:96b70246a118
125 parent: 2:96b70246a118
126 user: test
126 user: test
127 date: Thu Jan 01 00:00:00 1970 +0000
127 date: Thu Jan 01 00:00:00 1970 +0000
128 summary: Merge 1
128 summary: Merge 1
129
129
130 changeset: 2:96b70246a118
130 changeset: 2:96b70246a118
131 parent: 0:b1832b9d912a
131 parent: 0:b1832b9d912a
132 user: test
132 user: test
133 date: Thu Jan 01 00:00:00 1970 +0000
133 date: Thu Jan 01 00:00:00 1970 +0000
134 summary: Numbers as words
134 summary: Numbers as words
135
135
136 changeset: 1:d1e159716d41
136 changeset: 1:d1e159716d41
137 user: test
137 user: test
138 date: Thu Jan 01 00:00:00 1970 +0000
138 date: Thu Jan 01 00:00:00 1970 +0000
139 summary: 2 -> 2.5
139 summary: 2 -> 2.5
140
140
141 changeset: 0:b1832b9d912a
141 changeset: 0:b1832b9d912a
142 user: test
142 user: test
143 date: Thu Jan 01 00:00:00 1970 +0000
143 date: Thu Jan 01 00:00:00 1970 +0000
144 summary: Initial
144 summary: Initial
145
145
146
146
147 $ cd ..
147 $ cd ..
@@ -1,44 +1,44 b''
1 $ . "$TESTDIR/narrow-library.sh"
1 $ . "$TESTDIR/narrow-library.sh"
2 $ hg init repo
2 $ hg init repo
3 $ cd repo
3 $ cd repo
4 $ cat << EOF > .hg/store/narrowspec
4 $ cat << EOF > .hg/store/narrowspec
5 > [include]
5 > [include]
6 > path:foo
6 > path:foo
7 > [exclude]
7 > [exclude]
8 > EOF
8 > EOF
9 $ cp .hg/store/narrowspec .hg/narrowspec.dirstate
9 $ cp .hg/store/narrowspec .hg/narrowspec.dirstate
10 $ echo treemanifest >> .hg/requires
10 $ echo treemanifest >> .hg/requires
11 $ echo narrowhg-experimental >> .hg/requires
11 $ echo narrowhg-experimental >> .hg/requires
12 $ mkdir -p foo/bar
12 $ mkdir -p foo/bar
13 $ echo b > foo/f
13 $ echo b > foo/f
14 $ echo c > foo/bar/f
14 $ echo c > foo/bar/f
15 $ hg commit -Am hi
15 $ hg commit -Am hi
16 adding foo/bar/f
16 adding foo/bar/f
17 adding foo/f
17 adding foo/f
18 $ hg debugindex -m
18 $ hg debugindex -m
19 rev linkrev nodeid p1 p2
19 rev linkrev nodeid p1-nodeid p2-nodeid
20 0 0 14a5d056d75a 000000000000 000000000000
20 0 0 14a5d056d75a 000000000000 000000000000
21 $ hg debugindex --dir foo
21 $ hg debugindex --dir foo
22 rev linkrev nodeid p1 p2
22 rev linkrev nodeid p1-nodeid p2-nodeid
23 0 0 e635c7857aef 000000000000 000000000000
23 0 0 e635c7857aef 000000000000 000000000000
24 $ hg debugindex --dir foo/
24 $ hg debugindex --dir foo/
25 rev linkrev nodeid p1 p2
25 rev linkrev nodeid p1-nodeid p2-nodeid
26 0 0 e635c7857aef 000000000000 000000000000
26 0 0 e635c7857aef 000000000000 000000000000
27 $ hg debugindex --dir foo/bar
27 $ hg debugindex --dir foo/bar
28 rev linkrev nodeid p1 p2
28 rev linkrev nodeid p1-nodeid p2-nodeid
29 0 0 e091d4224761 000000000000 000000000000
29 0 0 e091d4224761 000000000000 000000000000
30 $ hg debugindex --dir foo/bar/
30 $ hg debugindex --dir foo/bar/
31 rev linkrev nodeid p1 p2
31 rev linkrev nodeid p1-nodeid p2-nodeid
32 0 0 e091d4224761 000000000000 000000000000
32 0 0 e091d4224761 000000000000 000000000000
33 $ hg debugdata -m 0
33 $ hg debugdata -m 0
34 foo\x00e635c7857aef92ac761ce5741a99da159abbbb24t (esc)
34 foo\x00e635c7857aef92ac761ce5741a99da159abbbb24t (esc)
35 $ hg debugdata --dir foo 0
35 $ hg debugdata --dir foo 0
36 bar\x00e091d42247613adff5d41b67f15fe7189ee97b39t (esc)
36 bar\x00e091d42247613adff5d41b67f15fe7189ee97b39t (esc)
37 f\x001e88685f5ddec574a34c70af492f95b6debc8741 (esc)
37 f\x001e88685f5ddec574a34c70af492f95b6debc8741 (esc)
38 $ hg debugdata --dir foo/ 0
38 $ hg debugdata --dir foo/ 0
39 bar\x00e091d42247613adff5d41b67f15fe7189ee97b39t (esc)
39 bar\x00e091d42247613adff5d41b67f15fe7189ee97b39t (esc)
40 f\x001e88685f5ddec574a34c70af492f95b6debc8741 (esc)
40 f\x001e88685f5ddec574a34c70af492f95b6debc8741 (esc)
41 $ hg debugdata --dir foo/bar 0
41 $ hg debugdata --dir foo/bar 0
42 f\x00149da44f2a4e14f488b7bd4157945a9837408c00 (esc)
42 f\x00149da44f2a4e14f488b7bd4157945a9837408c00 (esc)
43 $ hg debugdata --dir foo/bar/ 0
43 $ hg debugdata --dir foo/bar/ 0
44 f\x00149da44f2a4e14f488b7bd4157945a9837408c00 (esc)
44 f\x00149da44f2a4e14f488b7bd4157945a9837408c00 (esc)
@@ -1,76 +1,76 b''
1
1
2 $ . "$TESTDIR/narrow-library.sh"
2 $ . "$TESTDIR/narrow-library.sh"
3
3
4 create full repo
4 create full repo
5
5
6 $ hg init master
6 $ hg init master
7 $ cd master
7 $ cd master
8 $ echo init > init
8 $ echo init > init
9 $ hg ci -Aqm 'initial'
9 $ hg ci -Aqm 'initial'
10
10
11 $ mkdir inside
11 $ mkdir inside
12 $ echo inside > inside/f1
12 $ echo inside > inside/f1
13 $ mkdir outside
13 $ mkdir outside
14 $ echo outside > outside/f1
14 $ echo outside > outside/f1
15 $ hg ci -Aqm 'add inside and outside'
15 $ hg ci -Aqm 'add inside and outside'
16
16
17 $ echo modified > inside/f1
17 $ echo modified > inside/f1
18 $ hg ci -qm 'modify inside'
18 $ hg ci -qm 'modify inside'
19
19
20 $ echo modified > outside/f1
20 $ echo modified > outside/f1
21 $ hg ci -qm 'modify outside'
21 $ hg ci -qm 'modify outside'
22
22
23 $ cd ..
23 $ cd ..
24
24
25 $ hg clone --narrow ssh://user@dummy/master narrow --include inside
25 $ hg clone --narrow ssh://user@dummy/master narrow --include inside
26 requesting all changes
26 requesting all changes
27 adding changesets
27 adding changesets
28 adding manifests
28 adding manifests
29 adding file changes
29 adding file changes
30 added 4 changesets with 2 changes to 1 files
30 added 4 changesets with 2 changes to 1 files
31 new changesets *:* (glob)
31 new changesets *:* (glob)
32 updating to branch default
32 updating to branch default
33 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
33 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
34 $ cd narrow
34 $ cd narrow
35 $ hg debugindex -c
35 $ hg debugindex -c
36 rev linkrev nodeid p1 p2
36 rev linkrev nodeid p1-nodeid p2-nodeid
37 0 0 9958b1af2add 000000000000 000000000000
37 0 0 9958b1af2add 000000000000 000000000000
38 1 1 2db4ce2a3bfe 9958b1af2add 000000000000
38 1 1 2db4ce2a3bfe 9958b1af2add 000000000000
39 2 2 0980ee31a742 2db4ce2a3bfe 000000000000
39 2 2 0980ee31a742 2db4ce2a3bfe 000000000000
40 3 3 4410145019b7 0980ee31a742 000000000000
40 3 3 4410145019b7 0980ee31a742 000000000000
41
41
42 $ hg update -q 0
42 $ hg update -q 0
43
43
44 Can update to revision with changes inside
44 Can update to revision with changes inside
45
45
46 $ hg update -q 'desc("add inside and outside")'
46 $ hg update -q 'desc("add inside and outside")'
47 $ hg update -q 'desc("modify inside")'
47 $ hg update -q 'desc("modify inside")'
48 $ find *
48 $ find *
49 inside
49 inside
50 inside/f1
50 inside/f1
51 $ cat inside/f1
51 $ cat inside/f1
52 modified
52 modified
53
53
54 Can update to revision with changes outside
54 Can update to revision with changes outside
55
55
56 $ hg update -q 'desc("modify outside")'
56 $ hg update -q 'desc("modify outside")'
57 $ find *
57 $ find *
58 inside
58 inside
59 inside/f1
59 inside/f1
60 $ cat inside/f1
60 $ cat inside/f1
61 modified
61 modified
62
62
63 Can update with a deleted file inside
63 Can update with a deleted file inside
64
64
65 $ hg rm inside/f1
65 $ hg rm inside/f1
66 $ hg update -q 'desc("modify inside")'
66 $ hg update -q 'desc("modify inside")'
67 $ hg update -q 'desc("modify outside")'
67 $ hg update -q 'desc("modify outside")'
68 $ hg update -q 'desc("initial")'
68 $ hg update -q 'desc("initial")'
69 $ hg update -q 'desc("modify inside")'
69 $ hg update -q 'desc("modify inside")'
70
70
71 Can update with a moved file inside
71 Can update with a moved file inside
72
72
73 $ hg mv inside/f1 inside/f2
73 $ hg mv inside/f1 inside/f2
74 $ hg update -q 'desc("modify outside")'
74 $ hg update -q 'desc("modify outside")'
75 $ hg update -q 'desc("add inside and outside")'
75 $ hg update -q 'desc("add inside and outside")'
76 $ hg update -q 'desc("modify inside")'
76 $ hg update -q 'desc("modify inside")'
@@ -1,236 +1,236 b''
1 $ hg init
1 $ hg init
2
2
3 $ echo "[merge]" >> .hg/hgrc
3 $ echo "[merge]" >> .hg/hgrc
4 $ echo "followcopies = 1" >> .hg/hgrc
4 $ echo "followcopies = 1" >> .hg/hgrc
5
5
6 $ echo foo > a
6 $ echo foo > a
7 $ echo foo > a2
7 $ echo foo > a2
8 $ hg add a a2
8 $ hg add a a2
9 $ hg ci -m "start"
9 $ hg ci -m "start"
10
10
11 $ hg mv a b
11 $ hg mv a b
12 $ hg mv a2 b2
12 $ hg mv a2 b2
13 $ hg ci -m "rename"
13 $ hg ci -m "rename"
14
14
15 $ hg co 0
15 $ hg co 0
16 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
16 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
17
17
18 $ echo blahblah > a
18 $ echo blahblah > a
19 $ echo blahblah > a2
19 $ echo blahblah > a2
20 $ hg mv a2 c2
20 $ hg mv a2 c2
21 $ hg ci -m "modify"
21 $ hg ci -m "modify"
22 created new head
22 created new head
23
23
24 $ hg merge -y --debug
24 $ hg merge -y --debug
25 unmatched files in local:
25 unmatched files in local:
26 c2
26 c2
27 unmatched files in other:
27 unmatched files in other:
28 b
28 b
29 b2
29 b2
30 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
30 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
31 on local side:
31 on local side:
32 src: 'a2' -> dst: 'c2' !
32 src: 'a2' -> dst: 'c2' !
33 on remote side:
33 on remote side:
34 src: 'a' -> dst: 'b' *
34 src: 'a' -> dst: 'b' *
35 src: 'a2' -> dst: 'b2' !
35 src: 'a2' -> dst: 'b2' !
36 checking for directory renames
36 checking for directory renames
37 resolving manifests
37 resolving manifests
38 branchmerge: True, force: False, partial: False
38 branchmerge: True, force: False, partial: False
39 ancestor: af1939970a1c, local: 044f8520aeeb+, remote: 85c198ef2f6c
39 ancestor: af1939970a1c, local: 044f8520aeeb+, remote: 85c198ef2f6c
40 note: possible conflict - a2 was renamed multiple times to:
40 note: possible conflict - a2 was renamed multiple times to:
41 b2
41 b2
42 c2
42 c2
43 b2: remote created -> g
43 b2: remote created -> g
44 getting b2
44 getting b2
45 preserving a for resolve of b
45 preserving a for resolve of b
46 removing a
46 removing a
47 b: remote moved from a -> m
47 b: remote moved from a -> m
48 picked tool ':merge' for b (binary False symlink False changedelete False)
48 picked tool ':merge' for b (binary False symlink False changedelete False)
49 merging a and b to b
49 merging a and b to b
50 my b@044f8520aeeb+ other b@85c198ef2f6c ancestor a@af1939970a1c
50 my b@044f8520aeeb+ other b@85c198ef2f6c ancestor a@af1939970a1c
51 premerge successful
51 premerge successful
52 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
52 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
53 (branch merge, don't forget to commit)
53 (branch merge, don't forget to commit)
54
54
55 $ hg status -AC
55 $ hg status -AC
56 M b
56 M b
57 a
57 a
58 M b2
58 M b2
59 R a
59 R a
60 C c2
60 C c2
61
61
62 $ cat b
62 $ cat b
63 blahblah
63 blahblah
64
64
65 $ hg ci -m "merge"
65 $ hg ci -m "merge"
66
66
67 $ hg debugindex b
67 $ hg debugindex b
68 rev linkrev nodeid p1 p2
68 rev linkrev nodeid p1-nodeid p2-nodeid
69 0 1 57eacc201a7f 000000000000 000000000000
69 0 1 57eacc201a7f 000000000000 000000000000
70 1 3 4727ba907962 000000000000 57eacc201a7f
70 1 3 4727ba907962 000000000000 57eacc201a7f
71
71
72 $ hg debugrename b
72 $ hg debugrename b
73 b renamed from a:dd03b83622e78778b403775d0d074b9ac7387a66
73 b renamed from a:dd03b83622e78778b403775d0d074b9ac7387a66
74
74
75 This used to trigger a "divergent renames" warning, despite no renames
75 This used to trigger a "divergent renames" warning, despite no renames
76
76
77 $ hg cp b b3
77 $ hg cp b b3
78 $ hg cp b b4
78 $ hg cp b b4
79 $ hg ci -A -m 'copy b twice'
79 $ hg ci -A -m 'copy b twice'
80 $ hg up '.^'
80 $ hg up '.^'
81 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
81 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
82 $ hg up
82 $ hg up
83 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
83 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
84 $ hg rm b3 b4
84 $ hg rm b3 b4
85 $ hg ci -m 'clean up a bit of our mess'
85 $ hg ci -m 'clean up a bit of our mess'
86
86
87 We'd rather not warn on divergent renames done in the same changeset (issue2113)
87 We'd rather not warn on divergent renames done in the same changeset (issue2113)
88
88
89 $ hg cp b b3
89 $ hg cp b b3
90 $ hg mv b b4
90 $ hg mv b b4
91 $ hg ci -A -m 'divergent renames in same changeset'
91 $ hg ci -A -m 'divergent renames in same changeset'
92 $ hg up '.^'
92 $ hg up '.^'
93 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
93 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
94 $ hg up
94 $ hg up
95 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
95 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
96
96
97 Check for issue2642
97 Check for issue2642
98
98
99 $ hg init t
99 $ hg init t
100 $ cd t
100 $ cd t
101
101
102 $ echo c0 > f1
102 $ echo c0 > f1
103 $ hg ci -Aqm0
103 $ hg ci -Aqm0
104
104
105 $ hg up null -q
105 $ hg up null -q
106 $ echo c1 > f1 # backport
106 $ echo c1 > f1 # backport
107 $ hg ci -Aqm1
107 $ hg ci -Aqm1
108 $ hg mv f1 f2
108 $ hg mv f1 f2
109 $ hg ci -qm2
109 $ hg ci -qm2
110
110
111 $ hg up 0 -q
111 $ hg up 0 -q
112 $ hg merge 1 -q --tool internal:local
112 $ hg merge 1 -q --tool internal:local
113 $ hg ci -qm3
113 $ hg ci -qm3
114
114
115 $ hg merge 2
115 $ hg merge 2
116 merging f1 and f2 to f2
116 merging f1 and f2 to f2
117 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
117 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
118 (branch merge, don't forget to commit)
118 (branch merge, don't forget to commit)
119
119
120 $ cat f2
120 $ cat f2
121 c0
121 c0
122
122
123 $ cd ..
123 $ cd ..
124
124
125 Check for issue2089
125 Check for issue2089
126
126
127 $ hg init repo2089
127 $ hg init repo2089
128 $ cd repo2089
128 $ cd repo2089
129
129
130 $ echo c0 > f1
130 $ echo c0 > f1
131 $ hg ci -Aqm0
131 $ hg ci -Aqm0
132
132
133 $ hg up null -q
133 $ hg up null -q
134 $ echo c1 > f1
134 $ echo c1 > f1
135 $ hg ci -Aqm1
135 $ hg ci -Aqm1
136
136
137 $ hg up 0 -q
137 $ hg up 0 -q
138 $ hg merge 1 -q --tool internal:local
138 $ hg merge 1 -q --tool internal:local
139 $ echo c2 > f1
139 $ echo c2 > f1
140 $ hg ci -qm2
140 $ hg ci -qm2
141
141
142 $ hg up 1 -q
142 $ hg up 1 -q
143 $ hg mv f1 f2
143 $ hg mv f1 f2
144 $ hg ci -Aqm3
144 $ hg ci -Aqm3
145
145
146 $ hg up 2 -q
146 $ hg up 2 -q
147 $ hg merge 3
147 $ hg merge 3
148 merging f1 and f2 to f2
148 merging f1 and f2 to f2
149 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
149 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
150 (branch merge, don't forget to commit)
150 (branch merge, don't forget to commit)
151
151
152 $ cat f2
152 $ cat f2
153 c2
153 c2
154
154
155 $ cd ..
155 $ cd ..
156
156
157 Check for issue3074
157 Check for issue3074
158
158
159 $ hg init repo3074
159 $ hg init repo3074
160 $ cd repo3074
160 $ cd repo3074
161 $ echo foo > file
161 $ echo foo > file
162 $ hg add file
162 $ hg add file
163 $ hg commit -m "added file"
163 $ hg commit -m "added file"
164 $ hg mv file newfile
164 $ hg mv file newfile
165 $ hg commit -m "renamed file"
165 $ hg commit -m "renamed file"
166 $ hg update 0
166 $ hg update 0
167 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
167 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
168 $ hg rm file
168 $ hg rm file
169 $ hg commit -m "deleted file"
169 $ hg commit -m "deleted file"
170 created new head
170 created new head
171 $ hg merge --debug
171 $ hg merge --debug
172 unmatched files in other:
172 unmatched files in other:
173 newfile
173 newfile
174 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
174 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
175 on remote side:
175 on remote side:
176 src: 'file' -> dst: 'newfile' %
176 src: 'file' -> dst: 'newfile' %
177 checking for directory renames
177 checking for directory renames
178 resolving manifests
178 resolving manifests
179 branchmerge: True, force: False, partial: False
179 branchmerge: True, force: False, partial: False
180 ancestor: 19d7f95df299, local: 0084274f6b67+, remote: 5d32493049f0
180 ancestor: 19d7f95df299, local: 0084274f6b67+, remote: 5d32493049f0
181 note: possible conflict - file was deleted and renamed to:
181 note: possible conflict - file was deleted and renamed to:
182 newfile
182 newfile
183 newfile: remote created -> g
183 newfile: remote created -> g
184 getting newfile
184 getting newfile
185 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
185 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
186 (branch merge, don't forget to commit)
186 (branch merge, don't forget to commit)
187 $ hg status
187 $ hg status
188 M newfile
188 M newfile
189 $ cd ..
189 $ cd ..
190
190
191 Create x and y, then modify y and rename x to z on one side of merge, and
191 Create x and y, then modify y and rename x to z on one side of merge, and
192 modify x and rename y to z on the other side.
192 modify x and rename y to z on the other side.
193 $ hg init conflicting-target
193 $ hg init conflicting-target
194 $ cd conflicting-target
194 $ cd conflicting-target
195 $ echo x > x
195 $ echo x > x
196 $ echo y > y
196 $ echo y > y
197 $ hg ci -Aqm 'add x and y'
197 $ hg ci -Aqm 'add x and y'
198 $ hg mv x z
198 $ hg mv x z
199 $ echo foo >> y
199 $ echo foo >> y
200 $ hg ci -qm 'modify y, rename x to z'
200 $ hg ci -qm 'modify y, rename x to z'
201 $ hg co -q 0
201 $ hg co -q 0
202 $ hg mv y z
202 $ hg mv y z
203 $ echo foo >> x
203 $ echo foo >> x
204 $ hg ci -qm 'modify x, rename y to z'
204 $ hg ci -qm 'modify x, rename y to z'
205 # We should probably tell the user about the conflicting rename sources.
205 # We should probably tell the user about the conflicting rename sources.
206 # Depending on which side they pick, we should take that rename and get
206 # Depending on which side they pick, we should take that rename and get
207 # the changes to the source from the other side. The unchanged file should
207 # the changes to the source from the other side. The unchanged file should
208 # remain.
208 # remain.
209 $ hg merge --debug 1 -t :merge3
209 $ hg merge --debug 1 -t :merge3
210 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
210 all copies found (* = to merge, ! = divergent, % = renamed and deleted):
211 on local side:
211 on local side:
212 src: 'y' -> dst: 'z' *
212 src: 'y' -> dst: 'z' *
213 on remote side:
213 on remote side:
214 src: 'x' -> dst: 'z' *
214 src: 'x' -> dst: 'z' *
215 checking for directory renames
215 checking for directory renames
216 resolving manifests
216 resolving manifests
217 branchmerge: True, force: False, partial: False
217 branchmerge: True, force: False, partial: False
218 ancestor: 5151c134577e, local: 07fcbc9a74ed+, remote: f21419739508
218 ancestor: 5151c134577e, local: 07fcbc9a74ed+, remote: f21419739508
219 starting 4 threads for background file closing (?)
219 starting 4 threads for background file closing (?)
220 preserving z for resolve of z
220 preserving z for resolve of z
221 z: both renamed from y -> m
221 z: both renamed from y -> m
222 picked tool ':merge3' for z (binary False symlink False changedelete False)
222 picked tool ':merge3' for z (binary False symlink False changedelete False)
223 merging z
223 merging z
224 my z@07fcbc9a74ed+ other z@f21419739508 ancestor y@5151c134577e
224 my z@07fcbc9a74ed+ other z@f21419739508 ancestor y@5151c134577e
225 premerge successful
225 premerge successful
226 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
226 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
227 (branch merge, don't forget to commit)
227 (branch merge, don't forget to commit)
228 $ ls
228 $ ls
229 x
229 x
230 z
230 z
231 $ cat x
231 $ cat x
232 x
232 x
233 foo
233 foo
234 # 'z' should have had the added 'foo' line
234 # 'z' should have had the added 'foo' line
235 $ cat z
235 $ cat z
236 x
236 x
@@ -1,23 +1,23 b''
1 $ hg init repo
1 $ hg init repo
2 $ cd repo
2 $ cd repo
3
3
4 $ touch foo
4 $ touch foo
5 $ hg ci -Am 'add foo'
5 $ hg ci -Am 'add foo'
6 adding foo
6 adding foo
7
7
8 $ hg up -C null
8 $ hg up -C null
9 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
9 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
10
10
11 this should be stored as a delta against rev 0
11 this should be stored as a delta against rev 0
12
12
13 $ echo foo bar baz > foo
13 $ echo foo bar baz > foo
14 $ hg ci -Am 'add foo again'
14 $ hg ci -Am 'add foo again'
15 adding foo
15 adding foo
16 created new head
16 created new head
17
17
18 $ hg debugindex foo
18 $ hg debugindex foo
19 rev linkrev nodeid p1 p2
19 rev linkrev nodeid p1-nodeid p2-nodeid
20 0 0 b80de5d13875 000000000000 000000000000
20 0 0 b80de5d13875 000000000000 000000000000
21 1 1 0376abec49b8 000000000000 000000000000
21 1 1 0376abec49b8 000000000000 000000000000
22
22
23 $ cd ..
23 $ cd ..
@@ -1,220 +1,220 b''
1 test stripping of filelogs where the linkrev doesn't always increase
1 test stripping of filelogs where the linkrev doesn't always increase
2
2
3 $ echo '[extensions]' >> $HGRCPATH
3 $ echo '[extensions]' >> $HGRCPATH
4 $ echo 'strip =' >> $HGRCPATH
4 $ echo 'strip =' >> $HGRCPATH
5 $ commit()
5 $ commit()
6 > {
6 > {
7 > hg up -qC null
7 > hg up -qC null
8 > count=1
8 > count=1
9 > for i in "$@"; do
9 > for i in "$@"; do
10 > for f in $i; do
10 > for f in $i; do
11 > mkdir -p `dirname $f`
11 > mkdir -p `dirname $f`
12 > echo $count > $f
12 > echo $count > $f
13 > done
13 > done
14 > count=`expr $count + 1`
14 > count=`expr $count + 1`
15 > done
15 > done
16 > hg commit -qAm "$*"
16 > hg commit -qAm "$*"
17 > }
17 > }
18
18
19 2 1 0 2 0 1 2
19 2 1 0 2 0 1 2
20
20
21 $ mkdir files
21 $ mkdir files
22 $ cd files
22 $ cd files
23 $ hg init orig
23 $ hg init orig
24 $ cd orig
24 $ cd orig
25 $ commit '201 210'
25 $ commit '201 210'
26 $ commit '102 120' '210'
26 $ commit '102 120' '210'
27 $ commit '021'
27 $ commit '021'
28 $ commit '201' '021 120'
28 $ commit '201' '021 120'
29 $ commit '012 021' '102 201' '120 210'
29 $ commit '012 021' '102 201' '120 210'
30 $ commit '102 120' '012 210' '021 201'
30 $ commit '102 120' '012 210' '021 201'
31 $ commit '201 210' '021 120' '012 102'
31 $ commit '201 210' '021 120' '012 102'
32 $ cd ..
32 $ cd ..
33 $ hg clone -q -U -r 4 -r 5 -r 6 orig crossed
33 $ hg clone -q -U -r 4 -r 5 -r 6 orig crossed
34 $ cd crossed
34 $ cd crossed
35
35
36 $ for i in 012 021 102 120 201 210; do
36 $ for i in 012 021 102 120 201 210; do
37 > echo $i
37 > echo $i
38 > hg debugindex $i
38 > hg debugindex $i
39 > echo
39 > echo
40 > done
40 > done
41 012
41 012
42 rev linkrev nodeid p1 p2
42 rev linkrev nodeid p1-nodeid p2-nodeid
43 0 0 b8e02f643373 000000000000 000000000000
43 0 0 b8e02f643373 000000000000 000000000000
44 1 1 5d9299349fc0 000000000000 000000000000
44 1 1 5d9299349fc0 000000000000 000000000000
45 2 2 2661d26c6496 000000000000 000000000000
45 2 2 2661d26c6496 000000000000 000000000000
46
46
47 021
47 021
48 rev linkrev nodeid p1 p2
48 rev linkrev nodeid p1-nodeid p2-nodeid
49 0 0 b8e02f643373 000000000000 000000000000
49 0 0 b8e02f643373 000000000000 000000000000
50 1 2 5d9299349fc0 000000000000 000000000000
50 1 2 5d9299349fc0 000000000000 000000000000
51 2 1 2661d26c6496 000000000000 000000000000
51 2 1 2661d26c6496 000000000000 000000000000
52
52
53 102
53 102
54 rev linkrev nodeid p1 p2
54 rev linkrev nodeid p1-nodeid p2-nodeid
55 0 1 b8e02f643373 000000000000 000000000000
55 0 1 b8e02f643373 000000000000 000000000000
56 1 0 5d9299349fc0 000000000000 000000000000
56 1 0 5d9299349fc0 000000000000 000000000000
57 2 2 2661d26c6496 000000000000 000000000000
57 2 2 2661d26c6496 000000000000 000000000000
58
58
59 120
59 120
60 rev linkrev nodeid p1 p2
60 rev linkrev nodeid p1-nodeid p2-nodeid
61 0 1 b8e02f643373 000000000000 000000000000
61 0 1 b8e02f643373 000000000000 000000000000
62 1 2 5d9299349fc0 000000000000 000000000000
62 1 2 5d9299349fc0 000000000000 000000000000
63 2 0 2661d26c6496 000000000000 000000000000
63 2 0 2661d26c6496 000000000000 000000000000
64
64
65 201
65 201
66 rev linkrev nodeid p1 p2
66 rev linkrev nodeid p1-nodeid p2-nodeid
67 0 2 b8e02f643373 000000000000 000000000000
67 0 2 b8e02f643373 000000000000 000000000000
68 1 0 5d9299349fc0 000000000000 000000000000
68 1 0 5d9299349fc0 000000000000 000000000000
69 2 1 2661d26c6496 000000000000 000000000000
69 2 1 2661d26c6496 000000000000 000000000000
70
70
71 210
71 210
72 rev linkrev nodeid p1 p2
72 rev linkrev nodeid p1-nodeid p2-nodeid
73 0 2 b8e02f643373 000000000000 000000000000
73 0 2 b8e02f643373 000000000000 000000000000
74 1 1 5d9299349fc0 000000000000 000000000000
74 1 1 5d9299349fc0 000000000000 000000000000
75 2 0 2661d26c6496 000000000000 000000000000
75 2 0 2661d26c6496 000000000000 000000000000
76
76
77 $ cd ..
77 $ cd ..
78 $ for i in 0 1 2; do
78 $ for i in 0 1 2; do
79 > hg clone -q -U --pull crossed $i
79 > hg clone -q -U --pull crossed $i
80 > echo "% Trying to strip revision $i"
80 > echo "% Trying to strip revision $i"
81 > hg --cwd $i strip $i
81 > hg --cwd $i strip $i
82 > echo "% Verifying"
82 > echo "% Verifying"
83 > hg --cwd $i verify
83 > hg --cwd $i verify
84 > echo
84 > echo
85 > done
85 > done
86 % Trying to strip revision 0
86 % Trying to strip revision 0
87 saved backup bundle to $TESTTMP/files/0/.hg/strip-backup/cbb8c2f0a2e3-239800b9-backup.hg
87 saved backup bundle to $TESTTMP/files/0/.hg/strip-backup/cbb8c2f0a2e3-239800b9-backup.hg
88 % Verifying
88 % Verifying
89 checking changesets
89 checking changesets
90 checking manifests
90 checking manifests
91 crosschecking files in changesets and manifests
91 crosschecking files in changesets and manifests
92 checking files
92 checking files
93 checked 2 changesets with 12 changes to 6 files
93 checked 2 changesets with 12 changes to 6 files
94
94
95 % Trying to strip revision 1
95 % Trying to strip revision 1
96 saved backup bundle to $TESTTMP/files/1/.hg/strip-backup/124ecc0cbec9-6104543f-backup.hg
96 saved backup bundle to $TESTTMP/files/1/.hg/strip-backup/124ecc0cbec9-6104543f-backup.hg
97 % Verifying
97 % Verifying
98 checking changesets
98 checking changesets
99 checking manifests
99 checking manifests
100 crosschecking files in changesets and manifests
100 crosschecking files in changesets and manifests
101 checking files
101 checking files
102 checked 2 changesets with 12 changes to 6 files
102 checked 2 changesets with 12 changes to 6 files
103
103
104 % Trying to strip revision 2
104 % Trying to strip revision 2
105 saved backup bundle to $TESTTMP/files/2/.hg/strip-backup/f6439b304a1a-c6505a5f-backup.hg
105 saved backup bundle to $TESTTMP/files/2/.hg/strip-backup/f6439b304a1a-c6505a5f-backup.hg
106 % Verifying
106 % Verifying
107 checking changesets
107 checking changesets
108 checking manifests
108 checking manifests
109 crosschecking files in changesets and manifests
109 crosschecking files in changesets and manifests
110 checking files
110 checking files
111 checked 2 changesets with 12 changes to 6 files
111 checked 2 changesets with 12 changes to 6 files
112
112
113 $ cd ..
113 $ cd ..
114
114
115 Do a similar test where the manifest revlog has unordered linkrevs
115 Do a similar test where the manifest revlog has unordered linkrevs
116 $ mkdir manifests
116 $ mkdir manifests
117 $ cd manifests
117 $ cd manifests
118 $ hg init orig
118 $ hg init orig
119 $ cd orig
119 $ cd orig
120 $ commit 'file'
120 $ commit 'file'
121 $ commit 'other'
121 $ commit 'other'
122 $ commit '' 'other'
122 $ commit '' 'other'
123 $ HGUSER=another-user; export HGUSER
123 $ HGUSER=another-user; export HGUSER
124 $ commit 'file'
124 $ commit 'file'
125 $ commit 'other' 'file'
125 $ commit 'other' 'file'
126 $ cd ..
126 $ cd ..
127 $ hg clone -q -U -r 1 -r 2 -r 3 -r 4 orig crossed
127 $ hg clone -q -U -r 1 -r 2 -r 3 -r 4 orig crossed
128 $ cd crossed
128 $ cd crossed
129 $ hg debugindex --manifest
129 $ hg debugindex --manifest
130 rev linkrev nodeid p1 p2
130 rev linkrev nodeid p1-nodeid p2-nodeid
131 0 2 6bbc6fee55c2 000000000000 000000000000
131 0 2 6bbc6fee55c2 000000000000 000000000000
132 1 0 1c556153fe54 000000000000 000000000000
132 1 0 1c556153fe54 000000000000 000000000000
133 2 1 1f76dba919fd 000000000000 000000000000
133 2 1 1f76dba919fd 000000000000 000000000000
134 3 3 bbee06ad59d5 000000000000 000000000000
134 3 3 bbee06ad59d5 000000000000 000000000000
135
135
136 $ cd ..
136 $ cd ..
137 $ for i in 2 3; do
137 $ for i in 2 3; do
138 > hg clone -q -U --pull crossed $i
138 > hg clone -q -U --pull crossed $i
139 > echo "% Trying to strip revision $i"
139 > echo "% Trying to strip revision $i"
140 > hg --cwd $i strip $i
140 > hg --cwd $i strip $i
141 > echo "% Verifying"
141 > echo "% Verifying"
142 > hg --cwd $i verify
142 > hg --cwd $i verify
143 > echo
143 > echo
144 > done
144 > done
145 % Trying to strip revision 2
145 % Trying to strip revision 2
146 saved backup bundle to $TESTTMP/manifests/2/.hg/strip-backup/f3015ad03c03-4d98bdc2-backup.hg
146 saved backup bundle to $TESTTMP/manifests/2/.hg/strip-backup/f3015ad03c03-4d98bdc2-backup.hg
147 % Verifying
147 % Verifying
148 checking changesets
148 checking changesets
149 checking manifests
149 checking manifests
150 crosschecking files in changesets and manifests
150 crosschecking files in changesets and manifests
151 checking files
151 checking files
152 checked 3 changesets with 3 changes to 2 files
152 checked 3 changesets with 3 changes to 2 files
153
153
154 % Trying to strip revision 3
154 % Trying to strip revision 3
155 saved backup bundle to $TESTTMP/manifests/3/.hg/strip-backup/9632aa303aa4-69192e3f-backup.hg
155 saved backup bundle to $TESTTMP/manifests/3/.hg/strip-backup/9632aa303aa4-69192e3f-backup.hg
156 % Verifying
156 % Verifying
157 checking changesets
157 checking changesets
158 checking manifests
158 checking manifests
159 crosschecking files in changesets and manifests
159 crosschecking files in changesets and manifests
160 checking files
160 checking files
161 checked 3 changesets with 3 changes to 2 files
161 checked 3 changesets with 3 changes to 2 files
162
162
163 $ cd ..
163 $ cd ..
164
164
165 Now a similar test for a non-root manifest revlog
165 Now a similar test for a non-root manifest revlog
166 $ cat >> $HGRCPATH <<EOF
166 $ cat >> $HGRCPATH <<EOF
167 > [experimental]
167 > [experimental]
168 > treemanifests = yes
168 > treemanifests = yes
169 > EOF
169 > EOF
170 $ mkdir treemanifests
170 $ mkdir treemanifests
171 $ cd treemanifests
171 $ cd treemanifests
172 $
172 $
173 $ hg --config experimental.treemanifest=True init orig
173 $ hg --config experimental.treemanifest=True init orig
174 $ cd orig
174 $ cd orig
175 $ commit 'dir/file'
175 $ commit 'dir/file'
176 $ commit 'dir/other'
176 $ commit 'dir/other'
177 $ commit '' 'dir/other'
177 $ commit '' 'dir/other'
178 $ HGUSER=yet-another-user; export HGUSER
178 $ HGUSER=yet-another-user; export HGUSER
179 $ commit 'otherdir dir/file'
179 $ commit 'otherdir dir/file'
180 $ commit 'otherdir dir/other' 'otherdir dir/file'
180 $ commit 'otherdir dir/other' 'otherdir dir/file'
181 $ cd ..
181 $ cd ..
182 $ hg --config experimental.treemanifest=True clone -q -U -r 1 -r 2 -r 3 -r 4 orig crossed
182 $ hg --config experimental.treemanifest=True clone -q -U -r 1 -r 2 -r 3 -r 4 orig crossed
183 $ cd crossed
183 $ cd crossed
184 $ hg debugindex --dir dir
184 $ hg debugindex --dir dir
185 rev linkrev nodeid p1 p2
185 rev linkrev nodeid p1-nodeid p2-nodeid
186 0 2 6bbc6fee55c2 000000000000 000000000000
186 0 2 6bbc6fee55c2 000000000000 000000000000
187 1 0 1c556153fe54 000000000000 000000000000
187 1 0 1c556153fe54 000000000000 000000000000
188 2 1 1f76dba919fd 000000000000 000000000000
188 2 1 1f76dba919fd 000000000000 000000000000
189 3 3 bbee06ad59d5 000000000000 000000000000
189 3 3 bbee06ad59d5 000000000000 000000000000
190
190
191 $ cd ..
191 $ cd ..
192 $ for i in 2 3; do
192 $ for i in 2 3; do
193 > hg --config experimental.treemanifest=True clone -q -U --pull crossed $i
193 > hg --config experimental.treemanifest=True clone -q -U --pull crossed $i
194 > echo "% Trying to strip revision $i"
194 > echo "% Trying to strip revision $i"
195 > hg --cwd $i strip $i
195 > hg --cwd $i strip $i
196 > echo "% Verifying"
196 > echo "% Verifying"
197 > hg --cwd $i verify
197 > hg --cwd $i verify
198 > echo
198 > echo
199 > done
199 > done
200 % Trying to strip revision 2
200 % Trying to strip revision 2
201 saved backup bundle to $TESTTMP/treemanifests/2/.hg/strip-backup/145f5c75f9ac-a105cfbe-backup.hg
201 saved backup bundle to $TESTTMP/treemanifests/2/.hg/strip-backup/145f5c75f9ac-a105cfbe-backup.hg
202 % Verifying
202 % Verifying
203 checking changesets
203 checking changesets
204 checking manifests
204 checking manifests
205 checking directory manifests
205 checking directory manifests
206 crosschecking files in changesets and manifests
206 crosschecking files in changesets and manifests
207 checking files
207 checking files
208 checked 3 changesets with 4 changes to 3 files
208 checked 3 changesets with 4 changes to 3 files
209
209
210 % Trying to strip revision 3
210 % Trying to strip revision 3
211 saved backup bundle to $TESTTMP/treemanifests/3/.hg/strip-backup/e4e3de5c3cb2-f4c70376-backup.hg
211 saved backup bundle to $TESTTMP/treemanifests/3/.hg/strip-backup/e4e3de5c3cb2-f4c70376-backup.hg
212 % Verifying
212 % Verifying
213 checking changesets
213 checking changesets
214 checking manifests
214 checking manifests
215 checking directory manifests
215 checking directory manifests
216 crosschecking files in changesets and manifests
216 crosschecking files in changesets and manifests
217 checking files
217 checking files
218 checked 3 changesets with 4 changes to 3 files
218 checked 3 changesets with 4 changes to 3 files
219
219
220 $ cd ..
220 $ cd ..
@@ -1,896 +1,896 b''
1 Set up repo
1 Set up repo
2
2
3 $ hg --config experimental.treemanifest=True init repo
3 $ hg --config experimental.treemanifest=True init repo
4 $ cd repo
4 $ cd repo
5
5
6 Requirements get set on init
6 Requirements get set on init
7
7
8 $ hg debugrequires | grep treemanifest
8 $ hg debugrequires | grep treemanifest
9 treemanifest
9 treemanifest
10
10
11 Without directories, looks like any other repo
11 Without directories, looks like any other repo
12
12
13 $ echo 0 > a
13 $ echo 0 > a
14 $ echo 0 > b
14 $ echo 0 > b
15 $ hg ci -Aqm initial
15 $ hg ci -Aqm initial
16 $ hg debugdata -m 0
16 $ hg debugdata -m 0
17 a\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
17 a\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
18 b\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
18 b\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
19
19
20 Submanifest is stored in separate revlog
20 Submanifest is stored in separate revlog
21
21
22 $ mkdir dir1
22 $ mkdir dir1
23 $ echo 1 > dir1/a
23 $ echo 1 > dir1/a
24 $ echo 1 > dir1/b
24 $ echo 1 > dir1/b
25 $ echo 1 > e
25 $ echo 1 > e
26 $ hg ci -Aqm 'add dir1'
26 $ hg ci -Aqm 'add dir1'
27 $ hg debugdata -m 1
27 $ hg debugdata -m 1
28 a\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
28 a\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
29 b\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
29 b\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
30 dir1\x008b3ffd73f901e83304c83d33132c8e774ceac44et (esc)
30 dir1\x008b3ffd73f901e83304c83d33132c8e774ceac44et (esc)
31 e\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
31 e\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
32 $ hg debugdata --dir dir1 0
32 $ hg debugdata --dir dir1 0
33 a\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
33 a\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
34 b\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
34 b\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
35
35
36 Can add nested directories
36 Can add nested directories
37
37
38 $ mkdir dir1/dir1
38 $ mkdir dir1/dir1
39 $ echo 2 > dir1/dir1/a
39 $ echo 2 > dir1/dir1/a
40 $ echo 2 > dir1/dir1/b
40 $ echo 2 > dir1/dir1/b
41 $ mkdir dir1/dir2
41 $ mkdir dir1/dir2
42 $ echo 2 > dir1/dir2/a
42 $ echo 2 > dir1/dir2/a
43 $ echo 2 > dir1/dir2/b
43 $ echo 2 > dir1/dir2/b
44 $ hg ci -Aqm 'add dir1/dir1'
44 $ hg ci -Aqm 'add dir1/dir1'
45 $ hg files -r .
45 $ hg files -r .
46 a
46 a
47 b
47 b
48 dir1/a
48 dir1/a
49 dir1/b
49 dir1/b
50 dir1/dir1/a
50 dir1/dir1/a
51 dir1/dir1/b
51 dir1/dir1/b
52 dir1/dir2/a
52 dir1/dir2/a
53 dir1/dir2/b
53 dir1/dir2/b
54 e
54 e
55
55
56 The manifest command works
56 The manifest command works
57
57
58 $ hg manifest
58 $ hg manifest
59 a
59 a
60 b
60 b
61 dir1/a
61 dir1/a
62 dir1/b
62 dir1/b
63 dir1/dir1/a
63 dir1/dir1/a
64 dir1/dir1/b
64 dir1/dir1/b
65 dir1/dir2/a
65 dir1/dir2/a
66 dir1/dir2/b
66 dir1/dir2/b
67 e
67 e
68
68
69 Revision is not created for unchanged directory
69 Revision is not created for unchanged directory
70
70
71 $ mkdir dir2
71 $ mkdir dir2
72 $ echo 3 > dir2/a
72 $ echo 3 > dir2/a
73 $ hg add dir2
73 $ hg add dir2
74 adding dir2/a
74 adding dir2/a
75 $ hg debugindex --dir dir1 > before
75 $ hg debugindex --dir dir1 > before
76 $ hg ci -qm 'add dir2'
76 $ hg ci -qm 'add dir2'
77 $ hg debugindex --dir dir1 > after
77 $ hg debugindex --dir dir1 > after
78 $ diff before after
78 $ diff before after
79 $ rm before after
79 $ rm before after
80
80
81 Removing directory does not create an revlog entry
81 Removing directory does not create an revlog entry
82
82
83 $ hg rm dir1/dir1
83 $ hg rm dir1/dir1
84 removing dir1/dir1/a
84 removing dir1/dir1/a
85 removing dir1/dir1/b
85 removing dir1/dir1/b
86 $ hg debugindex --dir dir1/dir1 > before
86 $ hg debugindex --dir dir1/dir1 > before
87 $ hg ci -qm 'remove dir1/dir1'
87 $ hg ci -qm 'remove dir1/dir1'
88 $ hg debugindex --dir dir1/dir1 > after
88 $ hg debugindex --dir dir1/dir1 > after
89 $ diff before after
89 $ diff before after
90 $ rm before after
90 $ rm before after
91
91
92 Check that hg files (calls treemanifest.walk()) works
92 Check that hg files (calls treemanifest.walk()) works
93 without loading all directory revlogs
93 without loading all directory revlogs
94
94
95 $ hg co 'desc("add dir2")'
95 $ hg co 'desc("add dir2")'
96 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
96 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
97 $ mv .hg/store/meta/dir2 .hg/store/meta/dir2-backup
97 $ mv .hg/store/meta/dir2 .hg/store/meta/dir2-backup
98 $ hg files -r . dir1
98 $ hg files -r . dir1
99 dir1/a
99 dir1/a
100 dir1/b
100 dir1/b
101 dir1/dir1/a
101 dir1/dir1/a
102 dir1/dir1/b
102 dir1/dir1/b
103 dir1/dir2/a
103 dir1/dir2/a
104 dir1/dir2/b
104 dir1/dir2/b
105
105
106 Check that status between revisions works (calls treemanifest.matches())
106 Check that status between revisions works (calls treemanifest.matches())
107 without loading all directory revlogs
107 without loading all directory revlogs
108
108
109 $ hg status --rev 'desc("add dir1")' --rev . dir1
109 $ hg status --rev 'desc("add dir1")' --rev . dir1
110 A dir1/dir1/a
110 A dir1/dir1/a
111 A dir1/dir1/b
111 A dir1/dir1/b
112 A dir1/dir2/a
112 A dir1/dir2/a
113 A dir1/dir2/b
113 A dir1/dir2/b
114 $ mv .hg/store/meta/dir2-backup .hg/store/meta/dir2
114 $ mv .hg/store/meta/dir2-backup .hg/store/meta/dir2
115
115
116 Merge creates 2-parent revision of directory revlog
116 Merge creates 2-parent revision of directory revlog
117
117
118 $ echo 5 > dir1/a
118 $ echo 5 > dir1/a
119 $ hg ci -Aqm 'modify dir1/a'
119 $ hg ci -Aqm 'modify dir1/a'
120 $ hg co '.^'
120 $ hg co '.^'
121 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
121 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
122 $ echo 6 > dir1/b
122 $ echo 6 > dir1/b
123 $ hg ci -Aqm 'modify dir1/b'
123 $ hg ci -Aqm 'modify dir1/b'
124 $ hg merge 'desc("modify dir1/a")'
124 $ hg merge 'desc("modify dir1/a")'
125 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
125 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
126 (branch merge, don't forget to commit)
126 (branch merge, don't forget to commit)
127 $ hg ci -m 'conflict-free merge involving dir1/'
127 $ hg ci -m 'conflict-free merge involving dir1/'
128 $ cat dir1/a
128 $ cat dir1/a
129 5
129 5
130 $ cat dir1/b
130 $ cat dir1/b
131 6
131 6
132 $ hg debugindex --dir dir1
132 $ hg debugindex --dir dir1
133 rev linkrev nodeid p1 p2
133 rev linkrev nodeid p1-nodeid p2-nodeid
134 0 1 8b3ffd73f901 000000000000 000000000000
134 0 1 8b3ffd73f901 000000000000 000000000000
135 1 2 68e9d057c5a8 8b3ffd73f901 000000000000
135 1 2 68e9d057c5a8 8b3ffd73f901 000000000000
136 2 4 4698198d2624 68e9d057c5a8 000000000000
136 2 4 4698198d2624 68e9d057c5a8 000000000000
137 3 5 44844058ccce 68e9d057c5a8 000000000000
137 3 5 44844058ccce 68e9d057c5a8 000000000000
138 4 6 bf3d9b744927 68e9d057c5a8 000000000000
138 4 6 bf3d9b744927 68e9d057c5a8 000000000000
139 5 7 dde7c0af2a03 bf3d9b744927 44844058ccce
139 5 7 dde7c0af2a03 bf3d9b744927 44844058ccce
140
140
141 Merge keeping directory from parent 1 does not create revlog entry. (Note that
141 Merge keeping directory from parent 1 does not create revlog entry. (Note that
142 dir1's manifest does change, but only because dir1/a's filelog changes.)
142 dir1's manifest does change, but only because dir1/a's filelog changes.)
143
143
144 $ hg co 'desc("add dir2")'
144 $ hg co 'desc("add dir2")'
145 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
145 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
146 $ echo 8 > dir2/a
146 $ echo 8 > dir2/a
147 $ hg ci -m 'modify dir2/a'
147 $ hg ci -m 'modify dir2/a'
148 created new head
148 created new head
149
149
150 $ hg debugindex --dir dir2 > before
150 $ hg debugindex --dir dir2 > before
151 $ hg merge 'desc("modify dir1/a")'
151 $ hg merge 'desc("modify dir1/a")'
152 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
152 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
153 (branch merge, don't forget to commit)
153 (branch merge, don't forget to commit)
154 $ hg revert -r 'desc("modify dir2/a")' .
154 $ hg revert -r 'desc("modify dir2/a")' .
155 reverting dir1/a
155 reverting dir1/a
156 $ hg ci -m 'merge, keeping parent 1'
156 $ hg ci -m 'merge, keeping parent 1'
157 $ hg debugindex --dir dir2 > after
157 $ hg debugindex --dir dir2 > after
158 $ diff before after
158 $ diff before after
159 $ rm before after
159 $ rm before after
160
160
161 Merge keeping directory from parent 2 does not create revlog entry. (Note that
161 Merge keeping directory from parent 2 does not create revlog entry. (Note that
162 dir2's manifest does change, but only because dir2/a's filelog changes.)
162 dir2's manifest does change, but only because dir2/a's filelog changes.)
163
163
164 $ hg co 'desc("modify dir2/a")'
164 $ hg co 'desc("modify dir2/a")'
165 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
165 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
166 $ hg debugindex --dir dir1 > before
166 $ hg debugindex --dir dir1 > before
167 $ hg merge 'desc("modify dir1/a")'
167 $ hg merge 'desc("modify dir1/a")'
168 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
168 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
169 (branch merge, don't forget to commit)
169 (branch merge, don't forget to commit)
170 $ hg revert -r 'desc("modify dir1/a")' .
170 $ hg revert -r 'desc("modify dir1/a")' .
171 reverting dir2/a
171 reverting dir2/a
172 $ hg ci -m 'merge, keeping parent 2'
172 $ hg ci -m 'merge, keeping parent 2'
173 created new head
173 created new head
174 $ hg debugindex --dir dir1 > after
174 $ hg debugindex --dir dir1 > after
175 $ diff before after
175 $ diff before after
176 $ rm before after
176 $ rm before after
177
177
178 Create flat source repo for tests with mixed flat/tree manifests
178 Create flat source repo for tests with mixed flat/tree manifests
179
179
180 $ cd ..
180 $ cd ..
181 $ hg init repo-flat
181 $ hg init repo-flat
182 $ cd repo-flat
182 $ cd repo-flat
183
183
184 Create a few commits with flat manifest
184 Create a few commits with flat manifest
185
185
186 $ echo 0 > a
186 $ echo 0 > a
187 $ echo 0 > b
187 $ echo 0 > b
188 $ echo 0 > e
188 $ echo 0 > e
189 $ for d in dir1 dir1/dir1 dir1/dir2 dir2
189 $ for d in dir1 dir1/dir1 dir1/dir2 dir2
190 > do
190 > do
191 > mkdir $d
191 > mkdir $d
192 > echo 0 > $d/a
192 > echo 0 > $d/a
193 > echo 0 > $d/b
193 > echo 0 > $d/b
194 > done
194 > done
195 $ hg ci -Aqm initial
195 $ hg ci -Aqm initial
196
196
197 $ echo 1 > a
197 $ echo 1 > a
198 $ echo 1 > dir1/a
198 $ echo 1 > dir1/a
199 $ echo 1 > dir1/dir1/a
199 $ echo 1 > dir1/dir1/a
200 $ hg ci -Aqm 'modify on branch 1'
200 $ hg ci -Aqm 'modify on branch 1'
201
201
202 $ hg co 0
202 $ hg co 0
203 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
203 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
204 $ echo 2 > b
204 $ echo 2 > b
205 $ echo 2 > dir1/b
205 $ echo 2 > dir1/b
206 $ echo 2 > dir1/dir1/b
206 $ echo 2 > dir1/dir1/b
207 $ hg ci -Aqm 'modify on branch 2'
207 $ hg ci -Aqm 'modify on branch 2'
208
208
209 $ hg merge 1
209 $ hg merge 1
210 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
210 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
211 (branch merge, don't forget to commit)
211 (branch merge, don't forget to commit)
212 $ hg ci -m 'merge of flat manifests to new flat manifest'
212 $ hg ci -m 'merge of flat manifests to new flat manifest'
213
213
214 $ hg serve -p $HGPORT -d --pid-file=hg.pid --errorlog=errors.log
214 $ hg serve -p $HGPORT -d --pid-file=hg.pid --errorlog=errors.log
215 $ cat hg.pid >> $DAEMON_PIDS
215 $ cat hg.pid >> $DAEMON_PIDS
216
216
217 Create clone with tree manifests enabled
217 Create clone with tree manifests enabled
218
218
219 $ cd ..
219 $ cd ..
220 $ hg clone --config experimental.treemanifest=1 \
220 $ hg clone --config experimental.treemanifest=1 \
221 > http://localhost:$HGPORT repo-mixed -r 1
221 > http://localhost:$HGPORT repo-mixed -r 1
222 adding changesets
222 adding changesets
223 adding manifests
223 adding manifests
224 adding file changes
224 adding file changes
225 added 2 changesets with 14 changes to 11 files
225 added 2 changesets with 14 changes to 11 files
226 new changesets 5b02a3e8db7e:581ef6037d8b
226 new changesets 5b02a3e8db7e:581ef6037d8b
227 updating to branch default
227 updating to branch default
228 11 files updated, 0 files merged, 0 files removed, 0 files unresolved
228 11 files updated, 0 files merged, 0 files removed, 0 files unresolved
229 $ cd repo-mixed
229 $ cd repo-mixed
230 $ test -d .hg/store/meta
230 $ test -d .hg/store/meta
231 [1]
231 [1]
232 $ hg debugrequires | grep treemanifest
232 $ hg debugrequires | grep treemanifest
233 treemanifest
233 treemanifest
234
234
235 Should be possible to push updates from flat to tree manifest repo
235 Should be possible to push updates from flat to tree manifest repo
236
236
237 $ hg -R ../repo-flat push ssh://user@dummy/repo-mixed
237 $ hg -R ../repo-flat push ssh://user@dummy/repo-mixed
238 pushing to ssh://user@dummy/repo-mixed
238 pushing to ssh://user@dummy/repo-mixed
239 searching for changes
239 searching for changes
240 remote: adding changesets
240 remote: adding changesets
241 remote: adding manifests
241 remote: adding manifests
242 remote: adding file changes
242 remote: adding file changes
243 remote: added 2 changesets with 3 changes to 3 files
243 remote: added 2 changesets with 3 changes to 3 files
244
244
245 Commit should store revlog per directory
245 Commit should store revlog per directory
246
246
247 $ hg co 1
247 $ hg co 1
248 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
248 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
249 $ echo 3 > a
249 $ echo 3 > a
250 $ echo 3 > dir1/a
250 $ echo 3 > dir1/a
251 $ echo 3 > dir1/dir1/a
251 $ echo 3 > dir1/dir1/a
252 $ hg ci -m 'first tree'
252 $ hg ci -m 'first tree'
253 created new head
253 created new head
254 $ find .hg/store/meta | sort
254 $ find .hg/store/meta | sort
255 .hg/store/meta
255 .hg/store/meta
256 .hg/store/meta/dir1
256 .hg/store/meta/dir1
257 .hg/store/meta/dir1/00manifest.i
257 .hg/store/meta/dir1/00manifest.i
258 .hg/store/meta/dir1/dir1
258 .hg/store/meta/dir1/dir1
259 .hg/store/meta/dir1/dir1/00manifest.i
259 .hg/store/meta/dir1/dir1/00manifest.i
260 .hg/store/meta/dir1/dir2
260 .hg/store/meta/dir1/dir2
261 .hg/store/meta/dir1/dir2/00manifest.i
261 .hg/store/meta/dir1/dir2/00manifest.i
262 .hg/store/meta/dir2
262 .hg/store/meta/dir2
263 .hg/store/meta/dir2/00manifest.i
263 .hg/store/meta/dir2/00manifest.i
264
264
265 Merge of two trees
265 Merge of two trees
266
266
267 $ hg co 2
267 $ hg co 2
268 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
268 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
269 $ hg merge 1
269 $ hg merge 1
270 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
270 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
271 (branch merge, don't forget to commit)
271 (branch merge, don't forget to commit)
272 $ hg ci -m 'merge of flat manifests to new tree manifest'
272 $ hg ci -m 'merge of flat manifests to new tree manifest'
273 created new head
273 created new head
274 $ hg diff -r 3
274 $ hg diff -r 3
275
275
276 Parent of tree root manifest should be flat manifest, and two for merge
276 Parent of tree root manifest should be flat manifest, and two for merge
277
277
278 $ hg debugindex -m
278 $ hg debugindex -m
279 rev linkrev nodeid p1 p2
279 rev linkrev nodeid p1-nodeid p2-nodeid
280 0 0 40536115ed9e 000000000000 000000000000
280 0 0 40536115ed9e 000000000000 000000000000
281 1 1 f3376063c255 40536115ed9e 000000000000
281 1 1 f3376063c255 40536115ed9e 000000000000
282 2 2 5d9b9da231a2 40536115ed9e 000000000000
282 2 2 5d9b9da231a2 40536115ed9e 000000000000
283 3 3 d17d663cbd8a 5d9b9da231a2 f3376063c255
283 3 3 d17d663cbd8a 5d9b9da231a2 f3376063c255
284 4 4 51e32a8c60ee f3376063c255 000000000000
284 4 4 51e32a8c60ee f3376063c255 000000000000
285 5 5 cc5baa78b230 5d9b9da231a2 f3376063c255
285 5 5 cc5baa78b230 5d9b9da231a2 f3376063c255
286
286
287
287
288 Status across flat/tree boundary should work
288 Status across flat/tree boundary should work
289
289
290 $ hg status --rev '.^' --rev .
290 $ hg status --rev '.^' --rev .
291 M a
291 M a
292 M dir1/a
292 M dir1/a
293 M dir1/dir1/a
293 M dir1/dir1/a
294
294
295
295
296 Turning off treemanifest config has no effect
296 Turning off treemanifest config has no effect
297
297
298 $ hg debugindex --dir dir1
298 $ hg debugindex --dir dir1
299 rev linkrev nodeid p1 p2
299 rev linkrev nodeid p1-nodeid p2-nodeid
300 0 4 064927a0648a 000000000000 000000000000
300 0 4 064927a0648a 000000000000 000000000000
301 1 5 25ecb8cb8618 000000000000 000000000000
301 1 5 25ecb8cb8618 000000000000 000000000000
302 $ echo 2 > dir1/a
302 $ echo 2 > dir1/a
303 $ hg --config experimental.treemanifest=False ci -qm 'modify dir1/a'
303 $ hg --config experimental.treemanifest=False ci -qm 'modify dir1/a'
304 $ hg debugindex --dir dir1
304 $ hg debugindex --dir dir1
305 rev linkrev nodeid p1 p2
305 rev linkrev nodeid p1-nodeid p2-nodeid
306 0 4 064927a0648a 000000000000 000000000000
306 0 4 064927a0648a 000000000000 000000000000
307 1 5 25ecb8cb8618 000000000000 000000000000
307 1 5 25ecb8cb8618 000000000000 000000000000
308 2 6 5b16163a30c6 25ecb8cb8618 000000000000
308 2 6 5b16163a30c6 25ecb8cb8618 000000000000
309
309
310 Stripping and recovering changes should work
310 Stripping and recovering changes should work
311
311
312 $ hg st --change tip
312 $ hg st --change tip
313 M dir1/a
313 M dir1/a
314 $ hg --config extensions.strip= strip tip
314 $ hg --config extensions.strip= strip tip
315 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
315 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
316 saved backup bundle to $TESTTMP/repo-mixed/.hg/strip-backup/51cfd7b1e13b-78a2f3ed-backup.hg
316 saved backup bundle to $TESTTMP/repo-mixed/.hg/strip-backup/51cfd7b1e13b-78a2f3ed-backup.hg
317 $ hg debugindex --dir dir1
317 $ hg debugindex --dir dir1
318 rev linkrev nodeid p1 p2
318 rev linkrev nodeid p1-nodeid p2-nodeid
319 0 4 064927a0648a 000000000000 000000000000
319 0 4 064927a0648a 000000000000 000000000000
320 1 5 25ecb8cb8618 000000000000 000000000000
320 1 5 25ecb8cb8618 000000000000 000000000000
321
321
322 #if repobundlerepo
322 #if repobundlerepo
323 $ hg incoming .hg/strip-backup/*
323 $ hg incoming .hg/strip-backup/*
324 comparing with .hg/strip-backup/*-backup.hg (glob)
324 comparing with .hg/strip-backup/*-backup.hg (glob)
325 searching for changes
325 searching for changes
326 changeset: 6:51cfd7b1e13b
326 changeset: 6:51cfd7b1e13b
327 tag: tip
327 tag: tip
328 user: test
328 user: test
329 date: Thu Jan 01 00:00:00 1970 +0000
329 date: Thu Jan 01 00:00:00 1970 +0000
330 summary: modify dir1/a
330 summary: modify dir1/a
331
331
332 #endif
332 #endif
333
333
334 $ hg unbundle .hg/strip-backup/*
334 $ hg unbundle .hg/strip-backup/*
335 adding changesets
335 adding changesets
336 adding manifests
336 adding manifests
337 adding file changes
337 adding file changes
338 added 1 changesets with 1 changes to 1 files
338 added 1 changesets with 1 changes to 1 files
339 new changesets 51cfd7b1e13b (1 drafts)
339 new changesets 51cfd7b1e13b (1 drafts)
340 (run 'hg update' to get a working copy)
340 (run 'hg update' to get a working copy)
341 $ hg --config extensions.strip= strip tip
341 $ hg --config extensions.strip= strip tip
342 saved backup bundle to $TESTTMP/repo-mixed/.hg/strip-backup/*-backup.hg (glob)
342 saved backup bundle to $TESTTMP/repo-mixed/.hg/strip-backup/*-backup.hg (glob)
343 $ hg unbundle -q .hg/strip-backup/*
343 $ hg unbundle -q .hg/strip-backup/*
344 $ hg debugindex --dir dir1
344 $ hg debugindex --dir dir1
345 rev linkrev nodeid p1 p2
345 rev linkrev nodeid p1-nodeid p2-nodeid
346 0 4 064927a0648a 000000000000 000000000000
346 0 4 064927a0648a 000000000000 000000000000
347 1 5 25ecb8cb8618 000000000000 000000000000
347 1 5 25ecb8cb8618 000000000000 000000000000
348 2 6 5b16163a30c6 25ecb8cb8618 000000000000
348 2 6 5b16163a30c6 25ecb8cb8618 000000000000
349 $ hg st --change tip
349 $ hg st --change tip
350 M dir1/a
350 M dir1/a
351
351
352 Shelving and unshelving should work
352 Shelving and unshelving should work
353
353
354 $ echo foo >> dir1/a
354 $ echo foo >> dir1/a
355 $ hg shelve
355 $ hg shelve
356 shelved as default
356 shelved as default
357 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
357 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
358 $ hg unshelve
358 $ hg unshelve
359 unshelving change 'default'
359 unshelving change 'default'
360 $ hg diff --nodates
360 $ hg diff --nodates
361 diff -r 708a273da119 dir1/a
361 diff -r 708a273da119 dir1/a
362 --- a/dir1/a
362 --- a/dir1/a
363 +++ b/dir1/a
363 +++ b/dir1/a
364 @@ -1,1 +1,2 @@
364 @@ -1,1 +1,2 @@
365 1
365 1
366 +foo
366 +foo
367
367
368 Pushing from treemanifest repo to an empty repo makes that a treemanifest repo
368 Pushing from treemanifest repo to an empty repo makes that a treemanifest repo
369
369
370 $ cd ..
370 $ cd ..
371 $ hg init empty-repo
371 $ hg init empty-repo
372 $ cat << EOF >> empty-repo/.hg/hgrc
372 $ cat << EOF >> empty-repo/.hg/hgrc
373 > [experimental]
373 > [experimental]
374 > changegroup3=yes
374 > changegroup3=yes
375 > EOF
375 > EOF
376 $ hg debugrequires -R empty-repo | grep treemanifest
376 $ hg debugrequires -R empty-repo | grep treemanifest
377 [1]
377 [1]
378 $ hg push -R repo -r 0 empty-repo
378 $ hg push -R repo -r 0 empty-repo
379 pushing to empty-repo
379 pushing to empty-repo
380 searching for changes
380 searching for changes
381 adding changesets
381 adding changesets
382 adding manifests
382 adding manifests
383 adding file changes
383 adding file changes
384 added 1 changesets with 2 changes to 2 files
384 added 1 changesets with 2 changes to 2 files
385 $ hg debugrequires -R empty-repo | grep treemanifest
385 $ hg debugrequires -R empty-repo | grep treemanifest
386 treemanifest
386 treemanifest
387
387
388 Pushing to an empty repo works
388 Pushing to an empty repo works
389
389
390 $ hg --config experimental.treemanifest=1 init clone
390 $ hg --config experimental.treemanifest=1 init clone
391 $ hg debugrequires -R clone | grep treemanifest
391 $ hg debugrequires -R clone | grep treemanifest
392 treemanifest
392 treemanifest
393 $ hg push -R repo clone
393 $ hg push -R repo clone
394 pushing to clone
394 pushing to clone
395 searching for changes
395 searching for changes
396 adding changesets
396 adding changesets
397 adding manifests
397 adding manifests
398 adding file changes
398 adding file changes
399 added 11 changesets with 15 changes to 10 files (+3 heads)
399 added 11 changesets with 15 changes to 10 files (+3 heads)
400 $ hg debugrequires -R clone | grep treemanifest
400 $ hg debugrequires -R clone | grep treemanifest
401 treemanifest
401 treemanifest
402 $ hg -R clone verify
402 $ hg -R clone verify
403 checking changesets
403 checking changesets
404 checking manifests
404 checking manifests
405 checking directory manifests
405 checking directory manifests
406 crosschecking files in changesets and manifests
406 crosschecking files in changesets and manifests
407 checking files
407 checking files
408 checked 11 changesets with 15 changes to 10 files
408 checked 11 changesets with 15 changes to 10 files
409
409
410 Create deeper repo with tree manifests.
410 Create deeper repo with tree manifests.
411
411
412 $ hg --config experimental.treemanifest=True init deeprepo
412 $ hg --config experimental.treemanifest=True init deeprepo
413 $ cd deeprepo
413 $ cd deeprepo
414
414
415 $ mkdir .A
415 $ mkdir .A
416 $ mkdir b
416 $ mkdir b
417 $ mkdir b/bar
417 $ mkdir b/bar
418 $ mkdir b/bar/orange
418 $ mkdir b/bar/orange
419 $ mkdir b/bar/orange/fly
419 $ mkdir b/bar/orange/fly
420 $ mkdir b/foo
420 $ mkdir b/foo
421 $ mkdir b/foo/apple
421 $ mkdir b/foo/apple
422 $ mkdir b/foo/apple/bees
422 $ mkdir b/foo/apple/bees
423
423
424 $ touch .A/one.txt
424 $ touch .A/one.txt
425 $ touch .A/two.txt
425 $ touch .A/two.txt
426 $ touch b/bar/fruits.txt
426 $ touch b/bar/fruits.txt
427 $ touch b/bar/orange/fly/gnat.py
427 $ touch b/bar/orange/fly/gnat.py
428 $ touch b/bar/orange/fly/housefly.txt
428 $ touch b/bar/orange/fly/housefly.txt
429 $ touch b/foo/apple/bees/flower.py
429 $ touch b/foo/apple/bees/flower.py
430 $ touch c.txt
430 $ touch c.txt
431 $ touch d.py
431 $ touch d.py
432
432
433 $ hg ci -Aqm 'initial'
433 $ hg ci -Aqm 'initial'
434
434
435 $ echo >> .A/one.txt
435 $ echo >> .A/one.txt
436 $ echo >> .A/two.txt
436 $ echo >> .A/two.txt
437 $ echo >> b/bar/fruits.txt
437 $ echo >> b/bar/fruits.txt
438 $ echo >> b/bar/orange/fly/gnat.py
438 $ echo >> b/bar/orange/fly/gnat.py
439 $ echo >> b/bar/orange/fly/housefly.txt
439 $ echo >> b/bar/orange/fly/housefly.txt
440 $ echo >> b/foo/apple/bees/flower.py
440 $ echo >> b/foo/apple/bees/flower.py
441 $ echo >> c.txt
441 $ echo >> c.txt
442 $ echo >> d.py
442 $ echo >> d.py
443 $ hg ci -Aqm 'second'
443 $ hg ci -Aqm 'second'
444
444
445 We'll see that visitdir works by removing some treemanifest revlogs and running
445 We'll see that visitdir works by removing some treemanifest revlogs and running
446 the files command with various parameters.
446 the files command with various parameters.
447
447
448 Test files from the root.
448 Test files from the root.
449
449
450 $ hg files -r .
450 $ hg files -r .
451 .A/one.txt
451 .A/one.txt
452 .A/two.txt
452 .A/two.txt
453 b/bar/fruits.txt
453 b/bar/fruits.txt
454 b/bar/orange/fly/gnat.py
454 b/bar/orange/fly/gnat.py
455 b/bar/orange/fly/housefly.txt
455 b/bar/orange/fly/housefly.txt
456 b/foo/apple/bees/flower.py
456 b/foo/apple/bees/flower.py
457 c.txt
457 c.txt
458 d.py
458 d.py
459
459
460 Excludes with a glob should not exclude everything from the glob's root
460 Excludes with a glob should not exclude everything from the glob's root
461
461
462 $ hg files -r . -X 'b/fo?' b
462 $ hg files -r . -X 'b/fo?' b
463 b/bar/fruits.txt
463 b/bar/fruits.txt
464 b/bar/orange/fly/gnat.py
464 b/bar/orange/fly/gnat.py
465 b/bar/orange/fly/housefly.txt
465 b/bar/orange/fly/housefly.txt
466 $ cp -R .hg/store .hg/store-copy
466 $ cp -R .hg/store .hg/store-copy
467
467
468 Test files for a subdirectory.
468 Test files for a subdirectory.
469
469
470 #if reporevlogstore
470 #if reporevlogstore
471 $ rm -r .hg/store/meta/~2e_a
471 $ rm -r .hg/store/meta/~2e_a
472 #endif
472 #endif
473 #if reposimplestore
473 #if reposimplestore
474 $ rm -r .hg/store/meta/._a
474 $ rm -r .hg/store/meta/._a
475 #endif
475 #endif
476 $ hg files -r . b
476 $ hg files -r . b
477 b/bar/fruits.txt
477 b/bar/fruits.txt
478 b/bar/orange/fly/gnat.py
478 b/bar/orange/fly/gnat.py
479 b/bar/orange/fly/housefly.txt
479 b/bar/orange/fly/housefly.txt
480 b/foo/apple/bees/flower.py
480 b/foo/apple/bees/flower.py
481 $ hg diff -r '.^' -r . --stat b
481 $ hg diff -r '.^' -r . --stat b
482 b/bar/fruits.txt | 1 +
482 b/bar/fruits.txt | 1 +
483 b/bar/orange/fly/gnat.py | 1 +
483 b/bar/orange/fly/gnat.py | 1 +
484 b/bar/orange/fly/housefly.txt | 1 +
484 b/bar/orange/fly/housefly.txt | 1 +
485 b/foo/apple/bees/flower.py | 1 +
485 b/foo/apple/bees/flower.py | 1 +
486 4 files changed, 4 insertions(+), 0 deletions(-)
486 4 files changed, 4 insertions(+), 0 deletions(-)
487 $ cp -R .hg/store-copy/. .hg/store
487 $ cp -R .hg/store-copy/. .hg/store
488
488
489 Test files with just includes and excludes.
489 Test files with just includes and excludes.
490
490
491 #if reporevlogstore
491 #if reporevlogstore
492 $ rm -r .hg/store/meta/~2e_a
492 $ rm -r .hg/store/meta/~2e_a
493 #endif
493 #endif
494 #if reposimplestore
494 #if reposimplestore
495 $ rm -r .hg/store/meta/._a
495 $ rm -r .hg/store/meta/._a
496 #endif
496 #endif
497 $ rm -r .hg/store/meta/b/bar/orange/fly
497 $ rm -r .hg/store/meta/b/bar/orange/fly
498 $ rm -r .hg/store/meta/b/foo/apple/bees
498 $ rm -r .hg/store/meta/b/foo/apple/bees
499 $ hg files -r . -I path:b/bar -X path:b/bar/orange/fly -I path:b/foo -X path:b/foo/apple/bees
499 $ hg files -r . -I path:b/bar -X path:b/bar/orange/fly -I path:b/foo -X path:b/foo/apple/bees
500 b/bar/fruits.txt
500 b/bar/fruits.txt
501 $ hg diff -r '.^' -r . --stat -I path:b/bar -X path:b/bar/orange/fly -I path:b/foo -X path:b/foo/apple/bees
501 $ hg diff -r '.^' -r . --stat -I path:b/bar -X path:b/bar/orange/fly -I path:b/foo -X path:b/foo/apple/bees
502 b/bar/fruits.txt | 1 +
502 b/bar/fruits.txt | 1 +
503 1 files changed, 1 insertions(+), 0 deletions(-)
503 1 files changed, 1 insertions(+), 0 deletions(-)
504 $ cp -R .hg/store-copy/. .hg/store
504 $ cp -R .hg/store-copy/. .hg/store
505
505
506 Test files for a subdirectory, excluding a directory within it.
506 Test files for a subdirectory, excluding a directory within it.
507
507
508 #if reporevlogstore
508 #if reporevlogstore
509 $ rm -r .hg/store/meta/~2e_a
509 $ rm -r .hg/store/meta/~2e_a
510 #endif
510 #endif
511 #if reposimplestore
511 #if reposimplestore
512 $ rm -r .hg/store/meta/._a
512 $ rm -r .hg/store/meta/._a
513 #endif
513 #endif
514 $ rm -r .hg/store/meta/b/foo
514 $ rm -r .hg/store/meta/b/foo
515 $ hg files -r . -X path:b/foo b
515 $ hg files -r . -X path:b/foo b
516 b/bar/fruits.txt
516 b/bar/fruits.txt
517 b/bar/orange/fly/gnat.py
517 b/bar/orange/fly/gnat.py
518 b/bar/orange/fly/housefly.txt
518 b/bar/orange/fly/housefly.txt
519 $ hg diff -r '.^' -r . --stat -X path:b/foo b
519 $ hg diff -r '.^' -r . --stat -X path:b/foo b
520 b/bar/fruits.txt | 1 +
520 b/bar/fruits.txt | 1 +
521 b/bar/orange/fly/gnat.py | 1 +
521 b/bar/orange/fly/gnat.py | 1 +
522 b/bar/orange/fly/housefly.txt | 1 +
522 b/bar/orange/fly/housefly.txt | 1 +
523 3 files changed, 3 insertions(+), 0 deletions(-)
523 3 files changed, 3 insertions(+), 0 deletions(-)
524 $ cp -R .hg/store-copy/. .hg/store
524 $ cp -R .hg/store-copy/. .hg/store
525
525
526 Test files for a sub directory, including only a directory within it, and
526 Test files for a sub directory, including only a directory within it, and
527 including an unrelated directory.
527 including an unrelated directory.
528
528
529 #if reporevlogstore
529 #if reporevlogstore
530 $ rm -r .hg/store/meta/~2e_a
530 $ rm -r .hg/store/meta/~2e_a
531 #endif
531 #endif
532 #if reposimplestore
532 #if reposimplestore
533 $ rm -r .hg/store/meta/._a
533 $ rm -r .hg/store/meta/._a
534 #endif
534 #endif
535 $ rm -r .hg/store/meta/b/foo
535 $ rm -r .hg/store/meta/b/foo
536 $ hg files -r . -I path:b/bar/orange -I path:a b
536 $ hg files -r . -I path:b/bar/orange -I path:a b
537 b/bar/orange/fly/gnat.py
537 b/bar/orange/fly/gnat.py
538 b/bar/orange/fly/housefly.txt
538 b/bar/orange/fly/housefly.txt
539 $ hg diff -r '.^' -r . --stat -I path:b/bar/orange -I path:a b
539 $ hg diff -r '.^' -r . --stat -I path:b/bar/orange -I path:a b
540 b/bar/orange/fly/gnat.py | 1 +
540 b/bar/orange/fly/gnat.py | 1 +
541 b/bar/orange/fly/housefly.txt | 1 +
541 b/bar/orange/fly/housefly.txt | 1 +
542 2 files changed, 2 insertions(+), 0 deletions(-)
542 2 files changed, 2 insertions(+), 0 deletions(-)
543 $ cp -R .hg/store-copy/. .hg/store
543 $ cp -R .hg/store-copy/. .hg/store
544
544
545 Test files for a pattern, including a directory, and excluding a directory
545 Test files for a pattern, including a directory, and excluding a directory
546 within that.
546 within that.
547
547
548 #if reporevlogstore
548 #if reporevlogstore
549 $ rm -r .hg/store/meta/~2e_a
549 $ rm -r .hg/store/meta/~2e_a
550 #endif
550 #endif
551 #if reposimplestore
551 #if reposimplestore
552 $ rm -r .hg/store/meta/._a
552 $ rm -r .hg/store/meta/._a
553 #endif
553 #endif
554 $ rm -r .hg/store/meta/b/foo
554 $ rm -r .hg/store/meta/b/foo
555 $ rm -r .hg/store/meta/b/bar/orange
555 $ rm -r .hg/store/meta/b/bar/orange
556 $ hg files -r . glob:**.txt -I path:b/bar -X path:b/bar/orange
556 $ hg files -r . glob:**.txt -I path:b/bar -X path:b/bar/orange
557 b/bar/fruits.txt
557 b/bar/fruits.txt
558 $ hg diff -r '.^' -r . --stat glob:**.txt -I path:b/bar -X path:b/bar/orange
558 $ hg diff -r '.^' -r . --stat glob:**.txt -I path:b/bar -X path:b/bar/orange
559 b/bar/fruits.txt | 1 +
559 b/bar/fruits.txt | 1 +
560 1 files changed, 1 insertions(+), 0 deletions(-)
560 1 files changed, 1 insertions(+), 0 deletions(-)
561 $ cp -R .hg/store-copy/. .hg/store
561 $ cp -R .hg/store-copy/. .hg/store
562
562
563 Add some more changes to the deep repo
563 Add some more changes to the deep repo
564 $ echo narf >> b/bar/fruits.txt
564 $ echo narf >> b/bar/fruits.txt
565 $ hg ci -m narf
565 $ hg ci -m narf
566 $ echo troz >> b/bar/orange/fly/gnat.py
566 $ echo troz >> b/bar/orange/fly/gnat.py
567 $ hg ci -m troz
567 $ hg ci -m troz
568
568
569 Verify works
569 Verify works
570 $ hg verify
570 $ hg verify
571 checking changesets
571 checking changesets
572 checking manifests
572 checking manifests
573 checking directory manifests
573 checking directory manifests
574 crosschecking files in changesets and manifests
574 crosschecking files in changesets and manifests
575 checking files
575 checking files
576 checked 4 changesets with 18 changes to 8 files
576 checked 4 changesets with 18 changes to 8 files
577
577
578 #if repofncache
578 #if repofncache
579 Dirlogs are included in fncache
579 Dirlogs are included in fncache
580 $ grep meta/.A/00manifest.i .hg/store/fncache
580 $ grep meta/.A/00manifest.i .hg/store/fncache
581 meta/.A/00manifest.i
581 meta/.A/00manifest.i
582
582
583 Rebuilt fncache includes dirlogs
583 Rebuilt fncache includes dirlogs
584 $ rm .hg/store/fncache
584 $ rm .hg/store/fncache
585 $ hg debugrebuildfncache
585 $ hg debugrebuildfncache
586 adding data/.A/one.txt.i
586 adding data/.A/one.txt.i
587 adding data/.A/two.txt.i
587 adding data/.A/two.txt.i
588 adding data/b/bar/fruits.txt.i
588 adding data/b/bar/fruits.txt.i
589 adding data/b/bar/orange/fly/gnat.py.i
589 adding data/b/bar/orange/fly/gnat.py.i
590 adding data/b/bar/orange/fly/housefly.txt.i
590 adding data/b/bar/orange/fly/housefly.txt.i
591 adding data/b/foo/apple/bees/flower.py.i
591 adding data/b/foo/apple/bees/flower.py.i
592 adding data/c.txt.i
592 adding data/c.txt.i
593 adding data/d.py.i
593 adding data/d.py.i
594 adding meta/.A/00manifest.i
594 adding meta/.A/00manifest.i
595 adding meta/b/00manifest.i
595 adding meta/b/00manifest.i
596 adding meta/b/bar/00manifest.i
596 adding meta/b/bar/00manifest.i
597 adding meta/b/bar/orange/00manifest.i
597 adding meta/b/bar/orange/00manifest.i
598 adding meta/b/bar/orange/fly/00manifest.i
598 adding meta/b/bar/orange/fly/00manifest.i
599 adding meta/b/foo/00manifest.i
599 adding meta/b/foo/00manifest.i
600 adding meta/b/foo/apple/00manifest.i
600 adding meta/b/foo/apple/00manifest.i
601 adding meta/b/foo/apple/bees/00manifest.i
601 adding meta/b/foo/apple/bees/00manifest.i
602 16 items added, 0 removed from fncache
602 16 items added, 0 removed from fncache
603 #endif
603 #endif
604
604
605 Finish first server
605 Finish first server
606 $ killdaemons.py
606 $ killdaemons.py
607
607
608 Back up the recently added revlogs
608 Back up the recently added revlogs
609 $ cp -R .hg/store .hg/store-newcopy
609 $ cp -R .hg/store .hg/store-newcopy
610
610
611 Verify reports missing dirlog
611 Verify reports missing dirlog
612 $ rm .hg/store/meta/b/00manifest.*
612 $ rm .hg/store/meta/b/00manifest.*
613 $ hg verify
613 $ hg verify
614 checking changesets
614 checking changesets
615 checking manifests
615 checking manifests
616 checking directory manifests
616 checking directory manifests
617 0: empty or missing b/
617 0: empty or missing b/
618 b/@0: parent-directory manifest refers to unknown revision 67688a370455
618 b/@0: parent-directory manifest refers to unknown revision 67688a370455
619 b/@1: parent-directory manifest refers to unknown revision f065da70369e
619 b/@1: parent-directory manifest refers to unknown revision f065da70369e
620 b/@2: parent-directory manifest refers to unknown revision ac0d30948e0b
620 b/@2: parent-directory manifest refers to unknown revision ac0d30948e0b
621 b/@3: parent-directory manifest refers to unknown revision 367152e6af28
621 b/@3: parent-directory manifest refers to unknown revision 367152e6af28
622 warning: orphan data file 'meta/b/bar/00manifest.i' (reporevlogstore !)
622 warning: orphan data file 'meta/b/bar/00manifest.i' (reporevlogstore !)
623 warning: orphan data file 'meta/b/bar/orange/00manifest.i' (reporevlogstore !)
623 warning: orphan data file 'meta/b/bar/orange/00manifest.i' (reporevlogstore !)
624 warning: orphan data file 'meta/b/bar/orange/fly/00manifest.i' (reporevlogstore !)
624 warning: orphan data file 'meta/b/bar/orange/fly/00manifest.i' (reporevlogstore !)
625 warning: orphan data file 'meta/b/foo/00manifest.i' (reporevlogstore !)
625 warning: orphan data file 'meta/b/foo/00manifest.i' (reporevlogstore !)
626 warning: orphan data file 'meta/b/foo/apple/00manifest.i' (reporevlogstore !)
626 warning: orphan data file 'meta/b/foo/apple/00manifest.i' (reporevlogstore !)
627 warning: orphan data file 'meta/b/foo/apple/bees/00manifest.i' (reporevlogstore !)
627 warning: orphan data file 'meta/b/foo/apple/bees/00manifest.i' (reporevlogstore !)
628 crosschecking files in changesets and manifests
628 crosschecking files in changesets and manifests
629 b/bar/fruits.txt@0: in changeset but not in manifest
629 b/bar/fruits.txt@0: in changeset but not in manifest
630 b/bar/orange/fly/gnat.py@0: in changeset but not in manifest
630 b/bar/orange/fly/gnat.py@0: in changeset but not in manifest
631 b/bar/orange/fly/housefly.txt@0: in changeset but not in manifest
631 b/bar/orange/fly/housefly.txt@0: in changeset but not in manifest
632 b/foo/apple/bees/flower.py@0: in changeset but not in manifest
632 b/foo/apple/bees/flower.py@0: in changeset but not in manifest
633 checking files
633 checking files
634 checked 4 changesets with 18 changes to 8 files
634 checked 4 changesets with 18 changes to 8 files
635 6 warnings encountered! (reporevlogstore !)
635 6 warnings encountered! (reporevlogstore !)
636 9 integrity errors encountered!
636 9 integrity errors encountered!
637 (first damaged changeset appears to be 0)
637 (first damaged changeset appears to be 0)
638 [1]
638 [1]
639 $ cp -R .hg/store-newcopy/. .hg/store
639 $ cp -R .hg/store-newcopy/. .hg/store
640
640
641 Verify reports missing dirlog entry
641 Verify reports missing dirlog entry
642 $ mv -f .hg/store-copy/meta/b/00manifest.* .hg/store/meta/b/
642 $ mv -f .hg/store-copy/meta/b/00manifest.* .hg/store/meta/b/
643 $ hg verify
643 $ hg verify
644 checking changesets
644 checking changesets
645 checking manifests
645 checking manifests
646 checking directory manifests
646 checking directory manifests
647 b/@2: parent-directory manifest refers to unknown revision ac0d30948e0b
647 b/@2: parent-directory manifest refers to unknown revision ac0d30948e0b
648 b/@3: parent-directory manifest refers to unknown revision 367152e6af28
648 b/@3: parent-directory manifest refers to unknown revision 367152e6af28
649 b/bar/@?: rev 2 points to unexpected changeset 2
649 b/bar/@?: rev 2 points to unexpected changeset 2
650 b/bar/@?: 44d7e1146e0d not in parent-directory manifest
650 b/bar/@?: 44d7e1146e0d not in parent-directory manifest
651 b/bar/@?: rev 3 points to unexpected changeset 3
651 b/bar/@?: rev 3 points to unexpected changeset 3
652 b/bar/@?: 70b10c6b17b7 not in parent-directory manifest
652 b/bar/@?: 70b10c6b17b7 not in parent-directory manifest
653 b/bar/orange/@?: rev 2 points to unexpected changeset 3
653 b/bar/orange/@?: rev 2 points to unexpected changeset 3
654 (expected None)
654 (expected None)
655 b/bar/orange/fly/@?: rev 2 points to unexpected changeset 3
655 b/bar/orange/fly/@?: rev 2 points to unexpected changeset 3
656 (expected None)
656 (expected None)
657 crosschecking files in changesets and manifests
657 crosschecking files in changesets and manifests
658 checking files
658 checking files
659 checked 4 changesets with 18 changes to 8 files
659 checked 4 changesets with 18 changes to 8 files
660 2 warnings encountered!
660 2 warnings encountered!
661 8 integrity errors encountered!
661 8 integrity errors encountered!
662 (first damaged changeset appears to be 2)
662 (first damaged changeset appears to be 2)
663 [1]
663 [1]
664 $ cp -R .hg/store-newcopy/. .hg/store
664 $ cp -R .hg/store-newcopy/. .hg/store
665
665
666 Test cloning a treemanifest repo over http.
666 Test cloning a treemanifest repo over http.
667 $ hg serve -p $HGPORT -d --pid-file=hg.pid --errorlog=errors.log
667 $ hg serve -p $HGPORT -d --pid-file=hg.pid --errorlog=errors.log
668 $ cat hg.pid >> $DAEMON_PIDS
668 $ cat hg.pid >> $DAEMON_PIDS
669 $ cd ..
669 $ cd ..
670 We can clone even with the knob turned off and we'll get a treemanifest repo.
670 We can clone even with the knob turned off and we'll get a treemanifest repo.
671 $ hg clone --config experimental.treemanifest=False \
671 $ hg clone --config experimental.treemanifest=False \
672 > --config experimental.changegroup3=True \
672 > --config experimental.changegroup3=True \
673 > http://localhost:$HGPORT deepclone
673 > http://localhost:$HGPORT deepclone
674 requesting all changes
674 requesting all changes
675 adding changesets
675 adding changesets
676 adding manifests
676 adding manifests
677 adding file changes
677 adding file changes
678 added 4 changesets with 18 changes to 8 files
678 added 4 changesets with 18 changes to 8 files
679 new changesets 775704be6f52:523e5c631710
679 new changesets 775704be6f52:523e5c631710
680 updating to branch default
680 updating to branch default
681 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
681 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
682 No server errors.
682 No server errors.
683 $ cat deeprepo/errors.log
683 $ cat deeprepo/errors.log
684 requires got updated to include treemanifest
684 requires got updated to include treemanifest
685 $ hg debugrequires -R deepclone | grep treemanifest
685 $ hg debugrequires -R deepclone | grep treemanifest
686 treemanifest
686 treemanifest
687 Tree manifest revlogs exist.
687 Tree manifest revlogs exist.
688 $ find deepclone/.hg/store/meta | sort
688 $ find deepclone/.hg/store/meta | sort
689 deepclone/.hg/store/meta
689 deepclone/.hg/store/meta
690 deepclone/.hg/store/meta/._a (reposimplestore !)
690 deepclone/.hg/store/meta/._a (reposimplestore !)
691 deepclone/.hg/store/meta/._a/00manifest.i (reposimplestore !)
691 deepclone/.hg/store/meta/._a/00manifest.i (reposimplestore !)
692 deepclone/.hg/store/meta/b
692 deepclone/.hg/store/meta/b
693 deepclone/.hg/store/meta/b/00manifest.i
693 deepclone/.hg/store/meta/b/00manifest.i
694 deepclone/.hg/store/meta/b/bar
694 deepclone/.hg/store/meta/b/bar
695 deepclone/.hg/store/meta/b/bar/00manifest.i
695 deepclone/.hg/store/meta/b/bar/00manifest.i
696 deepclone/.hg/store/meta/b/bar/orange
696 deepclone/.hg/store/meta/b/bar/orange
697 deepclone/.hg/store/meta/b/bar/orange/00manifest.i
697 deepclone/.hg/store/meta/b/bar/orange/00manifest.i
698 deepclone/.hg/store/meta/b/bar/orange/fly
698 deepclone/.hg/store/meta/b/bar/orange/fly
699 deepclone/.hg/store/meta/b/bar/orange/fly/00manifest.i
699 deepclone/.hg/store/meta/b/bar/orange/fly/00manifest.i
700 deepclone/.hg/store/meta/b/foo
700 deepclone/.hg/store/meta/b/foo
701 deepclone/.hg/store/meta/b/foo/00manifest.i
701 deepclone/.hg/store/meta/b/foo/00manifest.i
702 deepclone/.hg/store/meta/b/foo/apple
702 deepclone/.hg/store/meta/b/foo/apple
703 deepclone/.hg/store/meta/b/foo/apple/00manifest.i
703 deepclone/.hg/store/meta/b/foo/apple/00manifest.i
704 deepclone/.hg/store/meta/b/foo/apple/bees
704 deepclone/.hg/store/meta/b/foo/apple/bees
705 deepclone/.hg/store/meta/b/foo/apple/bees/00manifest.i
705 deepclone/.hg/store/meta/b/foo/apple/bees/00manifest.i
706 deepclone/.hg/store/meta/~2e_a (reporevlogstore !)
706 deepclone/.hg/store/meta/~2e_a (reporevlogstore !)
707 deepclone/.hg/store/meta/~2e_a/00manifest.i (reporevlogstore !)
707 deepclone/.hg/store/meta/~2e_a/00manifest.i (reporevlogstore !)
708 Verify passes.
708 Verify passes.
709 $ cd deepclone
709 $ cd deepclone
710 $ hg verify
710 $ hg verify
711 checking changesets
711 checking changesets
712 checking manifests
712 checking manifests
713 checking directory manifests
713 checking directory manifests
714 crosschecking files in changesets and manifests
714 crosschecking files in changesets and manifests
715 checking files
715 checking files
716 checked 4 changesets with 18 changes to 8 files
716 checked 4 changesets with 18 changes to 8 files
717 $ cd ..
717 $ cd ..
718
718
719 #if reporevlogstore
719 #if reporevlogstore
720 Create clones using old repo formats to use in later tests
720 Create clones using old repo formats to use in later tests
721 $ hg clone --config format.usestore=False \
721 $ hg clone --config format.usestore=False \
722 > --config experimental.changegroup3=True \
722 > --config experimental.changegroup3=True \
723 > http://localhost:$HGPORT deeprepo-basicstore
723 > http://localhost:$HGPORT deeprepo-basicstore
724 requesting all changes
724 requesting all changes
725 adding changesets
725 adding changesets
726 adding manifests
726 adding manifests
727 adding file changes
727 adding file changes
728 added 4 changesets with 18 changes to 8 files
728 added 4 changesets with 18 changes to 8 files
729 new changesets 775704be6f52:523e5c631710
729 new changesets 775704be6f52:523e5c631710
730 updating to branch default
730 updating to branch default
731 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
731 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
732 $ cd deeprepo-basicstore
732 $ cd deeprepo-basicstore
733 $ hg debugrequires | grep store
733 $ hg debugrequires | grep store
734 [1]
734 [1]
735 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --errorlog=errors.log
735 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --errorlog=errors.log
736 $ cat hg.pid >> $DAEMON_PIDS
736 $ cat hg.pid >> $DAEMON_PIDS
737 $ cd ..
737 $ cd ..
738 $ hg clone --config format.usefncache=False \
738 $ hg clone --config format.usefncache=False \
739 > --config experimental.changegroup3=True \
739 > --config experimental.changegroup3=True \
740 > http://localhost:$HGPORT deeprepo-encodedstore
740 > http://localhost:$HGPORT deeprepo-encodedstore
741 requesting all changes
741 requesting all changes
742 adding changesets
742 adding changesets
743 adding manifests
743 adding manifests
744 adding file changes
744 adding file changes
745 added 4 changesets with 18 changes to 8 files
745 added 4 changesets with 18 changes to 8 files
746 new changesets 775704be6f52:523e5c631710
746 new changesets 775704be6f52:523e5c631710
747 updating to branch default
747 updating to branch default
748 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
748 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
749 $ cd deeprepo-encodedstore
749 $ cd deeprepo-encodedstore
750 $ hg debugrequires | grep fncache
750 $ hg debugrequires | grep fncache
751 [1]
751 [1]
752 $ hg serve -p $HGPORT2 -d --pid-file=hg.pid --errorlog=errors.log
752 $ hg serve -p $HGPORT2 -d --pid-file=hg.pid --errorlog=errors.log
753 $ cat hg.pid >> $DAEMON_PIDS
753 $ cat hg.pid >> $DAEMON_PIDS
754 $ cd ..
754 $ cd ..
755
755
756 Local clone with basicstore
756 Local clone with basicstore
757 $ hg clone -U deeprepo-basicstore local-clone-basicstore
757 $ hg clone -U deeprepo-basicstore local-clone-basicstore
758 $ hg -R local-clone-basicstore verify
758 $ hg -R local-clone-basicstore verify
759 checking changesets
759 checking changesets
760 checking manifests
760 checking manifests
761 checking directory manifests
761 checking directory manifests
762 crosschecking files in changesets and manifests
762 crosschecking files in changesets and manifests
763 checking files
763 checking files
764 checked 4 changesets with 18 changes to 8 files
764 checked 4 changesets with 18 changes to 8 files
765
765
766 Local clone with encodedstore
766 Local clone with encodedstore
767 $ hg clone -U deeprepo-encodedstore local-clone-encodedstore
767 $ hg clone -U deeprepo-encodedstore local-clone-encodedstore
768 $ hg -R local-clone-encodedstore verify
768 $ hg -R local-clone-encodedstore verify
769 checking changesets
769 checking changesets
770 checking manifests
770 checking manifests
771 checking directory manifests
771 checking directory manifests
772 crosschecking files in changesets and manifests
772 crosschecking files in changesets and manifests
773 checking files
773 checking files
774 checked 4 changesets with 18 changes to 8 files
774 checked 4 changesets with 18 changes to 8 files
775
775
776 Local clone with fncachestore
776 Local clone with fncachestore
777 $ hg clone -U deeprepo local-clone-fncachestore
777 $ hg clone -U deeprepo local-clone-fncachestore
778 $ hg -R local-clone-fncachestore verify
778 $ hg -R local-clone-fncachestore verify
779 checking changesets
779 checking changesets
780 checking manifests
780 checking manifests
781 checking directory manifests
781 checking directory manifests
782 crosschecking files in changesets and manifests
782 crosschecking files in changesets and manifests
783 checking files
783 checking files
784 checked 4 changesets with 18 changes to 8 files
784 checked 4 changesets with 18 changes to 8 files
785
785
786 Stream clone with basicstore
786 Stream clone with basicstore
787 $ hg clone --config experimental.changegroup3=True --stream -U \
787 $ hg clone --config experimental.changegroup3=True --stream -U \
788 > http://localhost:$HGPORT1 stream-clone-basicstore
788 > http://localhost:$HGPORT1 stream-clone-basicstore
789 streaming all changes
789 streaming all changes
790 28 files to transfer, * of data (glob)
790 28 files to transfer, * of data (glob)
791 transferred * in * seconds (*) (glob)
791 transferred * in * seconds (*) (glob)
792 $ hg -R stream-clone-basicstore verify
792 $ hg -R stream-clone-basicstore verify
793 checking changesets
793 checking changesets
794 checking manifests
794 checking manifests
795 checking directory manifests
795 checking directory manifests
796 crosschecking files in changesets and manifests
796 crosschecking files in changesets and manifests
797 checking files
797 checking files
798 checked 4 changesets with 18 changes to 8 files
798 checked 4 changesets with 18 changes to 8 files
799
799
800 Stream clone with encodedstore
800 Stream clone with encodedstore
801 $ hg clone --config experimental.changegroup3=True --stream -U \
801 $ hg clone --config experimental.changegroup3=True --stream -U \
802 > http://localhost:$HGPORT2 stream-clone-encodedstore
802 > http://localhost:$HGPORT2 stream-clone-encodedstore
803 streaming all changes
803 streaming all changes
804 28 files to transfer, * of data (glob)
804 28 files to transfer, * of data (glob)
805 transferred * in * seconds (*) (glob)
805 transferred * in * seconds (*) (glob)
806 $ hg -R stream-clone-encodedstore verify
806 $ hg -R stream-clone-encodedstore verify
807 checking changesets
807 checking changesets
808 checking manifests
808 checking manifests
809 checking directory manifests
809 checking directory manifests
810 crosschecking files in changesets and manifests
810 crosschecking files in changesets and manifests
811 checking files
811 checking files
812 checked 4 changesets with 18 changes to 8 files
812 checked 4 changesets with 18 changes to 8 files
813
813
814 Stream clone with fncachestore
814 Stream clone with fncachestore
815 $ hg clone --config experimental.changegroup3=True --stream -U \
815 $ hg clone --config experimental.changegroup3=True --stream -U \
816 > http://localhost:$HGPORT stream-clone-fncachestore
816 > http://localhost:$HGPORT stream-clone-fncachestore
817 streaming all changes
817 streaming all changes
818 22 files to transfer, * of data (glob)
818 22 files to transfer, * of data (glob)
819 transferred * in * seconds (*) (glob)
819 transferred * in * seconds (*) (glob)
820 $ hg -R stream-clone-fncachestore verify
820 $ hg -R stream-clone-fncachestore verify
821 checking changesets
821 checking changesets
822 checking manifests
822 checking manifests
823 checking directory manifests
823 checking directory manifests
824 crosschecking files in changesets and manifests
824 crosschecking files in changesets and manifests
825 checking files
825 checking files
826 checked 4 changesets with 18 changes to 8 files
826 checked 4 changesets with 18 changes to 8 files
827
827
828 Packed bundle
828 Packed bundle
829 $ hg -R deeprepo debugcreatestreamclonebundle repo-packed.hg
829 $ hg -R deeprepo debugcreatestreamclonebundle repo-packed.hg
830 writing 5330 bytes for 18 files (no-zstd !)
830 writing 5330 bytes for 18 files (no-zstd !)
831 writing 5400 bytes for 18 files (zstd !)
831 writing 5400 bytes for 18 files (zstd !)
832 bundle requirements:.* treemanifest(,.*)? (re)
832 bundle requirements:.* treemanifest(,.*)? (re)
833 $ hg debugbundle --spec repo-packed.hg
833 $ hg debugbundle --spec repo-packed.hg
834 none-packed1;requirements%3D(.*%2C)?treemanifest(%2C.*)? (re)
834 none-packed1;requirements%3D(.*%2C)?treemanifest(%2C.*)? (re)
835
835
836 #endif
836 #endif
837
837
838 Bundle with changegroup2 is not supported
838 Bundle with changegroup2 is not supported
839
839
840 $ hg -R deeprepo bundle --all -t v2 deeprepo.bundle
840 $ hg -R deeprepo bundle --all -t v2 deeprepo.bundle
841 abort: repository does not support bundle version 02
841 abort: repository does not support bundle version 02
842 [255]
842 [255]
843
843
844 Pull does not include changegroup for manifest the client already has from
844 Pull does not include changegroup for manifest the client already has from
845 other branch
845 other branch
846
846
847 $ mkdir grafted-dir-repo
847 $ mkdir grafted-dir-repo
848 $ cd grafted-dir-repo
848 $ cd grafted-dir-repo
849 $ hg --config experimental.treemanifest=1 init
849 $ hg --config experimental.treemanifest=1 init
850 $ mkdir dir
850 $ mkdir dir
851 $ echo a > dir/file
851 $ echo a > dir/file
852 $ echo a > file
852 $ echo a > file
853 $ hg ci -Am initial
853 $ hg ci -Am initial
854 adding dir/file
854 adding dir/file
855 adding file
855 adding file
856 $ echo b > dir/file
856 $ echo b > dir/file
857 $ hg ci -m updated
857 $ hg ci -m updated
858 $ hg co '.^'
858 $ hg co '.^'
859 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
859 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
860 $ hg revert -r tip dir/
860 $ hg revert -r tip dir/
861 reverting dir/file
861 reverting dir/file
862 $ echo b > file # to make sure root manifest is sent
862 $ echo b > file # to make sure root manifest is sent
863 $ hg ci -m grafted
863 $ hg ci -m grafted
864 created new head
864 created new head
865 $ cd ..
865 $ cd ..
866
866
867 $ hg --config experimental.treemanifest=1 clone --pull -r 1 \
867 $ hg --config experimental.treemanifest=1 clone --pull -r 1 \
868 > grafted-dir-repo grafted-dir-repo-clone
868 > grafted-dir-repo grafted-dir-repo-clone
869 adding changesets
869 adding changesets
870 adding manifests
870 adding manifests
871 adding file changes
871 adding file changes
872 added 2 changesets with 3 changes to 2 files
872 added 2 changesets with 3 changes to 2 files
873 new changesets d84f4c419457:09ab742f3b0f
873 new changesets d84f4c419457:09ab742f3b0f
874 updating to branch default
874 updating to branch default
875 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
875 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
876 $ cd grafted-dir-repo-clone
876 $ cd grafted-dir-repo-clone
877 $ hg pull -r 2
877 $ hg pull -r 2
878 pulling from $TESTTMP/grafted-dir-repo
878 pulling from $TESTTMP/grafted-dir-repo
879 searching for changes
879 searching for changes
880 adding changesets
880 adding changesets
881 adding manifests
881 adding manifests
882 adding file changes
882 adding file changes
883 added 1 changesets with 1 changes to 1 files (+1 heads)
883 added 1 changesets with 1 changes to 1 files (+1 heads)
884 new changesets 73699489fb7c
884 new changesets 73699489fb7c
885 (run 'hg heads' to see heads, 'hg merge' to merge)
885 (run 'hg heads' to see heads, 'hg merge' to merge)
886
886
887 Committing a empty commit does not duplicate root treemanifest
887 Committing a empty commit does not duplicate root treemanifest
888 $ echo z >> z
888 $ echo z >> z
889 $ hg commit -Aqm 'pre-empty commit'
889 $ hg commit -Aqm 'pre-empty commit'
890 $ hg rm z
890 $ hg rm z
891 $ hg commit --amend -m 'empty commit'
891 $ hg commit --amend -m 'empty commit'
892 saved backup bundle to $TESTTMP/grafted-dir-repo-clone/.hg/strip-backup/cb99d5717cea-9e3b6b02-amend.hg
892 saved backup bundle to $TESTTMP/grafted-dir-repo-clone/.hg/strip-backup/cb99d5717cea-9e3b6b02-amend.hg
893 $ hg log -r 'tip + tip^' -T '{manifest}\n'
893 $ hg log -r 'tip + tip^' -T '{manifest}\n'
894 1:678d3574b88c
894 1:678d3574b88c
895 1:678d3574b88c
895 1:678d3574b88c
896 $ hg --config extensions.strip= strip -r . -q
896 $ hg --config extensions.strip= strip -r . -q
General Comments 0
You need to be logged in to leave comments. Login now