##// END OF EJS Templates
drawdag: include files from both parents in merge commits...
Martin von Zweigbergk -
r33558:0103e718 default
parent child Browse files
Show More
@@ -1,354 +1,363 b''
1 # drawdag.py - convert ASCII revision DAG to actual changesets
1 # drawdag.py - convert ASCII revision DAG to actual changesets
2 #
2 #
3 # Copyright 2016 Facebook, Inc.
3 # Copyright 2016 Facebook, Inc.
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7 """
7 """
8 create changesets from an ASCII graph for testing purpose.
8 create changesets from an ASCII graph for testing purpose.
9
9
10 For example, given the following input::
10 For example, given the following input::
11
11
12 c d
12 c d
13 |/
13 |/
14 b
14 b
15 |
15 |
16 a
16 a
17
17
18 4 changesets and 4 local tags will be created.
18 4 changesets and 4 local tags will be created.
19 `hg log -G -T "{rev} {desc} (tag: {tags})"` will output::
19 `hg log -G -T "{rev} {desc} (tag: {tags})"` will output::
20
20
21 o 3 d (tag: d tip)
21 o 3 d (tag: d tip)
22 |
22 |
23 | o 2 c (tag: c)
23 | o 2 c (tag: c)
24 |/
24 |/
25 o 1 b (tag: b)
25 o 1 b (tag: b)
26 |
26 |
27 o 0 a (tag: a)
27 o 0 a (tag: a)
28
28
29 For root nodes (nodes without parents) in the graph, they can be revsets
29 For root nodes (nodes without parents) in the graph, they can be revsets
30 pointing to existing nodes. The ASCII graph could also have disconnected
30 pointing to existing nodes. The ASCII graph could also have disconnected
31 components with same names referring to the same changeset.
31 components with same names referring to the same changeset.
32
32
33 Therefore, given the repo having the 4 changesets (and tags) above, with the
33 Therefore, given the repo having the 4 changesets (and tags) above, with the
34 following ASCII graph as input::
34 following ASCII graph as input::
35
35
36 foo bar bar foo
36 foo bar bar foo
37 | / | |
37 | / | |
38 ancestor(c,d) a baz
38 ancestor(c,d) a baz
39
39
40 The result (`hg log -G -T "{desc}"`) will look like::
40 The result (`hg log -G -T "{desc}"`) will look like::
41
41
42 o foo
42 o foo
43 |\
43 |\
44 +---o bar
44 +---o bar
45 | | |
45 | | |
46 | o | baz
46 | o | baz
47 | /
47 | /
48 +---o d
48 +---o d
49 | |
49 | |
50 +---o c
50 +---o c
51 | |
51 | |
52 o | b
52 o | b
53 |/
53 |/
54 o a
54 o a
55
55
56 Note that if you take the above `hg log` output directly as input. It will work
56 Note that if you take the above `hg log` output directly as input. It will work
57 as expected - the result would be an isomorphic graph::
57 as expected - the result would be an isomorphic graph::
58
58
59 o foo
59 o foo
60 |\
60 |\
61 | | o d
61 | | o d
62 | |/
62 | |/
63 | | o c
63 | | o c
64 | |/
64 | |/
65 | | o bar
65 | | o bar
66 | |/|
66 | |/|
67 | o | b
67 | o | b
68 | |/
68 | |/
69 o / baz
69 o / baz
70 /
70 /
71 o a
71 o a
72
72
73 This is because 'o' is specially handled in the input: instead of using 'o' as
73 This is because 'o' is specially handled in the input: instead of using 'o' as
74 the node name, the word to the right will be used.
74 the node name, the word to the right will be used.
75
75
76 Some special comments could have side effects:
76 Some special comments could have side effects:
77
77
78 - Create obsmarkers
78 - Create obsmarkers
79 # replace: A -> B -> C -> D # chained 1 to 1 replacements
79 # replace: A -> B -> C -> D # chained 1 to 1 replacements
80 # split: A -> B, C # 1 to many
80 # split: A -> B, C # 1 to many
81 # prune: A, B, C # many to nothing
81 # prune: A, B, C # many to nothing
82 """
82 """
83 from __future__ import absolute_import, print_function
83 from __future__ import absolute_import, print_function
84
84
85 import collections
85 import collections
86 import itertools
86 import itertools
87
87
88 from mercurial.i18n import _
88 from mercurial.i18n import _
89 from mercurial import (
89 from mercurial import (
90 context,
90 context,
91 error,
91 error,
92 node,
92 node,
93 obsolete,
93 obsolete,
94 registrar,
94 registrar,
95 scmutil,
95 scmutil,
96 tags as tagsmod,
96 tags as tagsmod,
97 )
97 )
98
98
99 cmdtable = {}
99 cmdtable = {}
100 command = registrar.command(cmdtable)
100 command = registrar.command(cmdtable)
101
101
102 _pipechars = '\\/+-|'
102 _pipechars = '\\/+-|'
103 _nonpipechars = ''.join(chr(i) for i in xrange(33, 127)
103 _nonpipechars = ''.join(chr(i) for i in xrange(33, 127)
104 if chr(i) not in _pipechars)
104 if chr(i) not in _pipechars)
105
105
106 def _isname(ch):
106 def _isname(ch):
107 """char -> bool. return True if ch looks like part of a name, False
107 """char -> bool. return True if ch looks like part of a name, False
108 otherwise"""
108 otherwise"""
109 return ch in _nonpipechars
109 return ch in _nonpipechars
110
110
111 def _parseasciigraph(text):
111 def _parseasciigraph(text):
112 """str -> {str : [str]}. convert the ASCII graph to edges"""
112 """str -> {str : [str]}. convert the ASCII graph to edges"""
113 lines = text.splitlines()
113 lines = text.splitlines()
114 edges = collections.defaultdict(list) # {node: []}
114 edges = collections.defaultdict(list) # {node: []}
115
115
116 def get(y, x):
116 def get(y, x):
117 """(int, int) -> char. give a coordinate, return the char. return a
117 """(int, int) -> char. give a coordinate, return the char. return a
118 space for anything out of range"""
118 space for anything out of range"""
119 if x < 0 or y < 0:
119 if x < 0 or y < 0:
120 return ' '
120 return ' '
121 try:
121 try:
122 return lines[y][x]
122 return lines[y][x]
123 except IndexError:
123 except IndexError:
124 return ' '
124 return ' '
125
125
126 def getname(y, x):
126 def getname(y, x):
127 """(int, int) -> str. like get(y, x) but concatenate left and right
127 """(int, int) -> str. like get(y, x) but concatenate left and right
128 parts. if name is an 'o', try to replace it to the right"""
128 parts. if name is an 'o', try to replace it to the right"""
129 result = ''
129 result = ''
130 for i in itertools.count(0):
130 for i in itertools.count(0):
131 ch = get(y, x - i)
131 ch = get(y, x - i)
132 if not _isname(ch):
132 if not _isname(ch):
133 break
133 break
134 result = ch + result
134 result = ch + result
135 for i in itertools.count(1):
135 for i in itertools.count(1):
136 ch = get(y, x + i)
136 ch = get(y, x + i)
137 if not _isname(ch):
137 if not _isname(ch):
138 break
138 break
139 result += ch
139 result += ch
140 if result == 'o':
140 if result == 'o':
141 # special handling, find the name to the right
141 # special handling, find the name to the right
142 result = ''
142 result = ''
143 for i in itertools.count(2):
143 for i in itertools.count(2):
144 ch = get(y, x + i)
144 ch = get(y, x + i)
145 if ch == ' ' or ch in _pipechars:
145 if ch == ' ' or ch in _pipechars:
146 if result or x + i >= len(lines[y]):
146 if result or x + i >= len(lines[y]):
147 break
147 break
148 else:
148 else:
149 result += ch
149 result += ch
150 return result or 'o'
150 return result or 'o'
151 return result
151 return result
152
152
153 def parents(y, x):
153 def parents(y, x):
154 """(int, int) -> [str]. follow the ASCII edges at given position,
154 """(int, int) -> [str]. follow the ASCII edges at given position,
155 return a list of parents"""
155 return a list of parents"""
156 visited = {(y, x)}
156 visited = {(y, x)}
157 visit = []
157 visit = []
158 result = []
158 result = []
159
159
160 def follow(y, x, expected):
160 def follow(y, x, expected):
161 """conditionally append (y, x) to visit array, if it's a char
161 """conditionally append (y, x) to visit array, if it's a char
162 in excepted. 'o' in expected means an '_isname' test.
162 in excepted. 'o' in expected means an '_isname' test.
163 if '-' (or '+') is not in excepted, and get(y, x) is '-' (or '+'),
163 if '-' (or '+') is not in excepted, and get(y, x) is '-' (or '+'),
164 the next line (y + 1, x) will be checked instead."""
164 the next line (y + 1, x) will be checked instead."""
165 ch = get(y, x)
165 ch = get(y, x)
166 if any(ch == c and c not in expected for c in '-+'):
166 if any(ch == c and c not in expected for c in '-+'):
167 y += 1
167 y += 1
168 return follow(y + 1, x, expected)
168 return follow(y + 1, x, expected)
169 if ch in expected or ('o' in expected and _isname(ch)):
169 if ch in expected or ('o' in expected and _isname(ch)):
170 visit.append((y, x))
170 visit.append((y, x))
171
171
172 # -o- # starting point:
172 # -o- # starting point:
173 # /|\ # follow '-' (horizontally), and '/|\' (to the bottom)
173 # /|\ # follow '-' (horizontally), and '/|\' (to the bottom)
174 follow(y + 1, x, '|')
174 follow(y + 1, x, '|')
175 follow(y + 1, x - 1, '/')
175 follow(y + 1, x - 1, '/')
176 follow(y + 1, x + 1, '\\')
176 follow(y + 1, x + 1, '\\')
177 follow(y, x - 1, '-')
177 follow(y, x - 1, '-')
178 follow(y, x + 1, '-')
178 follow(y, x + 1, '-')
179
179
180 while visit:
180 while visit:
181 y, x = visit.pop()
181 y, x = visit.pop()
182 if (y, x) in visited:
182 if (y, x) in visited:
183 continue
183 continue
184 visited.add((y, x))
184 visited.add((y, x))
185 ch = get(y, x)
185 ch = get(y, x)
186 if _isname(ch):
186 if _isname(ch):
187 result.append(getname(y, x))
187 result.append(getname(y, x))
188 continue
188 continue
189 elif ch == '|':
189 elif ch == '|':
190 follow(y + 1, x, '/|o')
190 follow(y + 1, x, '/|o')
191 follow(y + 1, x - 1, '/')
191 follow(y + 1, x - 1, '/')
192 follow(y + 1, x + 1, '\\')
192 follow(y + 1, x + 1, '\\')
193 elif ch == '+':
193 elif ch == '+':
194 follow(y, x - 1, '-')
194 follow(y, x - 1, '-')
195 follow(y, x + 1, '-')
195 follow(y, x + 1, '-')
196 follow(y + 1, x - 1, '/')
196 follow(y + 1, x - 1, '/')
197 follow(y + 1, x + 1, '\\')
197 follow(y + 1, x + 1, '\\')
198 follow(y + 1, x, '|')
198 follow(y + 1, x, '|')
199 elif ch == '\\':
199 elif ch == '\\':
200 follow(y + 1, x + 1, '\\|o')
200 follow(y + 1, x + 1, '\\|o')
201 elif ch == '/':
201 elif ch == '/':
202 follow(y + 1, x - 1, '/|o')
202 follow(y + 1, x - 1, '/|o')
203 elif ch == '-':
203 elif ch == '-':
204 follow(y, x - 1, '-+o')
204 follow(y, x - 1, '-+o')
205 follow(y, x + 1, '-+o')
205 follow(y, x + 1, '-+o')
206 return result
206 return result
207
207
208 for y, line in enumerate(lines):
208 for y, line in enumerate(lines):
209 for x, ch in enumerate(line):
209 for x, ch in enumerate(line):
210 if ch == '#': # comment
210 if ch == '#': # comment
211 break
211 break
212 if _isname(ch):
212 if _isname(ch):
213 edges[getname(y, x)] += parents(y, x)
213 edges[getname(y, x)] += parents(y, x)
214
214
215 return dict(edges)
215 return dict(edges)
216
216
217 class simplefilectx(object):
217 class simplefilectx(object):
218 def __init__(self, path, data):
218 def __init__(self, path, data):
219 self._data = data
219 self._data = data
220 self._path = path
220 self._path = path
221
221
222 def data(self):
222 def data(self):
223 return self._data
223 return self._data
224
224
225 def filenode(self):
225 def filenode(self):
226 return None
226 return None
227
227
228 def path(self):
228 def path(self):
229 return self._path
229 return self._path
230
230
231 def renamed(self):
231 def renamed(self):
232 return None
232 return None
233
233
234 def flags(self):
234 def flags(self):
235 return ''
235 return ''
236
236
237 class simplecommitctx(context.committablectx):
237 class simplecommitctx(context.committablectx):
238 def __init__(self, repo, name, parentctxs, added=None):
238 def __init__(self, repo, name, parentctxs, added):
239 opts = {
239 opts = {
240 'changes': scmutil.status([], added or [], [], [], [], [], []),
240 'changes': scmutil.status([], list(added), [], [], [], [], []),
241 'date': '0 0',
241 'date': '0 0',
242 'extra': {'branch': 'default'},
242 'extra': {'branch': 'default'},
243 }
243 }
244 super(simplecommitctx, self).__init__(self, name, **opts)
244 super(simplecommitctx, self).__init__(self, name, **opts)
245 self._repo = repo
245 self._repo = repo
246 self._name = name
246 self._added = added
247 self._parents = parentctxs
247 self._parents = parentctxs
248 self._parents.sort(key=lambda c: c.node())
249 while len(self._parents) < 2:
248 while len(self._parents) < 2:
250 self._parents.append(repo[node.nullid])
249 self._parents.append(repo[node.nullid])
251
250
252 def filectx(self, key):
251 def filectx(self, key):
253 return simplefilectx(key, self._name)
252 return simplefilectx(key, self._added[key])
254
253
255 def commit(self):
254 def commit(self):
256 return self._repo.commitctx(self)
255 return self._repo.commitctx(self)
257
256
258 def _walkgraph(edges):
257 def _walkgraph(edges):
259 """yield node, parents in topologically order"""
258 """yield node, parents in topologically order"""
260 visible = set(edges.keys())
259 visible = set(edges.keys())
261 remaining = {} # {str: [str]}
260 remaining = {} # {str: [str]}
262 for k, vs in edges.iteritems():
261 for k, vs in edges.iteritems():
263 for v in vs:
262 for v in vs:
264 if v not in remaining:
263 if v not in remaining:
265 remaining[v] = []
264 remaining[v] = []
266 remaining[k] = vs[:]
265 remaining[k] = vs[:]
267 while remaining:
266 while remaining:
268 leafs = [k for k, v in remaining.items() if not v]
267 leafs = [k for k, v in remaining.items() if not v]
269 if not leafs:
268 if not leafs:
270 raise error.Abort(_('the graph has cycles'))
269 raise error.Abort(_('the graph has cycles'))
271 for leaf in sorted(leafs):
270 for leaf in sorted(leafs):
272 if leaf in visible:
271 if leaf in visible:
273 yield leaf, edges[leaf]
272 yield leaf, edges[leaf]
274 del remaining[leaf]
273 del remaining[leaf]
275 for k, v in remaining.iteritems():
274 for k, v in remaining.iteritems():
276 if leaf in v:
275 if leaf in v:
277 v.remove(leaf)
276 v.remove(leaf)
278
277
279 @command('debugdrawdag', [])
278 @command('debugdrawdag', [])
280 def debugdrawdag(ui, repo, **opts):
279 def debugdrawdag(ui, repo, **opts):
281 """read an ASCII graph from stdin and create changesets
280 """read an ASCII graph from stdin and create changesets
282
281
283 The ASCII graph is like what :hg:`log -G` outputs, with each `o` replaced
282 The ASCII graph is like what :hg:`log -G` outputs, with each `o` replaced
284 to the name of the node. The command will create dummy changesets and local
283 to the name of the node. The command will create dummy changesets and local
285 tags with those names to make the dummy changesets easier to be referred
284 tags with those names to make the dummy changesets easier to be referred
286 to.
285 to.
287
286
288 If the name of a node is a single character 'o', It will be replaced by the
287 If the name of a node is a single character 'o', It will be replaced by the
289 word to the right. This makes it easier to reuse
288 word to the right. This makes it easier to reuse
290 :hg:`log -G -T '{desc}'` outputs.
289 :hg:`log -G -T '{desc}'` outputs.
291
290
292 For root (no parents) nodes, revset can be used to query existing repo.
291 For root (no parents) nodes, revset can be used to query existing repo.
293 Note that the revset cannot have confusing characters which can be seen as
292 Note that the revset cannot have confusing characters which can be seen as
294 the part of the graph edges, like `|/+-\`.
293 the part of the graph edges, like `|/+-\`.
295 """
294 """
296 text = ui.fin.read()
295 text = ui.fin.read()
297
296
298 # parse the graph and make sure len(parents) <= 2 for each node
297 # parse the graph and make sure len(parents) <= 2 for each node
299 edges = _parseasciigraph(text)
298 edges = _parseasciigraph(text)
300 for k, v in edges.iteritems():
299 for k, v in edges.iteritems():
301 if len(v) > 2:
300 if len(v) > 2:
302 raise error.Abort(_('%s: too many parents: %s')
301 raise error.Abort(_('%s: too many parents: %s')
303 % (k, ' '.join(v)))
302 % (k, ' '.join(v)))
304
303
305 committed = {None: node.nullid} # {name: node}
304 committed = {None: node.nullid} # {name: node}
306
305
307 # for leaf nodes, try to find existing nodes in repo
306 # for leaf nodes, try to find existing nodes in repo
308 for name, parents in edges.iteritems():
307 for name, parents in edges.iteritems():
309 if len(parents) == 0:
308 if len(parents) == 0:
310 try:
309 try:
311 committed[name] = scmutil.revsingle(repo, name)
310 committed[name] = scmutil.revsingle(repo, name)
312 except error.RepoLookupError:
311 except error.RepoLookupError:
313 pass
312 pass
314
313
315 # commit in topological order
314 # commit in topological order
316 for name, parents in _walkgraph(edges):
315 for name, parents in _walkgraph(edges):
317 if name in committed:
316 if name in committed:
318 continue
317 continue
319 pctxs = [repo[committed[n]] for n in parents]
318 pctxs = [repo[committed[n]] for n in parents]
320 ctx = simplecommitctx(repo, name, pctxs, [name])
319 pctxs.sort(key=lambda c: c.node())
320 added = {}
321 if len(parents) > 1:
322 # If it's a merge, take the files and contents from the parents
323 for f in pctxs[1].manifest():
324 if f not in pctxs[0].manifest():
325 added[f] = pctxs[1][f].data()
326 else:
327 # If it's not a merge, add a single file
328 added[name] = name
329 ctx = simplecommitctx(repo, name, pctxs, added)
321 n = ctx.commit()
330 n = ctx.commit()
322 committed[name] = n
331 committed[name] = n
323 tagsmod.tag(repo, name, n, message=None, user=None, date=None,
332 tagsmod.tag(repo, name, n, message=None, user=None, date=None,
324 local=True)
333 local=True)
325
334
326 # handle special comments
335 # handle special comments
327 with repo.wlock(), repo.lock(), repo.transaction('drawdag'):
336 with repo.wlock(), repo.lock(), repo.transaction('drawdag'):
328 getctx = lambda x: repo.unfiltered()[committed[x.strip()]]
337 getctx = lambda x: repo.unfiltered()[committed[x.strip()]]
329 for line in text.splitlines():
338 for line in text.splitlines():
330 if ' # ' not in line:
339 if ' # ' not in line:
331 continue
340 continue
332
341
333 rels = [] # obsolete relationships
342 rels = [] # obsolete relationships
334 comment = line.split(' # ', 1)[1].split(' # ')[0].strip()
343 comment = line.split(' # ', 1)[1].split(' # ')[0].strip()
335 args = comment.split(':', 1)
344 args = comment.split(':', 1)
336 if len(args) <= 1:
345 if len(args) <= 1:
337 continue
346 continue
338
347
339 cmd = args[0].strip()
348 cmd = args[0].strip()
340 arg = args[1].strip()
349 arg = args[1].strip()
341
350
342 if cmd in ('replace', 'rebase', 'amend'):
351 if cmd in ('replace', 'rebase', 'amend'):
343 nodes = [getctx(m) for m in arg.split('->')]
352 nodes = [getctx(m) for m in arg.split('->')]
344 for i in range(len(nodes) - 1):
353 for i in range(len(nodes) - 1):
345 rels.append((nodes[i], (nodes[i + 1],)))
354 rels.append((nodes[i], (nodes[i + 1],)))
346 elif cmd in ('split',):
355 elif cmd in ('split',):
347 pre, succs = arg.split('->')
356 pre, succs = arg.split('->')
348 succs = succs.split(',')
357 succs = succs.split(',')
349 rels.append((getctx(pre), (getctx(s) for s in succs)))
358 rels.append((getctx(pre), (getctx(s) for s in succs)))
350 elif cmd in ('prune',):
359 elif cmd in ('prune',):
351 for n in arg.split(','):
360 for n in arg.split(','):
352 rels.append((getctx(n), ()))
361 rels.append((getctx(n), ()))
353 if rels:
362 if rels:
354 obsolete.createmarkers(repo, rels, date=(0, 0), operation=cmd)
363 obsolete.createmarkers(repo, rels, date=(0, 0), operation=cmd)
@@ -1,285 +1,285 b''
1 $ cat >> $HGRCPATH <<EOF
1 $ cat >> $HGRCPATH <<EOF
2 > [experimental]
2 > [experimental]
3 > bundle-phases=yes
3 > bundle-phases=yes
4 > [extensions]
4 > [extensions]
5 > strip=
5 > strip=
6 > drawdag=$TESTDIR/drawdag.py
6 > drawdag=$TESTDIR/drawdag.py
7 > EOF
7 > EOF
8
8
9 Set up repo with linear history
9 Set up repo with linear history
10 $ hg init linear
10 $ hg init linear
11 $ cd linear
11 $ cd linear
12 $ hg debugdrawdag <<'EOF'
12 $ hg debugdrawdag <<'EOF'
13 > E
13 > E
14 > |
14 > |
15 > D
15 > D
16 > |
16 > |
17 > C
17 > C
18 > |
18 > |
19 > B
19 > B
20 > |
20 > |
21 > A
21 > A
22 > EOF
22 > EOF
23 $ hg phase --public A
23 $ hg phase --public A
24 $ hg phase --force --secret D
24 $ hg phase --force --secret D
25 $ hg log -G -T '{desc} {phase}\n'
25 $ hg log -G -T '{desc} {phase}\n'
26 o E secret
26 o E secret
27 |
27 |
28 o D secret
28 o D secret
29 |
29 |
30 o C draft
30 o C draft
31 |
31 |
32 o B draft
32 o B draft
33 |
33 |
34 o A public
34 o A public
35
35
36 Phases are restored when unbundling
36 Phases are restored when unbundling
37 $ hg bundle --base B -r E bundle
37 $ hg bundle --base B -r E bundle
38 3 changesets found
38 3 changesets found
39 $ hg debugbundle bundle
39 $ hg debugbundle bundle
40 Stream params: sortdict([('Compression', 'BZ')])
40 Stream params: sortdict([('Compression', 'BZ')])
41 changegroup -- "sortdict([('version', '02'), ('nbchanges', '3'), ('targetphase', '2')])"
41 changegroup -- "sortdict([('version', '02'), ('nbchanges', '3'), ('targetphase', '2')])"
42 26805aba1e600a82e93661149f2313866a221a7b
42 26805aba1e600a82e93661149f2313866a221a7b
43 f585351a92f85104bff7c284233c338b10eb1df7
43 f585351a92f85104bff7c284233c338b10eb1df7
44 9bc730a19041f9ec7cb33c626e811aa233efb18c
44 9bc730a19041f9ec7cb33c626e811aa233efb18c
45 phase-heads -- 'sortdict()'
45 phase-heads -- 'sortdict()'
46 26805aba1e600a82e93661149f2313866a221a7b draft
46 26805aba1e600a82e93661149f2313866a221a7b draft
47 $ hg strip --no-backup C
47 $ hg strip --no-backup C
48 $ hg unbundle -q bundle
48 $ hg unbundle -q bundle
49 $ rm bundle
49 $ rm bundle
50 $ hg log -G -T '{desc} {phase}\n'
50 $ hg log -G -T '{desc} {phase}\n'
51 o E secret
51 o E secret
52 |
52 |
53 o D secret
53 o D secret
54 |
54 |
55 o C draft
55 o C draft
56 |
56 |
57 o B draft
57 o B draft
58 |
58 |
59 o A public
59 o A public
60
60
61 Root revision's phase is preserved
61 Root revision's phase is preserved
62 $ hg bundle -a bundle
62 $ hg bundle -a bundle
63 5 changesets found
63 5 changesets found
64 $ hg strip --no-backup A
64 $ hg strip --no-backup A
65 $ hg unbundle -q bundle
65 $ hg unbundle -q bundle
66 $ rm bundle
66 $ rm bundle
67 $ hg log -G -T '{desc} {phase}\n'
67 $ hg log -G -T '{desc} {phase}\n'
68 o E secret
68 o E secret
69 |
69 |
70 o D secret
70 o D secret
71 |
71 |
72 o C draft
72 o C draft
73 |
73 |
74 o B draft
74 o B draft
75 |
75 |
76 o A public
76 o A public
77
77
78 Completely public history can be restored
78 Completely public history can be restored
79 $ hg phase --public E
79 $ hg phase --public E
80 $ hg bundle -a bundle
80 $ hg bundle -a bundle
81 5 changesets found
81 5 changesets found
82 $ hg strip --no-backup A
82 $ hg strip --no-backup A
83 $ hg unbundle -q bundle
83 $ hg unbundle -q bundle
84 $ rm bundle
84 $ rm bundle
85 $ hg log -G -T '{desc} {phase}\n'
85 $ hg log -G -T '{desc} {phase}\n'
86 o E public
86 o E public
87 |
87 |
88 o D public
88 o D public
89 |
89 |
90 o C public
90 o C public
91 |
91 |
92 o B public
92 o B public
93 |
93 |
94 o A public
94 o A public
95
95
96 Direct transition from public to secret can be restored
96 Direct transition from public to secret can be restored
97 $ hg phase --secret --force D
97 $ hg phase --secret --force D
98 $ hg bundle -a bundle
98 $ hg bundle -a bundle
99 5 changesets found
99 5 changesets found
100 $ hg strip --no-backup A
100 $ hg strip --no-backup A
101 $ hg unbundle -q bundle
101 $ hg unbundle -q bundle
102 $ rm bundle
102 $ rm bundle
103 $ hg log -G -T '{desc} {phase}\n'
103 $ hg log -G -T '{desc} {phase}\n'
104 o E secret
104 o E secret
105 |
105 |
106 o D secret
106 o D secret
107 |
107 |
108 o C public
108 o C public
109 |
109 |
110 o B public
110 o B public
111 |
111 |
112 o A public
112 o A public
113
113
114 Revisions within bundle preserve their phase even if parent changes its phase
114 Revisions within bundle preserve their phase even if parent changes its phase
115 $ hg phase --draft --force B
115 $ hg phase --draft --force B
116 $ hg bundle --base B -r E bundle
116 $ hg bundle --base B -r E bundle
117 3 changesets found
117 3 changesets found
118 $ hg strip --no-backup C
118 $ hg strip --no-backup C
119 $ hg phase --public B
119 $ hg phase --public B
120 $ hg unbundle -q bundle
120 $ hg unbundle -q bundle
121 $ rm bundle
121 $ rm bundle
122 $ hg log -G -T '{desc} {phase}\n'
122 $ hg log -G -T '{desc} {phase}\n'
123 o E secret
123 o E secret
124 |
124 |
125 o D secret
125 o D secret
126 |
126 |
127 o C draft
127 o C draft
128 |
128 |
129 o B public
129 o B public
130 |
130 |
131 o A public
131 o A public
132
132
133 Phase of ancestors of stripped node get advanced to accommodate child
133 Phase of ancestors of stripped node get advanced to accommodate child
134 $ hg bundle --base B -r E bundle
134 $ hg bundle --base B -r E bundle
135 3 changesets found
135 3 changesets found
136 $ hg strip --no-backup C
136 $ hg strip --no-backup C
137 $ hg phase --force --secret B
137 $ hg phase --force --secret B
138 $ hg unbundle -q bundle
138 $ hg unbundle -q bundle
139 $ rm bundle
139 $ rm bundle
140 $ hg log -G -T '{desc} {phase}\n'
140 $ hg log -G -T '{desc} {phase}\n'
141 o E secret
141 o E secret
142 |
142 |
143 o D secret
143 o D secret
144 |
144 |
145 o C draft
145 o C draft
146 |
146 |
147 o B draft
147 o B draft
148 |
148 |
149 o A public
149 o A public
150
150
151 Unbundling advances phases of changesets even if they were already in the repo.
151 Unbundling advances phases of changesets even if they were already in the repo.
152 To test that, create a bundle of everything in draft phase and then unbundle
152 To test that, create a bundle of everything in draft phase and then unbundle
153 to see that secret becomes draft, but public remains public.
153 to see that secret becomes draft, but public remains public.
154 $ hg phase --draft --force A
154 $ hg phase --draft --force A
155 $ hg phase --draft E
155 $ hg phase --draft E
156 $ hg bundle -a bundle
156 $ hg bundle -a bundle
157 5 changesets found
157 5 changesets found
158 $ hg phase --public A
158 $ hg phase --public A
159 $ hg phase --secret --force E
159 $ hg phase --secret --force E
160 $ hg unbundle -q bundle
160 $ hg unbundle -q bundle
161 $ rm bundle
161 $ rm bundle
162 $ hg log -G -T '{desc} {phase}\n'
162 $ hg log -G -T '{desc} {phase}\n'
163 o E draft
163 o E draft
164 |
164 |
165 o D draft
165 o D draft
166 |
166 |
167 o C draft
167 o C draft
168 |
168 |
169 o B draft
169 o B draft
170 |
170 |
171 o A public
171 o A public
172
172
173 Unbundling change in the middle of a stack does not affect later changes
173 Unbundling change in the middle of a stack does not affect later changes
174 $ hg strip --no-backup E
174 $ hg strip --no-backup E
175 $ hg phase --secret --force D
175 $ hg phase --secret --force D
176 $ hg log -G -T '{desc} {phase}\n'
176 $ hg log -G -T '{desc} {phase}\n'
177 o D secret
177 o D secret
178 |
178 |
179 o C draft
179 o C draft
180 |
180 |
181 o B draft
181 o B draft
182 |
182 |
183 o A public
183 o A public
184
184
185 $ hg bundle --base A -r B bundle
185 $ hg bundle --base A -r B bundle
186 1 changesets found
186 1 changesets found
187 $ hg unbundle -q bundle
187 $ hg unbundle -q bundle
188 $ rm bundle
188 $ rm bundle
189 $ hg log -G -T '{desc} {phase}\n'
189 $ hg log -G -T '{desc} {phase}\n'
190 o D secret
190 o D secret
191 |
191 |
192 o C draft
192 o C draft
193 |
193 |
194 o B draft
194 o B draft
195 |
195 |
196 o A public
196 o A public
197
197
198
198
199 $ cd ..
199 $ cd ..
200
200
201 Set up repo with non-linear history
201 Set up repo with non-linear history
202 $ hg init non-linear
202 $ hg init non-linear
203 $ cd non-linear
203 $ cd non-linear
204 $ hg debugdrawdag <<'EOF'
204 $ hg debugdrawdag <<'EOF'
205 > D E
205 > D E
206 > |\|
206 > |\|
207 > B C
207 > B C
208 > |/
208 > |/
209 > A
209 > A
210 > EOF
210 > EOF
211 $ hg phase --public C
211 $ hg phase --public C
212 $ hg phase --force --secret B
212 $ hg phase --force --secret B
213 $ hg log -G -T '{node|short} {desc} {phase}\n'
213 $ hg log -G -T '{node|short} {desc} {phase}\n'
214 o 03ca77807e91 E draft
214 o 03ca77807e91 E draft
215 |
215 |
216 | o 215e7b0814e1 D secret
216 | o 4e4f9194f9f1 D secret
217 |/|
217 |/|
218 o | dc0947a82db8 C public
218 o | dc0947a82db8 C public
219 | |
219 | |
220 | o 112478962961 B secret
220 | o 112478962961 B secret
221 |/
221 |/
222 o 426bada5c675 A public
222 o 426bada5c675 A public
223
223
224
224
225 Restore bundle of entire repo
225 Restore bundle of entire repo
226 $ hg bundle -a bundle
226 $ hg bundle -a bundle
227 5 changesets found
227 5 changesets found
228 $ hg debugbundle bundle
228 $ hg debugbundle bundle
229 Stream params: sortdict([('Compression', 'BZ')])
229 Stream params: sortdict([('Compression', 'BZ')])
230 changegroup -- "sortdict([('version', '02'), ('nbchanges', '5'), ('targetphase', '2')])"
230 changegroup -- "sortdict([('version', '02'), ('nbchanges', '5'), ('targetphase', '2')])"
231 426bada5c67598ca65036d57d9e4b64b0c1ce7a0
231 426bada5c67598ca65036d57d9e4b64b0c1ce7a0
232 112478962961147124edd43549aedd1a335e44bf
232 112478962961147124edd43549aedd1a335e44bf
233 dc0947a82db884575bb76ea10ac97b08536bfa03
233 dc0947a82db884575bb76ea10ac97b08536bfa03
234 215e7b0814e1cac8e2614e7284f2a5dc266b4323
234 4e4f9194f9f181c57f62e823e8bdfa46ab9e4ff4
235 03ca77807e919db8807c3749086dc36fb478cac0
235 03ca77807e919db8807c3749086dc36fb478cac0
236 phase-heads -- 'sortdict()'
236 phase-heads -- 'sortdict()'
237 dc0947a82db884575bb76ea10ac97b08536bfa03 public
237 dc0947a82db884575bb76ea10ac97b08536bfa03 public
238 03ca77807e919db8807c3749086dc36fb478cac0 draft
238 03ca77807e919db8807c3749086dc36fb478cac0 draft
239 $ hg strip --no-backup A
239 $ hg strip --no-backup A
240 $ hg unbundle -q bundle
240 $ hg unbundle -q bundle
241 $ rm bundle
241 $ rm bundle
242 $ hg log -G -T '{node|short} {desc} {phase}\n'
242 $ hg log -G -T '{node|short} {desc} {phase}\n'
243 o 03ca77807e91 E draft
243 o 03ca77807e91 E draft
244 |
244 |
245 | o 215e7b0814e1 D secret
245 | o 4e4f9194f9f1 D secret
246 |/|
246 |/|
247 o | dc0947a82db8 C public
247 o | dc0947a82db8 C public
248 | |
248 | |
249 | o 112478962961 B secret
249 | o 112478962961 B secret
250 |/
250 |/
251 o 426bada5c675 A public
251 o 426bada5c675 A public
252
252
253
253
254 $ hg bundle --base 'A + C' -r D bundle
254 $ hg bundle --base 'A + C' -r D bundle
255 2 changesets found
255 2 changesets found
256 $ hg debugbundle bundle
256 $ hg debugbundle bundle
257 Stream params: sortdict([('Compression', 'BZ')])
257 Stream params: sortdict([('Compression', 'BZ')])
258 changegroup -- "sortdict([('version', '02'), ('nbchanges', '2'), ('targetphase', '2')])"
258 changegroup -- "sortdict([('version', '02'), ('nbchanges', '2'), ('targetphase', '2')])"
259 112478962961147124edd43549aedd1a335e44bf
259 112478962961147124edd43549aedd1a335e44bf
260 215e7b0814e1cac8e2614e7284f2a5dc266b4323
260 4e4f9194f9f181c57f62e823e8bdfa46ab9e4ff4
261 phase-heads -- 'sortdict()'
261 phase-heads -- 'sortdict()'
262 $ rm bundle
262 $ rm bundle
263
263
264 $ hg bundle --base A -r D bundle
264 $ hg bundle --base A -r D bundle
265 3 changesets found
265 3 changesets found
266 $ hg debugbundle bundle
266 $ hg debugbundle bundle
267 Stream params: sortdict([('Compression', 'BZ')])
267 Stream params: sortdict([('Compression', 'BZ')])
268 changegroup -- "sortdict([('version', '02'), ('nbchanges', '3'), ('targetphase', '2')])"
268 changegroup -- "sortdict([('version', '02'), ('nbchanges', '3'), ('targetphase', '2')])"
269 112478962961147124edd43549aedd1a335e44bf
269 112478962961147124edd43549aedd1a335e44bf
270 dc0947a82db884575bb76ea10ac97b08536bfa03
270 dc0947a82db884575bb76ea10ac97b08536bfa03
271 215e7b0814e1cac8e2614e7284f2a5dc266b4323
271 4e4f9194f9f181c57f62e823e8bdfa46ab9e4ff4
272 phase-heads -- 'sortdict()'
272 phase-heads -- 'sortdict()'
273 dc0947a82db884575bb76ea10ac97b08536bfa03 public
273 dc0947a82db884575bb76ea10ac97b08536bfa03 public
274 $ rm bundle
274 $ rm bundle
275
275
276 $ hg bundle --base 'B + C' -r 'D + E' bundle
276 $ hg bundle --base 'B + C' -r 'D + E' bundle
277 2 changesets found
277 2 changesets found
278 $ hg debugbundle bundle
278 $ hg debugbundle bundle
279 Stream params: sortdict([('Compression', 'BZ')])
279 Stream params: sortdict([('Compression', 'BZ')])
280 changegroup -- "sortdict([('version', '02'), ('nbchanges', '2'), ('targetphase', '2')])"
280 changegroup -- "sortdict([('version', '02'), ('nbchanges', '2'), ('targetphase', '2')])"
281 215e7b0814e1cac8e2614e7284f2a5dc266b4323
281 4e4f9194f9f181c57f62e823e8bdfa46ab9e4ff4
282 03ca77807e919db8807c3749086dc36fb478cac0
282 03ca77807e919db8807c3749086dc36fb478cac0
283 phase-heads -- 'sortdict()'
283 phase-heads -- 'sortdict()'
284 03ca77807e919db8807c3749086dc36fb478cac0 draft
284 03ca77807e919db8807c3749086dc36fb478cac0 draft
285 $ rm bundle
285 $ rm bundle
@@ -1,222 +1,234 b''
1 $ cat >> $HGRCPATH<<EOF
1 $ cat >> $HGRCPATH<<EOF
2 > [extensions]
2 > [extensions]
3 > drawdag=$TESTDIR/drawdag.py
3 > drawdag=$TESTDIR/drawdag.py
4 > [experimental]
4 > [experimental]
5 > evolution=all
5 > evolution=all
6 > EOF
6 > EOF
7
7
8 $ reinit () {
8 $ reinit () {
9 > rm -rf .hg && hg init
9 > rm -rf .hg && hg init
10 > }
10 > }
11
11
12 $ hg init
12 $ hg init
13
13
14 Test what said in drawdag.py docstring
14 Test what said in drawdag.py docstring
15
15
16 $ hg debugdrawdag <<'EOS'
16 $ hg debugdrawdag <<'EOS'
17 > c d
17 > c d
18 > |/
18 > |/
19 > b
19 > b
20 > |
20 > |
21 > a
21 > a
22 > EOS
22 > EOS
23
23
24 $ hg log -G -T '{rev} {desc} ({tags})'
24 $ hg log -G -T '{rev} {desc} ({tags})'
25 o 3 d (d tip)
25 o 3 d (d tip)
26 |
26 |
27 | o 2 c (c)
27 | o 2 c (c)
28 |/
28 |/
29 o 1 b (b)
29 o 1 b (b)
30 |
30 |
31 o 0 a (a)
31 o 0 a (a)
32
32
33 $ hg debugdrawdag <<'EOS'
33 $ hg debugdrawdag <<'EOS'
34 > foo bar bar foo
34 > foo bar bar foo
35 > | / | |
35 > | / | |
36 > ancestor(c,d) a baz
36 > ancestor(c,d) a baz
37 > EOS
37 > EOS
38
38
39 $ hg log -G -T '{desc}'
39 $ hg log -G -T '{desc}'
40 o foo
40 o foo
41 |\
41 |\
42 +---o bar
42 +---o bar
43 | | |
43 | | |
44 | o | baz
44 | o | baz
45 | /
45 | /
46 +---o d
46 +---o d
47 | |
47 | |
48 +---o c
48 +---o c
49 | |
49 | |
50 o | b
50 o | b
51 |/
51 |/
52 o a
52 o a
53
53
54 $ reinit
54 $ reinit
55
55
56 $ hg debugdrawdag <<'EOS'
56 $ hg debugdrawdag <<'EOS'
57 > o foo
57 > o foo
58 > |\
58 > |\
59 > +---o bar
59 > +---o bar
60 > | | |
60 > | | |
61 > | o | baz
61 > | o | baz
62 > | /
62 > | /
63 > +---o d
63 > +---o d
64 > | |
64 > | |
65 > +---o c
65 > +---o c
66 > | |
66 > | |
67 > o | b
67 > o | b
68 > |/
68 > |/
69 > o a
69 > o a
70 > EOS
70 > EOS
71
71
72 $ hg log -G -T '{desc}'
72 $ hg log -G -T '{desc}'
73 o foo
73 o foo
74 |\
74 |\
75 | | o d
75 | | o d
76 | |/
76 | |/
77 | | o c
77 | | o c
78 | |/
78 | |/
79 | | o bar
79 | | o bar
80 | |/|
80 | |/|
81 | o | b
81 | o | b
82 | |/
82 | |/
83 o / baz
83 o / baz
84 /
84 /
85 o a
85 o a
86
86
87 $ reinit
87 $ reinit
88
88
89 $ hg debugdrawdag <<'EOS'
89 $ hg debugdrawdag <<'EOS'
90 > o foo
90 > o foo
91 > |\
91 > |\
92 > | | o d
92 > | | o d
93 > | |/
93 > | |/
94 > | | o c
94 > | | o c
95 > | |/
95 > | |/
96 > | | o bar
96 > | | o bar
97 > | |/|
97 > | |/|
98 > | o | b
98 > | o | b
99 > | |/
99 > | |/
100 > o / baz
100 > o / baz
101 > /
101 > /
102 > o a
102 > o a
103 > EOS
103 > EOS
104
104
105 $ hg log -G -T '{desc}'
105 $ hg log -G -T '{desc}'
106 o foo
106 o foo
107 |\
107 |\
108 | | o d
108 | | o d
109 | |/
109 | |/
110 | | o c
110 | | o c
111 | |/
111 | |/
112 | | o bar
112 | | o bar
113 | |/|
113 | |/|
114 | o | b
114 | o | b
115 | |/
115 | |/
116 o / baz
116 o / baz
117 /
117 /
118 o a
118 o a
119
119
120 $ hg manifest -r a
121 a
122 $ hg manifest -r b
123 a
124 b
125 $ hg manifest -r bar
126 a
127 b
128 $ hg manifest -r foo
129 a
130 b
131 baz
120
132
121 Edges existed in repo are no-ops
133 Edges existed in repo are no-ops
122
134
123 $ reinit
135 $ reinit
124 $ hg debugdrawdag <<'EOS'
136 $ hg debugdrawdag <<'EOS'
125 > B C C
137 > B C C
126 > | | |
138 > | | |
127 > A A B
139 > A A B
128 > EOS
140 > EOS
129
141
130 $ hg log -G -T '{desc}'
142 $ hg log -G -T '{desc}'
131 o C
143 o C
132 |\
144 |\
133 | o B
145 | o B
134 |/
146 |/
135 o A
147 o A
136
148
137
149
138 $ hg debugdrawdag <<'EOS'
150 $ hg debugdrawdag <<'EOS'
139 > C D C
151 > C D C
140 > | | |
152 > | | |
141 > B B A
153 > B B A
142 > EOS
154 > EOS
143
155
144 $ hg log -G -T '{desc}'
156 $ hg log -G -T '{desc}'
145 o D
157 o D
146 |
158 |
147 | o C
159 | o C
148 |/|
160 |/|
149 o | B
161 o | B
150 |/
162 |/
151 o A
163 o A
152
164
153
165
154 Node with more than 2 parents are disallowed
166 Node with more than 2 parents are disallowed
155
167
156 $ hg debugdrawdag <<'EOS'
168 $ hg debugdrawdag <<'EOS'
157 > A
169 > A
158 > /|\
170 > /|\
159 > D B C
171 > D B C
160 > EOS
172 > EOS
161 abort: A: too many parents: C D B
173 abort: A: too many parents: C D B
162 [255]
174 [255]
163
175
164 Cycles are disallowed
176 Cycles are disallowed
165
177
166 $ hg debugdrawdag <<'EOS'
178 $ hg debugdrawdag <<'EOS'
167 > A
179 > A
168 > |
180 > |
169 > A
181 > A
170 > EOS
182 > EOS
171 abort: the graph has cycles
183 abort: the graph has cycles
172 [255]
184 [255]
173
185
174 $ hg debugdrawdag <<'EOS'
186 $ hg debugdrawdag <<'EOS'
175 > A
187 > A
176 > |
188 > |
177 > B
189 > B
178 > |
190 > |
179 > A
191 > A
180 > EOS
192 > EOS
181 abort: the graph has cycles
193 abort: the graph has cycles
182 [255]
194 [255]
183
195
184 Create obsmarkers via comments
196 Create obsmarkers via comments
185
197
186 $ reinit
198 $ reinit
187
199
188 $ hg debugdrawdag <<'EOS'
200 $ hg debugdrawdag <<'EOS'
189 > G
201 > G
190 > |
202 > |
191 > I D C F # split: B -> E, F, G
203 > I D C F # split: B -> E, F, G
192 > \ \| | # replace: C -> D -> H
204 > \ \| | # replace: C -> D -> H
193 > H B E # prune: F, I
205 > H B E # prune: F, I
194 > \|/
206 > \|/
195 > A
207 > A
196 > EOS
208 > EOS
197
209
198 $ hg log -r 'sort(all(), topo)' -G --hidden -T '{desc} {node}'
210 $ hg log -r 'sort(all(), topo)' -G --hidden -T '{desc} {node}'
199 o G 711f53bbef0bebd12eb6f0511d5e2e998b984846
211 o G 711f53bbef0bebd12eb6f0511d5e2e998b984846
200 |
212 |
201 x F 64a8289d249234b9886244d379f15e6b650b28e3
213 x F 64a8289d249234b9886244d379f15e6b650b28e3
202 |
214 |
203 o E 7fb047a69f220c21711122dfd94305a9efb60cba
215 o E 7fb047a69f220c21711122dfd94305a9efb60cba
204 |
216 |
205 | x D be0ef73c17ade3fc89dc41701eb9fc3a91b58282
217 | x D be0ef73c17ade3fc89dc41701eb9fc3a91b58282
206 | |
218 | |
207 | | x C 26805aba1e600a82e93661149f2313866a221a7b
219 | | x C 26805aba1e600a82e93661149f2313866a221a7b
208 | |/
220 | |/
209 | x B 112478962961147124edd43549aedd1a335e44bf
221 | x B 112478962961147124edd43549aedd1a335e44bf
210 |/
222 |/
211 | x I 58e6b987bf7045fcd9c54f496396ca1d1fc81047
223 | x I 58e6b987bf7045fcd9c54f496396ca1d1fc81047
212 | |
224 | |
213 | o H 575c4b5ec114d64b681d33f8792853568bfb2b2c
225 | o H 575c4b5ec114d64b681d33f8792853568bfb2b2c
214 |/
226 |/
215 o A 426bada5c67598ca65036d57d9e4b64b0c1ce7a0
227 o A 426bada5c67598ca65036d57d9e4b64b0c1ce7a0
216
228
217 $ hg debugobsolete
229 $ hg debugobsolete
218 112478962961147124edd43549aedd1a335e44bf 7fb047a69f220c21711122dfd94305a9efb60cba 64a8289d249234b9886244d379f15e6b650b28e3 711f53bbef0bebd12eb6f0511d5e2e998b984846 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
230 112478962961147124edd43549aedd1a335e44bf 7fb047a69f220c21711122dfd94305a9efb60cba 64a8289d249234b9886244d379f15e6b650b28e3 711f53bbef0bebd12eb6f0511d5e2e998b984846 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
219 26805aba1e600a82e93661149f2313866a221a7b be0ef73c17ade3fc89dc41701eb9fc3a91b58282 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
231 26805aba1e600a82e93661149f2313866a221a7b be0ef73c17ade3fc89dc41701eb9fc3a91b58282 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
220 be0ef73c17ade3fc89dc41701eb9fc3a91b58282 575c4b5ec114d64b681d33f8792853568bfb2b2c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
232 be0ef73c17ade3fc89dc41701eb9fc3a91b58282 575c4b5ec114d64b681d33f8792853568bfb2b2c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
221 64a8289d249234b9886244d379f15e6b650b28e3 0 {7fb047a69f220c21711122dfd94305a9efb60cba} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
233 64a8289d249234b9886244d379f15e6b650b28e3 0 {7fb047a69f220c21711122dfd94305a9efb60cba} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
222 58e6b987bf7045fcd9c54f496396ca1d1fc81047 0 {575c4b5ec114d64b681d33f8792853568bfb2b2c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
234 58e6b987bf7045fcd9c54f496396ca1d1fc81047 0 {575c4b5ec114d64b681d33f8792853568bfb2b2c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -1,381 +1,381 b''
1 $ cat >> $HGRCPATH <<EOF
1 $ cat >> $HGRCPATH <<EOF
2 > [extensions]
2 > [extensions]
3 > rebase=
3 > rebase=
4 > drawdag=$TESTDIR/drawdag.py
4 > drawdag=$TESTDIR/drawdag.py
5 >
5 >
6 > [phases]
6 > [phases]
7 > publish=False
7 > publish=False
8 >
8 >
9 > [alias]
9 > [alias]
10 > tglog = log -G --template "{rev}: {desc}"
10 > tglog = log -G --template "{rev}: {desc}"
11 > EOF
11 > EOF
12
12
13 $ rebasewithdag() {
13 $ rebasewithdag() {
14 > N=`$PYTHON -c "print($N+1)"`
14 > N=`$PYTHON -c "print($N+1)"`
15 > hg init repo$N && cd repo$N
15 > hg init repo$N && cd repo$N
16 > hg debugdrawdag
16 > hg debugdrawdag
17 > hg rebase "$@" > _rebasetmp
17 > hg rebase "$@" > _rebasetmp
18 > r=$?
18 > r=$?
19 > grep -v 'saved backup bundle' _rebasetmp
19 > grep -v 'saved backup bundle' _rebasetmp
20 > [ $r -eq 0 ] && hg tglog
20 > [ $r -eq 0 ] && hg tglog
21 > cd ..
21 > cd ..
22 > return $r
22 > return $r
23 > }
23 > }
24
24
25 Single branching point, without merge:
25 Single branching point, without merge:
26
26
27 $ rebasewithdag -b D -d Z <<'EOS'
27 $ rebasewithdag -b D -d Z <<'EOS'
28 > D E
28 > D E
29 > |/
29 > |/
30 > Z B C # C: branching point, E should be picked
30 > Z B C # C: branching point, E should be picked
31 > \|/ # B should not be picked
31 > \|/ # B should not be picked
32 > A
32 > A
33 > |
33 > |
34 > R
34 > R
35 > EOS
35 > EOS
36 rebasing 3:d6003a550c2c "C" (C)
36 rebasing 3:d6003a550c2c "C" (C)
37 rebasing 5:4526cf523425 "D" (D)
37 rebasing 5:4526cf523425 "D" (D)
38 rebasing 6:b296604d9846 "E" (E tip)
38 rebasing 6:b296604d9846 "E" (E tip)
39 o 6: E
39 o 6: E
40 |
40 |
41 | o 5: D
41 | o 5: D
42 |/
42 |/
43 o 4: C
43 o 4: C
44 |
44 |
45 o 3: Z
45 o 3: Z
46 |
46 |
47 | o 2: B
47 | o 2: B
48 |/
48 |/
49 o 1: A
49 o 1: A
50 |
50 |
51 o 0: R
51 o 0: R
52
52
53 Multiple branching points caused by selecting a single merge changeset:
53 Multiple branching points caused by selecting a single merge changeset:
54
54
55 $ rebasewithdag -b E -d Z <<'EOS'
55 $ rebasewithdag -b E -d Z <<'EOS'
56 > E
56 > E
57 > /|
57 > /|
58 > B C D # B, C: multiple branching points
58 > B C D # B, C: multiple branching points
59 > | |/ # D should not be picked
59 > | |/ # D should not be picked
60 > Z | /
60 > Z | /
61 > \|/
61 > \|/
62 > A
62 > A
63 > |
63 > |
64 > R
64 > R
65 > EOS
65 > EOS
66 rebasing 2:c1e6b162678d "B" (B)
66 rebasing 2:c1e6b162678d "B" (B)
67 rebasing 3:d6003a550c2c "C" (C)
67 rebasing 3:d6003a550c2c "C" (C)
68 rebasing 6:5251e0cb7302 "E" (E tip)
68 rebasing 6:54c8f00cb91c "E" (E tip)
69 o 6: E
69 o 6: E
70 |\
70 |\
71 | o 5: C
71 | o 5: C
72 | |
72 | |
73 o | 4: B
73 o | 4: B
74 |/
74 |/
75 o 3: Z
75 o 3: Z
76 |
76 |
77 | o 2: D
77 | o 2: D
78 |/
78 |/
79 o 1: A
79 o 1: A
80 |
80 |
81 o 0: R
81 o 0: R
82
82
83 Rebase should not extend the "--base" revset using "descendants":
83 Rebase should not extend the "--base" revset using "descendants":
84
84
85 $ rebasewithdag -b B -d Z <<'EOS'
85 $ rebasewithdag -b B -d Z <<'EOS'
86 > E
86 > E
87 > /|
87 > /|
88 > Z B C # descendants(B) = B+E. With E, C will be included incorrectly
88 > Z B C # descendants(B) = B+E. With E, C will be included incorrectly
89 > \|/
89 > \|/
90 > A
90 > A
91 > |
91 > |
92 > R
92 > R
93 > EOS
93 > EOS
94 rebasing 2:c1e6b162678d "B" (B)
94 rebasing 2:c1e6b162678d "B" (B)
95 rebasing 5:5251e0cb7302 "E" (E tip)
95 rebasing 5:54c8f00cb91c "E" (E tip)
96 o 5: E
96 o 5: E
97 |\
97 |\
98 | o 4: B
98 | o 4: B
99 | |
99 | |
100 | o 3: Z
100 | o 3: Z
101 | |
101 | |
102 o | 2: C
102 o | 2: C
103 |/
103 |/
104 o 1: A
104 o 1: A
105 |
105 |
106 o 0: R
106 o 0: R
107
107
108 Rebase should not simplify the "--base" revset using "roots":
108 Rebase should not simplify the "--base" revset using "roots":
109
109
110 $ rebasewithdag -b B+E -d Z <<'EOS'
110 $ rebasewithdag -b B+E -d Z <<'EOS'
111 > E
111 > E
112 > /|
112 > /|
113 > Z B C # roots(B+E) = B. Without E, C will be missed incorrectly
113 > Z B C # roots(B+E) = B. Without E, C will be missed incorrectly
114 > \|/
114 > \|/
115 > A
115 > A
116 > |
116 > |
117 > R
117 > R
118 > EOS
118 > EOS
119 rebasing 2:c1e6b162678d "B" (B)
119 rebasing 2:c1e6b162678d "B" (B)
120 rebasing 3:d6003a550c2c "C" (C)
120 rebasing 3:d6003a550c2c "C" (C)
121 rebasing 5:5251e0cb7302 "E" (E tip)
121 rebasing 5:54c8f00cb91c "E" (E tip)
122 o 5: E
122 o 5: E
123 |\
123 |\
124 | o 4: C
124 | o 4: C
125 | |
125 | |
126 o | 3: B
126 o | 3: B
127 |/
127 |/
128 o 2: Z
128 o 2: Z
129 |
129 |
130 o 1: A
130 o 1: A
131 |
131 |
132 o 0: R
132 o 0: R
133
133
134 The destination is one of the two branching points of a merge:
134 The destination is one of the two branching points of a merge:
135
135
136 $ rebasewithdag -b F -d Z <<'EOS'
136 $ rebasewithdag -b F -d Z <<'EOS'
137 > F
137 > F
138 > / \
138 > / \
139 > E D
139 > E D
140 > / /
140 > / /
141 > Z C
141 > Z C
142 > \ /
142 > \ /
143 > B
143 > B
144 > |
144 > |
145 > A
145 > A
146 > EOS
146 > EOS
147 nothing to rebase
147 nothing to rebase
148 [1]
148 [1]
149
149
150 Multiple branching points caused by multiple bases (issue5420):
150 Multiple branching points caused by multiple bases (issue5420):
151
151
152 $ rebasewithdag -b E1+E2+C2+B1 -d Z <<'EOS'
152 $ rebasewithdag -b E1+E2+C2+B1 -d Z <<'EOS'
153 > Z E2
153 > Z E2
154 > | /
154 > | /
155 > F E1 C2
155 > F E1 C2
156 > |/ /
156 > |/ /
157 > E C1 B2
157 > E C1 B2
158 > |/ /
158 > |/ /
159 > C B1
159 > C B1
160 > |/
160 > |/
161 > B
161 > B
162 > |
162 > |
163 > A
163 > A
164 > |
164 > |
165 > R
165 > R
166 > EOS
166 > EOS
167 rebasing 3:a113dbaa660a "B1" (B1)
167 rebasing 3:a113dbaa660a "B1" (B1)
168 rebasing 5:06ce7b1cc8c2 "B2" (B2)
168 rebasing 5:06ce7b1cc8c2 "B2" (B2)
169 rebasing 6:0ac98cce32d3 "C1" (C1)
169 rebasing 6:0ac98cce32d3 "C1" (C1)
170 rebasing 8:781512f5e33d "C2" (C2)
170 rebasing 8:781512f5e33d "C2" (C2)
171 rebasing 9:428d8c18f641 "E1" (E1)
171 rebasing 9:428d8c18f641 "E1" (E1)
172 rebasing 11:e1bf82f6b6df "E2" (E2)
172 rebasing 11:e1bf82f6b6df "E2" (E2)
173 o 12: E2
173 o 12: E2
174 |
174 |
175 o 11: E1
175 o 11: E1
176 |
176 |
177 | o 10: C2
177 | o 10: C2
178 | |
178 | |
179 | o 9: C1
179 | o 9: C1
180 |/
180 |/
181 | o 8: B2
181 | o 8: B2
182 | |
182 | |
183 | o 7: B1
183 | o 7: B1
184 |/
184 |/
185 o 6: Z
185 o 6: Z
186 |
186 |
187 o 5: F
187 o 5: F
188 |
188 |
189 o 4: E
189 o 4: E
190 |
190 |
191 o 3: C
191 o 3: C
192 |
192 |
193 o 2: B
193 o 2: B
194 |
194 |
195 o 1: A
195 o 1: A
196 |
196 |
197 o 0: R
197 o 0: R
198
198
199 Multiple branching points with multiple merges:
199 Multiple branching points with multiple merges:
200
200
201 $ rebasewithdag -b G+P -d Z <<'EOS'
201 $ rebasewithdag -b G+P -d Z <<'EOS'
202 > G H P
202 > G H P
203 > |\ /| |\
203 > |\ /| |\
204 > F E D M N
204 > F E D M N
205 > \|/| /| |\
205 > \|/| /| |\
206 > Z C B I J K L
206 > Z C B I J K L
207 > \|/ |/ |/
207 > \|/ |/ |/
208 > A A A
208 > A A A
209 > EOS
209 > EOS
210 rebasing 2:dc0947a82db8 "C" (C)
210 rebasing 2:dc0947a82db8 "C" (C)
211 rebasing 8:215e7b0814e1 "D" (D)
211 rebasing 8:4e4f9194f9f1 "D" (D)
212 rebasing 9:03ca77807e91 "E" (E)
212 rebasing 9:03ca77807e91 "E" (E)
213 rebasing 10:afc707c82df0 "F" (F)
213 rebasing 10:afc707c82df0 "F" (F)
214 rebasing 13:018caa673317 "G" (G)
214 rebasing 13:690dfff91e9e "G" (G)
215 rebasing 14:4f710fbd68cb "H" (H)
215 rebasing 14:2893b886bb10 "H" (H)
216 rebasing 3:08ebfeb61bac "I" (I)
216 rebasing 3:08ebfeb61bac "I" (I)
217 rebasing 4:a0a5005cec67 "J" (J)
217 rebasing 4:a0a5005cec67 "J" (J)
218 rebasing 5:83780307a7e8 "K" (K)
218 rebasing 5:83780307a7e8 "K" (K)
219 rebasing 6:e131637a1cb6 "L" (L)
219 rebasing 6:e131637a1cb6 "L" (L)
220 rebasing 11:d6fe3d11d95d "M" (M)
220 rebasing 11:d1f6d0c3c7e4 "M" (M)
221 rebasing 12:fa1e02269063 "N" (N)
221 rebasing 12:7aaec6f81888 "N" (N)
222 rebasing 15:448b1a498430 "P" (P tip)
222 rebasing 15:325bc8f1760d "P" (P tip)
223 o 15: P
223 o 15: P
224 |\
224 |\
225 | o 14: N
225 | o 14: N
226 | |\
226 | |\
227 o \ \ 13: M
227 o \ \ 13: M
228 |\ \ \
228 |\ \ \
229 | | | o 12: L
229 | | | o 12: L
230 | | | |
230 | | | |
231 | | o | 11: K
231 | | o | 11: K
232 | | |/
232 | | |/
233 | o / 10: J
233 | o / 10: J
234 | |/
234 | |/
235 o / 9: I
235 o / 9: I
236 |/
236 |/
237 | o 8: H
237 | o 8: H
238 | |\
238 | |\
239 | | | o 7: G
239 | | | o 7: G
240 | | |/|
240 | | |/|
241 | | | o 6: F
241 | | | o 6: F
242 | | | |
242 | | | |
243 | | o | 5: E
243 | | o | 5: E
244 | | |/
244 | | |/
245 | o | 4: D
245 | o | 4: D
246 | |\|
246 | |\|
247 +---o 3: C
247 +---o 3: C
248 | |
248 | |
249 o | 2: Z
249 o | 2: Z
250 | |
250 | |
251 | o 1: B
251 | o 1: B
252 |/
252 |/
253 o 0: A
253 o 0: A
254
254
255 Slightly more complex merge case (mentioned in https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-November/091074.html):
255 Slightly more complex merge case (mentioned in https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-November/091074.html):
256
256
257 $ rebasewithdag -b A3+B3 -d Z <<'EOF'
257 $ rebasewithdag -b A3+B3 -d Z <<'EOF'
258 > Z C1 A3 B3
258 > Z C1 A3 B3
259 > | / / \ / \
259 > | / / \ / \
260 > M3 C0 A1 A2 B1 B2
260 > M3 C0 A1 A2 B1 B2
261 > | / | | | |
261 > | / | | | |
262 > M2 M1 C1 C1 M3
262 > M2 M1 C1 C1 M3
263 > |
263 > |
264 > M1
264 > M1
265 > |
265 > |
266 > M0
266 > M0
267 > EOF
267 > EOF
268 rebasing 4:8817fae53c94 "C0" (C0)
268 rebasing 4:8817fae53c94 "C0" (C0)
269 rebasing 6:06ca5dfe3b5b "B2" (B2)
269 rebasing 6:06ca5dfe3b5b "B2" (B2)
270 rebasing 7:73508237b032 "C1" (C1)
270 rebasing 7:73508237b032 "C1" (C1)
271 rebasing 9:fdb955e2faed "A2" (A2)
271 rebasing 9:fdb955e2faed "A2" (A2)
272 rebasing 11:1b2f368c3cb5 "A3" (A3)
272 rebasing 11:4e449bd1a643 "A3" (A3)
273 rebasing 10:0a33b0519128 "B1" (B1)
273 rebasing 10:0a33b0519128 "B1" (B1)
274 rebasing 12:bd6a37b5b67a "B3" (B3 tip)
274 rebasing 12:209327807c3a "B3" (B3 tip)
275 o 12: B3
275 o 12: B3
276 |\
276 |\
277 | o 11: B1
277 | o 11: B1
278 | |
278 | |
279 | | o 10: A3
279 | | o 10: A3
280 | | |\
280 | | |\
281 | +---o 9: A2
281 | +---o 9: A2
282 | | |
282 | | |
283 | o | 8: C1
283 | o | 8: C1
284 | | |
284 | | |
285 o | | 7: B2
285 o | | 7: B2
286 | | |
286 | | |
287 | o | 6: C0
287 | o | 6: C0
288 |/ /
288 |/ /
289 o | 5: Z
289 o | 5: Z
290 | |
290 | |
291 o | 4: M3
291 o | 4: M3
292 | |
292 | |
293 o | 3: M2
293 o | 3: M2
294 | |
294 | |
295 | o 2: A1
295 | o 2: A1
296 |/
296 |/
297 o 1: M1
297 o 1: M1
298 |
298 |
299 o 0: M0
299 o 0: M0
300
300
301 Disconnected graph:
301 Disconnected graph:
302
302
303 $ rebasewithdag -b B -d Z <<'EOS'
303 $ rebasewithdag -b B -d Z <<'EOS'
304 > B
304 > B
305 > |
305 > |
306 > Z A
306 > Z A
307 > EOS
307 > EOS
308 nothing to rebase from 112478962961 to 48b9aae0607f
308 nothing to rebase from 112478962961 to 48b9aae0607f
309 [1]
309 [1]
310
310
311 Multiple roots. Roots are ancestors of dest:
311 Multiple roots. Roots are ancestors of dest:
312
312
313 $ rebasewithdag -b B+D -d Z <<'EOF'
313 $ rebasewithdag -b B+D -d Z <<'EOF'
314 > D Z B
314 > D Z B
315 > \|\|
315 > \|\|
316 > C A
316 > C A
317 > EOF
317 > EOF
318 rebasing 2:112478962961 "B" (B)
318 rebasing 2:112478962961 "B" (B)
319 rebasing 3:b70f76719894 "D" (D)
319 rebasing 3:b70f76719894 "D" (D)
320 o 4: D
320 o 4: D
321 |
321 |
322 | o 3: B
322 | o 3: B
323 |/
323 |/
324 o 2: Z
324 o 2: Z
325 |\
325 |\
326 | o 1: C
326 | o 1: C
327 |
327 |
328 o 0: A
328 o 0: A
329
329
330 Multiple roots. One root is not an ancestor of dest:
330 Multiple roots. One root is not an ancestor of dest:
331
331
332 $ rebasewithdag -b B+D -d Z <<'EOF'
332 $ rebasewithdag -b B+D -d Z <<'EOF'
333 > Z B D
333 > Z B D
334 > \|\|
334 > \|\|
335 > A C
335 > A C
336 > EOF
336 > EOF
337 nothing to rebase from 86d01f49c0d9+b70f76719894 to 262e37e34f63
337 nothing to rebase from f675d5a1c6a4+b70f76719894 to 262e37e34f63
338 [1]
338 [1]
339
339
340 Multiple roots. One root is not an ancestor of dest. Select using a merge:
340 Multiple roots. One root is not an ancestor of dest. Select using a merge:
341
341
342 $ rebasewithdag -b E -d Z <<'EOF'
342 $ rebasewithdag -b E -d Z <<'EOF'
343 > E
343 > E
344 > |\
344 > |\
345 > Z B D
345 > Z B D
346 > \|\|
346 > \|\|
347 > A C
347 > A C
348 > EOF
348 > EOF
349 rebasing 2:86d01f49c0d9 "B" (B)
349 rebasing 2:f675d5a1c6a4 "B" (B)
350 rebasing 5:539a0ff83ea9 "E" (E tip)
350 rebasing 5:f68696fe6af8 "E" (E tip)
351 o 5: E
351 o 5: E
352 |\
352 |\
353 | o 4: B
353 | o 4: B
354 | |\
354 | |\
355 | | o 3: Z
355 | | o 3: Z
356 | | |
356 | | |
357 o | | 2: D
357 o | | 2: D
358 |/ /
358 |/ /
359 o / 1: C
359 o / 1: C
360 /
360 /
361 o 0: A
361 o 0: A
362
362
363 Multiple roots. Two children share two parents while dest has only one parent:
363 Multiple roots. Two children share two parents while dest has only one parent:
364
364
365 $ rebasewithdag -b B+D -d Z <<'EOF'
365 $ rebasewithdag -b B+D -d Z <<'EOF'
366 > Z B D
366 > Z B D
367 > \|\|\
367 > \|\|\
368 > A C A
368 > A C A
369 > EOF
369 > EOF
370 rebasing 2:86d01f49c0d9 "B" (B)
370 rebasing 2:f675d5a1c6a4 "B" (B)
371 rebasing 3:b7df2ca01aa8 "D" (D)
371 rebasing 3:c2a779e13b56 "D" (D)
372 o 4: D
372 o 4: D
373 |\
373 |\
374 +---o 3: B
374 +---o 3: B
375 | |/
375 | |/
376 | o 2: Z
376 | o 2: Z
377 | |
377 | |
378 o | 1: C
378 o | 1: C
379 /
379 /
380 o 0: A
380 o 0: A
381
381
@@ -1,1099 +1,1099 b''
1 $ echo "[format]" >> $HGRCPATH
1 $ echo "[format]" >> $HGRCPATH
2 $ echo "usegeneraldelta=yes" >> $HGRCPATH
2 $ echo "usegeneraldelta=yes" >> $HGRCPATH
3 $ echo "[extensions]" >> $HGRCPATH
3 $ echo "[extensions]" >> $HGRCPATH
4 $ echo "strip=" >> $HGRCPATH
4 $ echo "strip=" >> $HGRCPATH
5 $ echo "drawdag=$TESTDIR/drawdag.py" >> $HGRCPATH
5 $ echo "drawdag=$TESTDIR/drawdag.py" >> $HGRCPATH
6
6
7 $ restore() {
7 $ restore() {
8 > hg unbundle -q .hg/strip-backup/*
8 > hg unbundle -q .hg/strip-backup/*
9 > rm .hg/strip-backup/*
9 > rm .hg/strip-backup/*
10 > }
10 > }
11 $ teststrip() {
11 $ teststrip() {
12 > hg up -C $1
12 > hg up -C $1
13 > echo % before update $1, strip $2
13 > echo % before update $1, strip $2
14 > hg parents
14 > hg parents
15 > hg --traceback strip $2
15 > hg --traceback strip $2
16 > echo % after update $1, strip $2
16 > echo % after update $1, strip $2
17 > hg parents
17 > hg parents
18 > restore
18 > restore
19 > }
19 > }
20
20
21 $ hg init test
21 $ hg init test
22 $ cd test
22 $ cd test
23
23
24 $ echo foo > bar
24 $ echo foo > bar
25 $ hg ci -Ama
25 $ hg ci -Ama
26 adding bar
26 adding bar
27
27
28 $ echo more >> bar
28 $ echo more >> bar
29 $ hg ci -Amb
29 $ hg ci -Amb
30
30
31 $ echo blah >> bar
31 $ echo blah >> bar
32 $ hg ci -Amc
32 $ hg ci -Amc
33
33
34 $ hg up 1
34 $ hg up 1
35 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
35 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
36 $ echo blah >> bar
36 $ echo blah >> bar
37 $ hg ci -Amd
37 $ hg ci -Amd
38 created new head
38 created new head
39
39
40 $ echo final >> bar
40 $ echo final >> bar
41 $ hg ci -Ame
41 $ hg ci -Ame
42
42
43 $ hg log
43 $ hg log
44 changeset: 4:443431ffac4f
44 changeset: 4:443431ffac4f
45 tag: tip
45 tag: tip
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: e
48 summary: e
49
49
50 changeset: 3:65bd5f99a4a3
50 changeset: 3:65bd5f99a4a3
51 parent: 1:ef3a871183d7
51 parent: 1:ef3a871183d7
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: d
54 summary: d
55
55
56 changeset: 2:264128213d29
56 changeset: 2:264128213d29
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: c
59 summary: c
60
60
61 changeset: 1:ef3a871183d7
61 changeset: 1:ef3a871183d7
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: b
64 summary: b
65
65
66 changeset: 0:9ab35a2d17cb
66 changeset: 0:9ab35a2d17cb
67 user: test
67 user: test
68 date: Thu Jan 01 00:00:00 1970 +0000
68 date: Thu Jan 01 00:00:00 1970 +0000
69 summary: a
69 summary: a
70
70
71
71
72 $ teststrip 4 4
72 $ teststrip 4 4
73 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
73 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
74 % before update 4, strip 4
74 % before update 4, strip 4
75 changeset: 4:443431ffac4f
75 changeset: 4:443431ffac4f
76 tag: tip
76 tag: tip
77 user: test
77 user: test
78 date: Thu Jan 01 00:00:00 1970 +0000
78 date: Thu Jan 01 00:00:00 1970 +0000
79 summary: e
79 summary: e
80
80
81 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
81 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
82 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
82 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
83 % after update 4, strip 4
83 % after update 4, strip 4
84 changeset: 3:65bd5f99a4a3
84 changeset: 3:65bd5f99a4a3
85 tag: tip
85 tag: tip
86 parent: 1:ef3a871183d7
86 parent: 1:ef3a871183d7
87 user: test
87 user: test
88 date: Thu Jan 01 00:00:00 1970 +0000
88 date: Thu Jan 01 00:00:00 1970 +0000
89 summary: d
89 summary: d
90
90
91 $ teststrip 4 3
91 $ teststrip 4 3
92 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
92 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
93 % before update 4, strip 3
93 % before update 4, strip 3
94 changeset: 4:443431ffac4f
94 changeset: 4:443431ffac4f
95 tag: tip
95 tag: tip
96 user: test
96 user: test
97 date: Thu Jan 01 00:00:00 1970 +0000
97 date: Thu Jan 01 00:00:00 1970 +0000
98 summary: e
98 summary: e
99
99
100 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
100 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
101 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
101 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
102 % after update 4, strip 3
102 % after update 4, strip 3
103 changeset: 1:ef3a871183d7
103 changeset: 1:ef3a871183d7
104 user: test
104 user: test
105 date: Thu Jan 01 00:00:00 1970 +0000
105 date: Thu Jan 01 00:00:00 1970 +0000
106 summary: b
106 summary: b
107
107
108 $ teststrip 1 4
108 $ teststrip 1 4
109 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
109 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
110 % before update 1, strip 4
110 % before update 1, strip 4
111 changeset: 1:ef3a871183d7
111 changeset: 1:ef3a871183d7
112 user: test
112 user: test
113 date: Thu Jan 01 00:00:00 1970 +0000
113 date: Thu Jan 01 00:00:00 1970 +0000
114 summary: b
114 summary: b
115
115
116 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
116 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
117 % after update 1, strip 4
117 % after update 1, strip 4
118 changeset: 1:ef3a871183d7
118 changeset: 1:ef3a871183d7
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: b
121 summary: b
122
122
123 $ teststrip 4 2
123 $ teststrip 4 2
124 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
124 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
125 % before update 4, strip 2
125 % before update 4, strip 2
126 changeset: 4:443431ffac4f
126 changeset: 4:443431ffac4f
127 tag: tip
127 tag: tip
128 user: test
128 user: test
129 date: Thu Jan 01 00:00:00 1970 +0000
129 date: Thu Jan 01 00:00:00 1970 +0000
130 summary: e
130 summary: e
131
131
132 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
132 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
133 % after update 4, strip 2
133 % after update 4, strip 2
134 changeset: 3:443431ffac4f
134 changeset: 3:443431ffac4f
135 tag: tip
135 tag: tip
136 user: test
136 user: test
137 date: Thu Jan 01 00:00:00 1970 +0000
137 date: Thu Jan 01 00:00:00 1970 +0000
138 summary: e
138 summary: e
139
139
140 $ teststrip 4 1
140 $ teststrip 4 1
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 % before update 4, strip 1
142 % before update 4, strip 1
143 changeset: 4:264128213d29
143 changeset: 4:264128213d29
144 tag: tip
144 tag: tip
145 parent: 1:ef3a871183d7
145 parent: 1:ef3a871183d7
146 user: test
146 user: test
147 date: Thu Jan 01 00:00:00 1970 +0000
147 date: Thu Jan 01 00:00:00 1970 +0000
148 summary: c
148 summary: c
149
149
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 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
151 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
152 % after update 4, strip 1
152 % after update 4, strip 1
153 changeset: 0:9ab35a2d17cb
153 changeset: 0:9ab35a2d17cb
154 tag: tip
154 tag: tip
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: a
157 summary: a
158
158
159 $ teststrip null 4
159 $ teststrip null 4
160 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
160 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
161 % before update null, strip 4
161 % before update null, strip 4
162 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
162 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
163 % after update null, strip 4
163 % after update null, strip 4
164
164
165 $ hg log
165 $ hg log
166 changeset: 4:264128213d29
166 changeset: 4:264128213d29
167 tag: tip
167 tag: tip
168 parent: 1:ef3a871183d7
168 parent: 1:ef3a871183d7
169 user: test
169 user: test
170 date: Thu Jan 01 00:00:00 1970 +0000
170 date: Thu Jan 01 00:00:00 1970 +0000
171 summary: c
171 summary: c
172
172
173 changeset: 3:443431ffac4f
173 changeset: 3:443431ffac4f
174 user: test
174 user: test
175 date: Thu Jan 01 00:00:00 1970 +0000
175 date: Thu Jan 01 00:00:00 1970 +0000
176 summary: e
176 summary: e
177
177
178 changeset: 2:65bd5f99a4a3
178 changeset: 2:65bd5f99a4a3
179 user: test
179 user: test
180 date: Thu Jan 01 00:00:00 1970 +0000
180 date: Thu Jan 01 00:00:00 1970 +0000
181 summary: d
181 summary: d
182
182
183 changeset: 1:ef3a871183d7
183 changeset: 1:ef3a871183d7
184 user: test
184 user: test
185 date: Thu Jan 01 00:00:00 1970 +0000
185 date: Thu Jan 01 00:00:00 1970 +0000
186 summary: b
186 summary: b
187
187
188 changeset: 0:9ab35a2d17cb
188 changeset: 0:9ab35a2d17cb
189 user: test
189 user: test
190 date: Thu Jan 01 00:00:00 1970 +0000
190 date: Thu Jan 01 00:00:00 1970 +0000
191 summary: a
191 summary: a
192
192
193 $ hg up -C 4
193 $ hg up -C 4
194 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
194 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
195 $ hg parents
195 $ hg parents
196 changeset: 4:264128213d29
196 changeset: 4:264128213d29
197 tag: tip
197 tag: tip
198 parent: 1:ef3a871183d7
198 parent: 1:ef3a871183d7
199 user: test
199 user: test
200 date: Thu Jan 01 00:00:00 1970 +0000
200 date: Thu Jan 01 00:00:00 1970 +0000
201 summary: c
201 summary: c
202
202
203
203
204 $ hg --traceback strip 4
204 $ hg --traceback strip 4
205 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
205 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
206 saved backup bundle to $TESTTMP/test/.hg/strip-backup/264128213d29-0b39d6bf-backup.hg (glob)
206 saved backup bundle to $TESTTMP/test/.hg/strip-backup/264128213d29-0b39d6bf-backup.hg (glob)
207 $ hg parents
207 $ hg parents
208 changeset: 1:ef3a871183d7
208 changeset: 1:ef3a871183d7
209 user: test
209 user: test
210 date: Thu Jan 01 00:00:00 1970 +0000
210 date: Thu Jan 01 00:00:00 1970 +0000
211 summary: b
211 summary: b
212
212
213 $ hg debugbundle .hg/strip-backup/*
213 $ hg debugbundle .hg/strip-backup/*
214 Stream params: sortdict([('Compression', 'BZ')])
214 Stream params: sortdict([('Compression', 'BZ')])
215 changegroup -- "sortdict([('version', '02'), ('nbchanges', '1')])"
215 changegroup -- "sortdict([('version', '02'), ('nbchanges', '1')])"
216 264128213d290d868c54642d13aeaa3675551a78
216 264128213d290d868c54642d13aeaa3675551a78
217 phase-heads -- 'sortdict()'
217 phase-heads -- 'sortdict()'
218 264128213d290d868c54642d13aeaa3675551a78 draft
218 264128213d290d868c54642d13aeaa3675551a78 draft
219 $ hg pull .hg/strip-backup/*
219 $ hg pull .hg/strip-backup/*
220 pulling from .hg/strip-backup/264128213d29-0b39d6bf-backup.hg
220 pulling from .hg/strip-backup/264128213d29-0b39d6bf-backup.hg
221 searching for changes
221 searching for changes
222 adding changesets
222 adding changesets
223 adding manifests
223 adding manifests
224 adding file changes
224 adding file changes
225 added 1 changesets with 0 changes to 0 files (+1 heads)
225 added 1 changesets with 0 changes to 0 files (+1 heads)
226 (run 'hg heads' to see heads, 'hg merge' to merge)
226 (run 'hg heads' to see heads, 'hg merge' to merge)
227 $ rm .hg/strip-backup/*
227 $ rm .hg/strip-backup/*
228 $ hg log --graph
228 $ hg log --graph
229 o changeset: 4:264128213d29
229 o changeset: 4:264128213d29
230 | tag: tip
230 | tag: tip
231 | parent: 1:ef3a871183d7
231 | parent: 1:ef3a871183d7
232 | user: test
232 | user: test
233 | date: Thu Jan 01 00:00:00 1970 +0000
233 | date: Thu Jan 01 00:00:00 1970 +0000
234 | summary: c
234 | summary: c
235 |
235 |
236 | o changeset: 3:443431ffac4f
236 | o changeset: 3:443431ffac4f
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 | | summary: e
239 | | summary: e
240 | |
240 | |
241 | o changeset: 2:65bd5f99a4a3
241 | o changeset: 2:65bd5f99a4a3
242 |/ user: test
242 |/ user: test
243 | date: Thu Jan 01 00:00:00 1970 +0000
243 | date: Thu Jan 01 00:00:00 1970 +0000
244 | summary: d
244 | summary: d
245 |
245 |
246 @ changeset: 1:ef3a871183d7
246 @ changeset: 1:ef3a871183d7
247 | user: test
247 | user: test
248 | date: Thu Jan 01 00:00:00 1970 +0000
248 | date: Thu Jan 01 00:00:00 1970 +0000
249 | summary: b
249 | summary: b
250 |
250 |
251 o changeset: 0:9ab35a2d17cb
251 o changeset: 0:9ab35a2d17cb
252 user: test
252 user: test
253 date: Thu Jan 01 00:00:00 1970 +0000
253 date: Thu Jan 01 00:00:00 1970 +0000
254 summary: a
254 summary: a
255
255
256 $ hg up -C 2
256 $ hg up -C 2
257 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
257 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
258 $ hg merge 4
258 $ hg merge 4
259 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
259 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
260 (branch merge, don't forget to commit)
260 (branch merge, don't forget to commit)
261
261
262 before strip of merge parent
262 before strip of merge parent
263
263
264 $ hg parents
264 $ hg parents
265 changeset: 2:65bd5f99a4a3
265 changeset: 2:65bd5f99a4a3
266 user: test
266 user: test
267 date: Thu Jan 01 00:00:00 1970 +0000
267 date: Thu Jan 01 00:00:00 1970 +0000
268 summary: d
268 summary: d
269
269
270 changeset: 4:264128213d29
270 changeset: 4:264128213d29
271 tag: tip
271 tag: tip
272 parent: 1:ef3a871183d7
272 parent: 1:ef3a871183d7
273 user: test
273 user: test
274 date: Thu Jan 01 00:00:00 1970 +0000
274 date: Thu Jan 01 00:00:00 1970 +0000
275 summary: c
275 summary: c
276
276
277 $ hg strip 4
277 $ hg strip 4
278 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
278 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
279 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
279 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
280
280
281 after strip of merge parent
281 after strip of merge parent
282
282
283 $ hg parents
283 $ hg parents
284 changeset: 1:ef3a871183d7
284 changeset: 1:ef3a871183d7
285 user: test
285 user: test
286 date: Thu Jan 01 00:00:00 1970 +0000
286 date: Thu Jan 01 00:00:00 1970 +0000
287 summary: b
287 summary: b
288
288
289 $ restore
289 $ restore
290
290
291 $ hg up
291 $ hg up
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 updated to "264128213d29: c"
293 updated to "264128213d29: c"
294 1 other heads for branch "default"
294 1 other heads for branch "default"
295 $ hg log -G
295 $ hg log -G
296 @ changeset: 4:264128213d29
296 @ changeset: 4:264128213d29
297 | tag: tip
297 | tag: tip
298 | parent: 1:ef3a871183d7
298 | parent: 1:ef3a871183d7
299 | user: test
299 | user: test
300 | date: Thu Jan 01 00:00:00 1970 +0000
300 | date: Thu Jan 01 00:00:00 1970 +0000
301 | summary: c
301 | summary: c
302 |
302 |
303 | o changeset: 3:443431ffac4f
303 | o changeset: 3:443431ffac4f
304 | | user: test
304 | | user: test
305 | | date: Thu Jan 01 00:00:00 1970 +0000
305 | | date: Thu Jan 01 00:00:00 1970 +0000
306 | | summary: e
306 | | summary: e
307 | |
307 | |
308 | o changeset: 2:65bd5f99a4a3
308 | o changeset: 2:65bd5f99a4a3
309 |/ user: test
309 |/ user: test
310 | date: Thu Jan 01 00:00:00 1970 +0000
310 | date: Thu Jan 01 00:00:00 1970 +0000
311 | summary: d
311 | summary: d
312 |
312 |
313 o changeset: 1:ef3a871183d7
313 o changeset: 1:ef3a871183d7
314 | user: test
314 | user: test
315 | date: Thu Jan 01 00:00:00 1970 +0000
315 | date: Thu Jan 01 00:00:00 1970 +0000
316 | summary: b
316 | summary: b
317 |
317 |
318 o changeset: 0:9ab35a2d17cb
318 o changeset: 0:9ab35a2d17cb
319 user: test
319 user: test
320 date: Thu Jan 01 00:00:00 1970 +0000
320 date: Thu Jan 01 00:00:00 1970 +0000
321 summary: a
321 summary: a
322
322
323
323
324 2 is parent of 3, only one strip should happen
324 2 is parent of 3, only one strip should happen
325
325
326 $ hg strip "roots(2)" 3
326 $ hg strip "roots(2)" 3
327 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
327 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
328 $ hg log -G
328 $ hg log -G
329 @ changeset: 2:264128213d29
329 @ changeset: 2:264128213d29
330 | tag: tip
330 | tag: tip
331 | user: test
331 | user: test
332 | date: Thu Jan 01 00:00:00 1970 +0000
332 | date: Thu Jan 01 00:00:00 1970 +0000
333 | summary: c
333 | summary: c
334 |
334 |
335 o changeset: 1:ef3a871183d7
335 o changeset: 1:ef3a871183d7
336 | user: test
336 | user: test
337 | date: Thu Jan 01 00:00:00 1970 +0000
337 | date: Thu Jan 01 00:00:00 1970 +0000
338 | summary: b
338 | summary: b
339 |
339 |
340 o changeset: 0:9ab35a2d17cb
340 o changeset: 0:9ab35a2d17cb
341 user: test
341 user: test
342 date: Thu Jan 01 00:00:00 1970 +0000
342 date: Thu Jan 01 00:00:00 1970 +0000
343 summary: a
343 summary: a
344
344
345 $ restore
345 $ restore
346 $ hg log -G
346 $ hg log -G
347 o changeset: 4:443431ffac4f
347 o changeset: 4:443431ffac4f
348 | tag: tip
348 | tag: tip
349 | user: test
349 | user: test
350 | date: Thu Jan 01 00:00:00 1970 +0000
350 | date: Thu Jan 01 00:00:00 1970 +0000
351 | summary: e
351 | summary: e
352 |
352 |
353 o changeset: 3:65bd5f99a4a3
353 o changeset: 3:65bd5f99a4a3
354 | parent: 1:ef3a871183d7
354 | parent: 1:ef3a871183d7
355 | user: test
355 | user: test
356 | date: Thu Jan 01 00:00:00 1970 +0000
356 | date: Thu Jan 01 00:00:00 1970 +0000
357 | summary: d
357 | summary: d
358 |
358 |
359 | @ changeset: 2:264128213d29
359 | @ changeset: 2:264128213d29
360 |/ user: test
360 |/ user: test
361 | date: Thu Jan 01 00:00:00 1970 +0000
361 | date: Thu Jan 01 00:00:00 1970 +0000
362 | summary: c
362 | summary: c
363 |
363 |
364 o changeset: 1:ef3a871183d7
364 o changeset: 1:ef3a871183d7
365 | user: test
365 | user: test
366 | date: Thu Jan 01 00:00:00 1970 +0000
366 | date: Thu Jan 01 00:00:00 1970 +0000
367 | summary: b
367 | summary: b
368 |
368 |
369 o changeset: 0:9ab35a2d17cb
369 o changeset: 0:9ab35a2d17cb
370 user: test
370 user: test
371 date: Thu Jan 01 00:00:00 1970 +0000
371 date: Thu Jan 01 00:00:00 1970 +0000
372 summary: a
372 summary: a
373
373
374 Failed hook while applying "saveheads" bundle.
374 Failed hook while applying "saveheads" bundle.
375
375
376 $ hg strip 2 --config hooks.pretxnchangegroup.bad=false
376 $ hg strip 2 --config hooks.pretxnchangegroup.bad=false
377 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
377 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
378 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
378 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
379 transaction abort!
379 transaction abort!
380 rollback completed
380 rollback completed
381 strip failed, backup bundle stored in '$TESTTMP/test/.hg/strip-backup/*-backup.hg' (glob)
381 strip failed, backup bundle stored in '$TESTTMP/test/.hg/strip-backup/*-backup.hg' (glob)
382 strip failed, unrecovered changes stored in '$TESTTMP/test/.hg/strip-backup/*-temp.hg' (glob)
382 strip failed, unrecovered changes stored in '$TESTTMP/test/.hg/strip-backup/*-temp.hg' (glob)
383 (fix the problem, then recover the changesets with "hg unbundle '$TESTTMP/test/.hg/strip-backup/*-temp.hg'") (glob)
383 (fix the problem, then recover the changesets with "hg unbundle '$TESTTMP/test/.hg/strip-backup/*-temp.hg'") (glob)
384 abort: pretxnchangegroup.bad hook exited with status 1
384 abort: pretxnchangegroup.bad hook exited with status 1
385 [255]
385 [255]
386 $ restore
386 $ restore
387 $ hg log -G
387 $ hg log -G
388 o changeset: 4:443431ffac4f
388 o changeset: 4:443431ffac4f
389 | tag: tip
389 | tag: tip
390 | user: test
390 | user: test
391 | date: Thu Jan 01 00:00:00 1970 +0000
391 | date: Thu Jan 01 00:00:00 1970 +0000
392 | summary: e
392 | summary: e
393 |
393 |
394 o changeset: 3:65bd5f99a4a3
394 o changeset: 3:65bd5f99a4a3
395 | parent: 1:ef3a871183d7
395 | parent: 1:ef3a871183d7
396 | user: test
396 | user: test
397 | date: Thu Jan 01 00:00:00 1970 +0000
397 | date: Thu Jan 01 00:00:00 1970 +0000
398 | summary: d
398 | summary: d
399 |
399 |
400 | o changeset: 2:264128213d29
400 | o changeset: 2:264128213d29
401 |/ user: test
401 |/ user: test
402 | date: Thu Jan 01 00:00:00 1970 +0000
402 | date: Thu Jan 01 00:00:00 1970 +0000
403 | summary: c
403 | summary: c
404 |
404 |
405 @ changeset: 1:ef3a871183d7
405 @ changeset: 1:ef3a871183d7
406 | user: test
406 | user: test
407 | date: Thu Jan 01 00:00:00 1970 +0000
407 | date: Thu Jan 01 00:00:00 1970 +0000
408 | summary: b
408 | summary: b
409 |
409 |
410 o changeset: 0:9ab35a2d17cb
410 o changeset: 0:9ab35a2d17cb
411 user: test
411 user: test
412 date: Thu Jan 01 00:00:00 1970 +0000
412 date: Thu Jan 01 00:00:00 1970 +0000
413 summary: a
413 summary: a
414
414
415
415
416 2 different branches: 2 strips
416 2 different branches: 2 strips
417
417
418 $ hg strip 2 4
418 $ hg strip 2 4
419 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
419 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
420 $ hg log -G
420 $ hg log -G
421 o changeset: 2:65bd5f99a4a3
421 o changeset: 2:65bd5f99a4a3
422 | tag: tip
422 | tag: tip
423 | user: test
423 | user: test
424 | date: Thu Jan 01 00:00:00 1970 +0000
424 | date: Thu Jan 01 00:00:00 1970 +0000
425 | summary: d
425 | summary: d
426 |
426 |
427 @ changeset: 1:ef3a871183d7
427 @ changeset: 1:ef3a871183d7
428 | user: test
428 | user: test
429 | date: Thu Jan 01 00:00:00 1970 +0000
429 | date: Thu Jan 01 00:00:00 1970 +0000
430 | summary: b
430 | summary: b
431 |
431 |
432 o changeset: 0:9ab35a2d17cb
432 o changeset: 0:9ab35a2d17cb
433 user: test
433 user: test
434 date: Thu Jan 01 00:00:00 1970 +0000
434 date: Thu Jan 01 00:00:00 1970 +0000
435 summary: a
435 summary: a
436
436
437 $ restore
437 $ restore
438
438
439 2 different branches and a common ancestor: 1 strip
439 2 different branches and a common ancestor: 1 strip
440
440
441 $ hg strip 1 "2|4"
441 $ hg strip 1 "2|4"
442 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
442 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
443 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
443 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
444 $ restore
444 $ restore
445
445
446 verify fncache is kept up-to-date
446 verify fncache is kept up-to-date
447
447
448 $ touch a
448 $ touch a
449 $ hg ci -qAm a
449 $ hg ci -qAm a
450 $ cat .hg/store/fncache | sort
450 $ cat .hg/store/fncache | sort
451 data/a.i
451 data/a.i
452 data/bar.i
452 data/bar.i
453 $ hg strip tip
453 $ hg strip tip
454 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
454 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
455 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
455 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
456 $ cat .hg/store/fncache
456 $ cat .hg/store/fncache
457 data/bar.i
457 data/bar.i
458
458
459 stripping an empty revset
459 stripping an empty revset
460
460
461 $ hg strip "1 and not 1"
461 $ hg strip "1 and not 1"
462 abort: empty revision set
462 abort: empty revision set
463 [255]
463 [255]
464
464
465 remove branchy history for qimport tests
465 remove branchy history for qimport tests
466
466
467 $ hg strip 3
467 $ hg strip 3
468 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
468 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
469
469
470
470
471 strip of applied mq should cleanup status file
471 strip of applied mq should cleanup status file
472
472
473 $ echo "mq=" >> $HGRCPATH
473 $ echo "mq=" >> $HGRCPATH
474 $ hg up -C 3
474 $ hg up -C 3
475 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
475 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
476 $ echo fooagain >> bar
476 $ echo fooagain >> bar
477 $ hg ci -mf
477 $ hg ci -mf
478 $ hg qimport -r tip:2
478 $ hg qimport -r tip:2
479
479
480 applied patches before strip
480 applied patches before strip
481
481
482 $ hg qapplied
482 $ hg qapplied
483 d
483 d
484 e
484 e
485 f
485 f
486
486
487 stripping revision in queue
487 stripping revision in queue
488
488
489 $ hg strip 3
489 $ hg strip 3
490 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
490 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
491 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
491 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
492
492
493 applied patches after stripping rev in queue
493 applied patches after stripping rev in queue
494
494
495 $ hg qapplied
495 $ hg qapplied
496 d
496 d
497
497
498 stripping ancestor of queue
498 stripping ancestor of queue
499
499
500 $ hg strip 1
500 $ hg strip 1
501 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
501 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
502 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
502 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
503
503
504 applied patches after stripping ancestor of queue
504 applied patches after stripping ancestor of queue
505
505
506 $ hg qapplied
506 $ hg qapplied
507
507
508 Verify strip protects against stripping wc parent when there are uncommitted mods
508 Verify strip protects against stripping wc parent when there are uncommitted mods
509
509
510 $ echo b > b
510 $ echo b > b
511 $ echo bb > bar
511 $ echo bb > bar
512 $ hg add b
512 $ hg add b
513 $ hg ci -m 'b'
513 $ hg ci -m 'b'
514 $ hg log --graph
514 $ hg log --graph
515 @ changeset: 1:76dcf9fab855
515 @ changeset: 1:76dcf9fab855
516 | tag: tip
516 | tag: tip
517 | user: test
517 | user: test
518 | date: Thu Jan 01 00:00:00 1970 +0000
518 | date: Thu Jan 01 00:00:00 1970 +0000
519 | summary: b
519 | summary: b
520 |
520 |
521 o changeset: 0:9ab35a2d17cb
521 o changeset: 0:9ab35a2d17cb
522 user: test
522 user: test
523 date: Thu Jan 01 00:00:00 1970 +0000
523 date: Thu Jan 01 00:00:00 1970 +0000
524 summary: a
524 summary: a
525
525
526 $ hg up 0
526 $ hg up 0
527 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
527 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
528 $ echo c > bar
528 $ echo c > bar
529 $ hg up -t false
529 $ hg up -t false
530 merging bar
530 merging bar
531 merging bar failed!
531 merging bar failed!
532 1 files updated, 0 files merged, 0 files removed, 1 files unresolved
532 1 files updated, 0 files merged, 0 files removed, 1 files unresolved
533 use 'hg resolve' to retry unresolved file merges
533 use 'hg resolve' to retry unresolved file merges
534 [1]
534 [1]
535 $ hg sum
535 $ hg sum
536 parent: 1:76dcf9fab855 tip
536 parent: 1:76dcf9fab855 tip
537 b
537 b
538 branch: default
538 branch: default
539 commit: 1 modified, 1 unknown, 1 unresolved
539 commit: 1 modified, 1 unknown, 1 unresolved
540 update: (current)
540 update: (current)
541 phases: 2 draft
541 phases: 2 draft
542 mq: 3 unapplied
542 mq: 3 unapplied
543
543
544 $ echo c > b
544 $ echo c > b
545 $ hg strip tip
545 $ hg strip tip
546 abort: local changes found
546 abort: local changes found
547 [255]
547 [255]
548 $ hg strip tip --keep
548 $ hg strip tip --keep
549 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
549 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
550 $ hg log --graph
550 $ hg log --graph
551 @ changeset: 0:9ab35a2d17cb
551 @ changeset: 0:9ab35a2d17cb
552 tag: tip
552 tag: tip
553 user: test
553 user: test
554 date: Thu Jan 01 00:00:00 1970 +0000
554 date: Thu Jan 01 00:00:00 1970 +0000
555 summary: a
555 summary: a
556
556
557 $ hg status
557 $ hg status
558 M bar
558 M bar
559 ? b
559 ? b
560 ? bar.orig
560 ? bar.orig
561
561
562 $ rm bar.orig
562 $ rm bar.orig
563 $ hg sum
563 $ hg sum
564 parent: 0:9ab35a2d17cb tip
564 parent: 0:9ab35a2d17cb tip
565 a
565 a
566 branch: default
566 branch: default
567 commit: 1 modified, 1 unknown
567 commit: 1 modified, 1 unknown
568 update: (current)
568 update: (current)
569 phases: 1 draft
569 phases: 1 draft
570 mq: 3 unapplied
570 mq: 3 unapplied
571
571
572 Strip adds, removes, modifies with --keep
572 Strip adds, removes, modifies with --keep
573
573
574 $ touch b
574 $ touch b
575 $ hg add b
575 $ hg add b
576 $ hg commit -mb
576 $ hg commit -mb
577 $ touch c
577 $ touch c
578
578
579 ... with a clean working dir
579 ... with a clean working dir
580
580
581 $ hg add c
581 $ hg add c
582 $ hg rm bar
582 $ hg rm bar
583 $ hg commit -mc
583 $ hg commit -mc
584 $ hg status
584 $ hg status
585 $ hg strip --keep tip
585 $ hg strip --keep tip
586 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
586 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
587 $ hg status
587 $ hg status
588 ! bar
588 ! bar
589 ? c
589 ? c
590
590
591 ... with a dirty working dir
591 ... with a dirty working dir
592
592
593 $ hg add c
593 $ hg add c
594 $ hg rm bar
594 $ hg rm bar
595 $ hg commit -mc
595 $ hg commit -mc
596 $ hg status
596 $ hg status
597 $ echo b > b
597 $ echo b > b
598 $ echo d > d
598 $ echo d > d
599 $ hg strip --keep tip
599 $ hg strip --keep tip
600 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
600 saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
601 $ hg status
601 $ hg status
602 M b
602 M b
603 ! bar
603 ! bar
604 ? c
604 ? c
605 ? d
605 ? d
606
606
607 ... after updating the dirstate
607 ... after updating the dirstate
608 $ hg add c
608 $ hg add c
609 $ hg commit -mc
609 $ hg commit -mc
610 $ hg rm c
610 $ hg rm c
611 $ hg commit -mc
611 $ hg commit -mc
612 $ hg strip --keep '.^' -q
612 $ hg strip --keep '.^' -q
613 $ cd ..
613 $ cd ..
614
614
615 stripping many nodes on a complex graph (issue3299)
615 stripping many nodes on a complex graph (issue3299)
616
616
617 $ hg init issue3299
617 $ hg init issue3299
618 $ cd issue3299
618 $ cd issue3299
619 $ hg debugbuilddag '@a.:a@b.:b.:x<a@a.:a<b@b.:b<a@a.:a'
619 $ hg debugbuilddag '@a.:a@b.:b.:x<a@a.:a<b@b.:b<a@a.:a'
620 $ hg strip 'not ancestors(x)'
620 $ hg strip 'not ancestors(x)'
621 saved backup bundle to $TESTTMP/issue3299/.hg/strip-backup/*-backup.hg (glob)
621 saved backup bundle to $TESTTMP/issue3299/.hg/strip-backup/*-backup.hg (glob)
622
622
623 test hg strip -B bookmark
623 test hg strip -B bookmark
624
624
625 $ cd ..
625 $ cd ..
626 $ hg init bookmarks
626 $ hg init bookmarks
627 $ cd bookmarks
627 $ cd bookmarks
628 $ hg debugbuilddag '..<2.*1/2:m<2+3:c<m+3:a<2.:b<m+2:d<2.:e<m+1:f'
628 $ hg debugbuilddag '..<2.*1/2:m<2+3:c<m+3:a<2.:b<m+2:d<2.:e<m+1:f'
629 $ hg bookmark -r 'a' 'todelete'
629 $ hg bookmark -r 'a' 'todelete'
630 $ hg bookmark -r 'b' 'B'
630 $ hg bookmark -r 'b' 'B'
631 $ hg bookmark -r 'b' 'nostrip'
631 $ hg bookmark -r 'b' 'nostrip'
632 $ hg bookmark -r 'c' 'delete'
632 $ hg bookmark -r 'c' 'delete'
633 $ hg bookmark -r 'd' 'multipledelete1'
633 $ hg bookmark -r 'd' 'multipledelete1'
634 $ hg bookmark -r 'e' 'multipledelete2'
634 $ hg bookmark -r 'e' 'multipledelete2'
635 $ hg bookmark -r 'f' 'singlenode1'
635 $ hg bookmark -r 'f' 'singlenode1'
636 $ hg bookmark -r 'f' 'singlenode2'
636 $ hg bookmark -r 'f' 'singlenode2'
637 $ hg up -C todelete
637 $ hg up -C todelete
638 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
638 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
639 (activating bookmark todelete)
639 (activating bookmark todelete)
640 $ hg strip -B nostrip
640 $ hg strip -B nostrip
641 bookmark 'nostrip' deleted
641 bookmark 'nostrip' deleted
642 abort: empty revision set
642 abort: empty revision set
643 [255]
643 [255]
644 $ hg strip -B todelete
644 $ hg strip -B todelete
645 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
645 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
646 saved backup bundle to $TESTTMP/bookmarks/.hg/strip-backup/*-backup.hg (glob)
646 saved backup bundle to $TESTTMP/bookmarks/.hg/strip-backup/*-backup.hg (glob)
647 bookmark 'todelete' deleted
647 bookmark 'todelete' deleted
648 $ hg id -ir dcbb326fdec2
648 $ hg id -ir dcbb326fdec2
649 abort: unknown revision 'dcbb326fdec2'!
649 abort: unknown revision 'dcbb326fdec2'!
650 [255]
650 [255]
651 $ hg id -ir d62d843c9a01
651 $ hg id -ir d62d843c9a01
652 d62d843c9a01
652 d62d843c9a01
653 $ hg bookmarks
653 $ hg bookmarks
654 B 9:ff43616e5d0f
654 B 9:ff43616e5d0f
655 delete 6:2702dd0c91e7
655 delete 6:2702dd0c91e7
656 multipledelete1 11:e46a4836065c
656 multipledelete1 11:e46a4836065c
657 multipledelete2 12:b4594d867745
657 multipledelete2 12:b4594d867745
658 singlenode1 13:43227190fef8
658 singlenode1 13:43227190fef8
659 singlenode2 13:43227190fef8
659 singlenode2 13:43227190fef8
660 $ hg strip -B multipledelete1 -B multipledelete2
660 $ hg strip -B multipledelete1 -B multipledelete2
661 saved backup bundle to $TESTTMP/bookmarks/.hg/strip-backup/e46a4836065c-89ec65c2-backup.hg (glob)
661 saved backup bundle to $TESTTMP/bookmarks/.hg/strip-backup/e46a4836065c-89ec65c2-backup.hg (glob)
662 bookmark 'multipledelete1' deleted
662 bookmark 'multipledelete1' deleted
663 bookmark 'multipledelete2' deleted
663 bookmark 'multipledelete2' deleted
664 $ hg id -ir e46a4836065c
664 $ hg id -ir e46a4836065c
665 abort: unknown revision 'e46a4836065c'!
665 abort: unknown revision 'e46a4836065c'!
666 [255]
666 [255]
667 $ hg id -ir b4594d867745
667 $ hg id -ir b4594d867745
668 abort: unknown revision 'b4594d867745'!
668 abort: unknown revision 'b4594d867745'!
669 [255]
669 [255]
670 $ hg strip -B singlenode1 -B singlenode2
670 $ hg strip -B singlenode1 -B singlenode2
671 saved backup bundle to $TESTTMP/bookmarks/.hg/strip-backup/43227190fef8-8da858f2-backup.hg (glob)
671 saved backup bundle to $TESTTMP/bookmarks/.hg/strip-backup/43227190fef8-8da858f2-backup.hg (glob)
672 bookmark 'singlenode1' deleted
672 bookmark 'singlenode1' deleted
673 bookmark 'singlenode2' deleted
673 bookmark 'singlenode2' deleted
674 $ hg id -ir 43227190fef8
674 $ hg id -ir 43227190fef8
675 abort: unknown revision '43227190fef8'!
675 abort: unknown revision '43227190fef8'!
676 [255]
676 [255]
677 $ hg strip -B unknownbookmark
677 $ hg strip -B unknownbookmark
678 abort: bookmark 'unknownbookmark' not found
678 abort: bookmark 'unknownbookmark' not found
679 [255]
679 [255]
680 $ hg strip -B unknownbookmark1 -B unknownbookmark2
680 $ hg strip -B unknownbookmark1 -B unknownbookmark2
681 abort: bookmark 'unknownbookmark1,unknownbookmark2' not found
681 abort: bookmark 'unknownbookmark1,unknownbookmark2' not found
682 [255]
682 [255]
683 $ hg strip -B delete -B unknownbookmark
683 $ hg strip -B delete -B unknownbookmark
684 abort: bookmark 'unknownbookmark' not found
684 abort: bookmark 'unknownbookmark' not found
685 [255]
685 [255]
686 $ hg strip -B delete
686 $ hg strip -B delete
687 saved backup bundle to $TESTTMP/bookmarks/.hg/strip-backup/*-backup.hg (glob)
687 saved backup bundle to $TESTTMP/bookmarks/.hg/strip-backup/*-backup.hg (glob)
688 bookmark 'delete' deleted
688 bookmark 'delete' deleted
689 $ hg id -ir 6:2702dd0c91e7
689 $ hg id -ir 6:2702dd0c91e7
690 abort: unknown revision '2702dd0c91e7'!
690 abort: unknown revision '2702dd0c91e7'!
691 [255]
691 [255]
692 $ hg update B
692 $ hg update B
693 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
693 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
694 (activating bookmark B)
694 (activating bookmark B)
695 $ echo a > a
695 $ echo a > a
696 $ hg add a
696 $ hg add a
697 $ hg strip -B B
697 $ hg strip -B B
698 abort: local changes found
698 abort: local changes found
699 [255]
699 [255]
700 $ hg bookmarks
700 $ hg bookmarks
701 * B 6:ff43616e5d0f
701 * B 6:ff43616e5d0f
702
702
703 Make sure no one adds back a -b option:
703 Make sure no one adds back a -b option:
704
704
705 $ hg strip -b tip
705 $ hg strip -b tip
706 hg strip: option -b not recognized
706 hg strip: option -b not recognized
707 hg strip [-k] [-f] [-B bookmark] [-r] REV...
707 hg strip [-k] [-f] [-B bookmark] [-r] REV...
708
708
709 strip changesets and all their descendants from the repository
709 strip changesets and all their descendants from the repository
710
710
711 (use 'hg help -e strip' to show help for the strip extension)
711 (use 'hg help -e strip' to show help for the strip extension)
712
712
713 options ([+] can be repeated):
713 options ([+] can be repeated):
714
714
715 -r --rev REV [+] strip specified revision (optional, can specify
715 -r --rev REV [+] strip specified revision (optional, can specify
716 revisions without this option)
716 revisions without this option)
717 -f --force force removal of changesets, discard uncommitted
717 -f --force force removal of changesets, discard uncommitted
718 changes (no backup)
718 changes (no backup)
719 --no-backup no backups
719 --no-backup no backups
720 -k --keep do not modify working directory during strip
720 -k --keep do not modify working directory during strip
721 -B --bookmark VALUE [+] remove revs only reachable from given bookmark
721 -B --bookmark VALUE [+] remove revs only reachable from given bookmark
722 --mq operate on patch repository
722 --mq operate on patch repository
723
723
724 (use 'hg strip -h' to show more help)
724 (use 'hg strip -h' to show more help)
725 [255]
725 [255]
726
726
727 $ cd ..
727 $ cd ..
728
728
729 Verify bundles don't get overwritten:
729 Verify bundles don't get overwritten:
730
730
731 $ hg init doublebundle
731 $ hg init doublebundle
732 $ cd doublebundle
732 $ cd doublebundle
733 $ touch a
733 $ touch a
734 $ hg commit -Aqm a
734 $ hg commit -Aqm a
735 $ touch b
735 $ touch b
736 $ hg commit -Aqm b
736 $ hg commit -Aqm b
737 $ hg strip -r 0
737 $ hg strip -r 0
738 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
738 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
739 saved backup bundle to $TESTTMP/doublebundle/.hg/strip-backup/3903775176ed-e68910bd-backup.hg (glob)
739 saved backup bundle to $TESTTMP/doublebundle/.hg/strip-backup/3903775176ed-e68910bd-backup.hg (glob)
740 $ ls .hg/strip-backup
740 $ ls .hg/strip-backup
741 3903775176ed-e68910bd-backup.hg
741 3903775176ed-e68910bd-backup.hg
742 $ hg pull -q -r 3903775176ed .hg/strip-backup/3903775176ed-e68910bd-backup.hg
742 $ hg pull -q -r 3903775176ed .hg/strip-backup/3903775176ed-e68910bd-backup.hg
743 $ hg strip -r 0
743 $ hg strip -r 0
744 saved backup bundle to $TESTTMP/doublebundle/.hg/strip-backup/3903775176ed-54390173-backup.hg (glob)
744 saved backup bundle to $TESTTMP/doublebundle/.hg/strip-backup/3903775176ed-54390173-backup.hg (glob)
745 $ ls .hg/strip-backup
745 $ ls .hg/strip-backup
746 3903775176ed-54390173-backup.hg
746 3903775176ed-54390173-backup.hg
747 3903775176ed-e68910bd-backup.hg
747 3903775176ed-e68910bd-backup.hg
748 $ cd ..
748 $ cd ..
749
749
750 Test that we only bundle the stripped changesets (issue4736)
750 Test that we only bundle the stripped changesets (issue4736)
751 ------------------------------------------------------------
751 ------------------------------------------------------------
752
752
753 initialization (previous repo is empty anyway)
753 initialization (previous repo is empty anyway)
754
754
755 $ hg init issue4736
755 $ hg init issue4736
756 $ cd issue4736
756 $ cd issue4736
757 $ echo a > a
757 $ echo a > a
758 $ hg add a
758 $ hg add a
759 $ hg commit -m commitA
759 $ hg commit -m commitA
760 $ echo b > b
760 $ echo b > b
761 $ hg add b
761 $ hg add b
762 $ hg commit -m commitB
762 $ hg commit -m commitB
763 $ echo c > c
763 $ echo c > c
764 $ hg add c
764 $ hg add c
765 $ hg commit -m commitC
765 $ hg commit -m commitC
766 $ hg up 'desc(commitB)'
766 $ hg up 'desc(commitB)'
767 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
767 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
768 $ echo d > d
768 $ echo d > d
769 $ hg add d
769 $ hg add d
770 $ hg commit -m commitD
770 $ hg commit -m commitD
771 created new head
771 created new head
772 $ hg up 'desc(commitC)'
772 $ hg up 'desc(commitC)'
773 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
773 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
774 $ hg merge 'desc(commitD)'
774 $ hg merge 'desc(commitD)'
775 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
775 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
776 (branch merge, don't forget to commit)
776 (branch merge, don't forget to commit)
777 $ hg ci -m 'mergeCD'
777 $ hg ci -m 'mergeCD'
778 $ hg log -G
778 $ hg log -G
779 @ changeset: 4:d8db9d137221
779 @ changeset: 4:d8db9d137221
780 |\ tag: tip
780 |\ tag: tip
781 | | parent: 2:5c51d8d6557d
781 | | parent: 2:5c51d8d6557d
782 | | parent: 3:6625a5168474
782 | | parent: 3:6625a5168474
783 | | user: test
783 | | user: test
784 | | date: Thu Jan 01 00:00:00 1970 +0000
784 | | date: Thu Jan 01 00:00:00 1970 +0000
785 | | summary: mergeCD
785 | | summary: mergeCD
786 | |
786 | |
787 | o changeset: 3:6625a5168474
787 | o changeset: 3:6625a5168474
788 | | parent: 1:eca11cf91c71
788 | | parent: 1:eca11cf91c71
789 | | user: test
789 | | user: test
790 | | date: Thu Jan 01 00:00:00 1970 +0000
790 | | date: Thu Jan 01 00:00:00 1970 +0000
791 | | summary: commitD
791 | | summary: commitD
792 | |
792 | |
793 o | changeset: 2:5c51d8d6557d
793 o | changeset: 2:5c51d8d6557d
794 |/ user: test
794 |/ user: test
795 | date: Thu Jan 01 00:00:00 1970 +0000
795 | date: Thu Jan 01 00:00:00 1970 +0000
796 | summary: commitC
796 | summary: commitC
797 |
797 |
798 o changeset: 1:eca11cf91c71
798 o changeset: 1:eca11cf91c71
799 | user: test
799 | user: test
800 | date: Thu Jan 01 00:00:00 1970 +0000
800 | date: Thu Jan 01 00:00:00 1970 +0000
801 | summary: commitB
801 | summary: commitB
802 |
802 |
803 o changeset: 0:105141ef12d0
803 o changeset: 0:105141ef12d0
804 user: test
804 user: test
805 date: Thu Jan 01 00:00:00 1970 +0000
805 date: Thu Jan 01 00:00:00 1970 +0000
806 summary: commitA
806 summary: commitA
807
807
808
808
809 Check bundle behavior:
809 Check bundle behavior:
810
810
811 $ hg bundle -r 'desc(mergeCD)' --base 'desc(commitC)' ../issue4736.hg
811 $ hg bundle -r 'desc(mergeCD)' --base 'desc(commitC)' ../issue4736.hg
812 2 changesets found
812 2 changesets found
813 $ hg log -r 'bundle()' -R ../issue4736.hg
813 $ hg log -r 'bundle()' -R ../issue4736.hg
814 changeset: 3:6625a5168474
814 changeset: 3:6625a5168474
815 parent: 1:eca11cf91c71
815 parent: 1:eca11cf91c71
816 user: test
816 user: test
817 date: Thu Jan 01 00:00:00 1970 +0000
817 date: Thu Jan 01 00:00:00 1970 +0000
818 summary: commitD
818 summary: commitD
819
819
820 changeset: 4:d8db9d137221
820 changeset: 4:d8db9d137221
821 tag: tip
821 tag: tip
822 parent: 2:5c51d8d6557d
822 parent: 2:5c51d8d6557d
823 parent: 3:6625a5168474
823 parent: 3:6625a5168474
824 user: test
824 user: test
825 date: Thu Jan 01 00:00:00 1970 +0000
825 date: Thu Jan 01 00:00:00 1970 +0000
826 summary: mergeCD
826 summary: mergeCD
827
827
828
828
829 check strip behavior
829 check strip behavior
830
830
831 $ hg --config extensions.strip= strip 'desc(commitD)' --debug
831 $ hg --config extensions.strip= strip 'desc(commitD)' --debug
832 resolving manifests
832 resolving manifests
833 branchmerge: False, force: True, partial: False
833 branchmerge: False, force: True, partial: False
834 ancestor: d8db9d137221+, local: d8db9d137221+, remote: eca11cf91c71
834 ancestor: d8db9d137221+, local: d8db9d137221+, remote: eca11cf91c71
835 c: other deleted -> r
835 c: other deleted -> r
836 removing c
836 removing c
837 d: other deleted -> r
837 d: other deleted -> r
838 removing d
838 removing d
839 starting 4 threads for background file closing (?)
839 starting 4 threads for background file closing (?)
840 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
840 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
841 2 changesets found
841 2 changesets found
842 list of changesets:
842 list of changesets:
843 6625a516847449b6f0fa3737b9ba56e9f0f3032c
843 6625a516847449b6f0fa3737b9ba56e9f0f3032c
844 d8db9d1372214336d2b5570f20ee468d2c72fa8b
844 d8db9d1372214336d2b5570f20ee468d2c72fa8b
845 bundle2-output-bundle: "HG20", (1 params) 2 parts total
845 bundle2-output-bundle: "HG20", (1 params) 2 parts total
846 bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload
846 bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload
847 bundle2-output-part: "phase-heads" 24 bytes payload
847 bundle2-output-part: "phase-heads" 24 bytes payload
848 saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/6625a5168474-345bb43d-backup.hg (glob)
848 saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/6625a5168474-345bb43d-backup.hg (glob)
849 updating the branch cache
849 updating the branch cache
850 invalid branchheads cache (served): tip differs
850 invalid branchheads cache (served): tip differs
851 truncating cache/rbc-revs-v1 to 24
851 truncating cache/rbc-revs-v1 to 24
852 $ hg log -G
852 $ hg log -G
853 o changeset: 2:5c51d8d6557d
853 o changeset: 2:5c51d8d6557d
854 | tag: tip
854 | tag: tip
855 | user: test
855 | user: test
856 | date: Thu Jan 01 00:00:00 1970 +0000
856 | date: Thu Jan 01 00:00:00 1970 +0000
857 | summary: commitC
857 | summary: commitC
858 |
858 |
859 @ changeset: 1:eca11cf91c71
859 @ changeset: 1:eca11cf91c71
860 | user: test
860 | user: test
861 | date: Thu Jan 01 00:00:00 1970 +0000
861 | date: Thu Jan 01 00:00:00 1970 +0000
862 | summary: commitB
862 | summary: commitB
863 |
863 |
864 o changeset: 0:105141ef12d0
864 o changeset: 0:105141ef12d0
865 user: test
865 user: test
866 date: Thu Jan 01 00:00:00 1970 +0000
866 date: Thu Jan 01 00:00:00 1970 +0000
867 summary: commitA
867 summary: commitA
868
868
869
869
870 strip backup content
870 strip backup content
871
871
872 $ hg log -r 'bundle()' -R .hg/strip-backup/6625a5168474-*-backup.hg
872 $ hg log -r 'bundle()' -R .hg/strip-backup/6625a5168474-*-backup.hg
873 changeset: 3:6625a5168474
873 changeset: 3:6625a5168474
874 parent: 1:eca11cf91c71
874 parent: 1:eca11cf91c71
875 user: test
875 user: test
876 date: Thu Jan 01 00:00:00 1970 +0000
876 date: Thu Jan 01 00:00:00 1970 +0000
877 summary: commitD
877 summary: commitD
878
878
879 changeset: 4:d8db9d137221
879 changeset: 4:d8db9d137221
880 tag: tip
880 tag: tip
881 parent: 2:5c51d8d6557d
881 parent: 2:5c51d8d6557d
882 parent: 3:6625a5168474
882 parent: 3:6625a5168474
883 user: test
883 user: test
884 date: Thu Jan 01 00:00:00 1970 +0000
884 date: Thu Jan 01 00:00:00 1970 +0000
885 summary: mergeCD
885 summary: mergeCD
886
886
887 Check that the phase cache is properly invalidated after a strip with bookmark.
887 Check that the phase cache is properly invalidated after a strip with bookmark.
888
888
889 $ cat > ../stripstalephasecache.py << EOF
889 $ cat > ../stripstalephasecache.py << EOF
890 > from mercurial import extensions, localrepo
890 > from mercurial import extensions, localrepo
891 > def transactioncallback(orig, repo, desc, *args, **kwargs):
891 > def transactioncallback(orig, repo, desc, *args, **kwargs):
892 > def test(transaction):
892 > def test(transaction):
893 > # observe cache inconsistency
893 > # observe cache inconsistency
894 > try:
894 > try:
895 > [repo.changelog.node(r) for r in repo.revs("not public()")]
895 > [repo.changelog.node(r) for r in repo.revs("not public()")]
896 > except IndexError:
896 > except IndexError:
897 > repo.ui.status("Index error!\n")
897 > repo.ui.status("Index error!\n")
898 > transaction = orig(repo, desc, *args, **kwargs)
898 > transaction = orig(repo, desc, *args, **kwargs)
899 > # warm up the phase cache
899 > # warm up the phase cache
900 > list(repo.revs("not public()"))
900 > list(repo.revs("not public()"))
901 > if desc != 'strip':
901 > if desc != 'strip':
902 > transaction.addpostclose("phase invalidation test", test)
902 > transaction.addpostclose("phase invalidation test", test)
903 > return transaction
903 > return transaction
904 > def extsetup(ui):
904 > def extsetup(ui):
905 > extensions.wrapfunction(localrepo.localrepository, "transaction",
905 > extensions.wrapfunction(localrepo.localrepository, "transaction",
906 > transactioncallback)
906 > transactioncallback)
907 > EOF
907 > EOF
908 $ hg up -C 2
908 $ hg up -C 2
909 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
909 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
910 $ echo k > k
910 $ echo k > k
911 $ hg add k
911 $ hg add k
912 $ hg commit -m commitK
912 $ hg commit -m commitK
913 $ echo l > l
913 $ echo l > l
914 $ hg add l
914 $ hg add l
915 $ hg commit -m commitL
915 $ hg commit -m commitL
916 $ hg book -r tip blah
916 $ hg book -r tip blah
917 $ hg strip ".^" --config extensions.crash=$TESTTMP/stripstalephasecache.py
917 $ hg strip ".^" --config extensions.crash=$TESTTMP/stripstalephasecache.py
918 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
918 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
919 saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/8f0b4384875c-4fa10deb-backup.hg (glob)
919 saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/8f0b4384875c-4fa10deb-backup.hg (glob)
920 $ hg up -C 1
920 $ hg up -C 1
921 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
921 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
922
922
923 Error during post-close callback of the strip transaction
923 Error during post-close callback of the strip transaction
924 (They should be gracefully handled and reported)
924 (They should be gracefully handled and reported)
925
925
926 $ cat > ../crashstrip.py << EOF
926 $ cat > ../crashstrip.py << EOF
927 > from mercurial import error
927 > from mercurial import error
928 > def reposetup(ui, repo):
928 > def reposetup(ui, repo):
929 > class crashstriprepo(repo.__class__):
929 > class crashstriprepo(repo.__class__):
930 > def transaction(self, desc, *args, **kwargs):
930 > def transaction(self, desc, *args, **kwargs):
931 > tr = super(crashstriprepo, self).transaction(desc, *args, **kwargs)
931 > tr = super(crashstriprepo, self).transaction(desc, *args, **kwargs)
932 > if desc == 'strip':
932 > if desc == 'strip':
933 > def crash(tra): raise error.Abort('boom')
933 > def crash(tra): raise error.Abort('boom')
934 > tr.addpostclose('crash', crash)
934 > tr.addpostclose('crash', crash)
935 > return tr
935 > return tr
936 > repo.__class__ = crashstriprepo
936 > repo.__class__ = crashstriprepo
937 > EOF
937 > EOF
938 $ hg strip tip --config extensions.crash=$TESTTMP/crashstrip.py
938 $ hg strip tip --config extensions.crash=$TESTTMP/crashstrip.py
939 saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/5c51d8d6557d-70daef06-backup.hg (glob)
939 saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/5c51d8d6557d-70daef06-backup.hg (glob)
940 strip failed, backup bundle stored in '$TESTTMP/issue4736/.hg/strip-backup/5c51d8d6557d-70daef06-backup.hg' (glob)
940 strip failed, backup bundle stored in '$TESTTMP/issue4736/.hg/strip-backup/5c51d8d6557d-70daef06-backup.hg' (glob)
941 abort: boom
941 abort: boom
942 [255]
942 [255]
943
943
944 Use delayedstrip to strip inside a transaction
944 Use delayedstrip to strip inside a transaction
945
945
946 $ cd $TESTTMP
946 $ cd $TESTTMP
947 $ hg init delayedstrip
947 $ hg init delayedstrip
948 $ cd delayedstrip
948 $ cd delayedstrip
949 $ hg debugdrawdag <<'EOS'
949 $ hg debugdrawdag <<'EOS'
950 > D
950 > D
951 > |
951 > |
952 > C F H # Commit on top of "I",
952 > C F H # Commit on top of "I",
953 > | |/| # Strip B+D+I+E+G+H+Z
953 > | |/| # Strip B+D+I+E+G+H+Z
954 > I B E G
954 > I B E G
955 > \|/
955 > \|/
956 > A Z
956 > A Z
957 > EOS
957 > EOS
958 $ cp -R . ../scmutilcleanup
958 $ cp -R . ../scmutilcleanup
959
959
960 $ hg up -C I
960 $ hg up -C I
961 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
961 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
962 $ echo 3 >> I
962 $ echo 3 >> I
963 $ cat > $TESTTMP/delayedstrip.py <<EOF
963 $ cat > $TESTTMP/delayedstrip.py <<EOF
964 > from mercurial import repair, commands
964 > from mercurial import repair, commands
965 > def reposetup(ui, repo):
965 > def reposetup(ui, repo):
966 > def getnodes(expr):
966 > def getnodes(expr):
967 > return [repo.changelog.node(r) for r in repo.revs(expr)]
967 > return [repo.changelog.node(r) for r in repo.revs(expr)]
968 > with repo.wlock():
968 > with repo.wlock():
969 > with repo.lock():
969 > with repo.lock():
970 > with repo.transaction('delayedstrip'):
970 > with repo.transaction('delayedstrip'):
971 > repair.delayedstrip(ui, repo, getnodes('B+I+Z+D+E'), 'J')
971 > repair.delayedstrip(ui, repo, getnodes('B+I+Z+D+E'), 'J')
972 > repair.delayedstrip(ui, repo, getnodes('G+H+Z'), 'I')
972 > repair.delayedstrip(ui, repo, getnodes('G+H+Z'), 'I')
973 > commands.commit(ui, repo, message='J', date='0 0')
973 > commands.commit(ui, repo, message='J', date='0 0')
974 > EOF
974 > EOF
975 $ hg log -r . -T '\n' --config extensions.t=$TESTTMP/delayedstrip.py
975 $ hg log -r . -T '\n' --config extensions.t=$TESTTMP/delayedstrip.py
976 warning: orphaned descendants detected, not stripping 08ebfeb61bac, 112478962961, 7fb047a69f22
976 warning: orphaned descendants detected, not stripping 08ebfeb61bac, 112478962961, 7fb047a69f22
977 saved backup bundle to $TESTTMP/delayedstrip/.hg/strip-backup/f585351a92f8-81fa23b0-I.hg (glob)
977 saved backup bundle to $TESTTMP/delayedstrip/.hg/strip-backup/f585351a92f8-17475721-I.hg (glob)
978
978
979 $ hg log -G -T '{rev}:{node|short} {desc}' -r 'sort(all(), topo)'
979 $ hg log -G -T '{rev}:{node|short} {desc}' -r 'sort(all(), topo)'
980 @ 6:2f2d51af6205 J
980 @ 6:2f2d51af6205 J
981 |
981 |
982 o 3:08ebfeb61bac I
982 o 3:08ebfeb61bac I
983 |
983 |
984 | o 5:64a8289d2492 F
984 | o 5:64a8289d2492 F
985 | |
985 | |
986 | o 2:7fb047a69f22 E
986 | o 2:7fb047a69f22 E
987 |/
987 |/
988 | o 4:26805aba1e60 C
988 | o 4:26805aba1e60 C
989 | |
989 | |
990 | o 1:112478962961 B
990 | o 1:112478962961 B
991 |/
991 |/
992 o 0:426bada5c675 A
992 o 0:426bada5c675 A
993
993
994 Test high-level scmutil.cleanupnodes API
994 Test high-level scmutil.cleanupnodes API
995
995
996 $ cd $TESTTMP/scmutilcleanup
996 $ cd $TESTTMP/scmutilcleanup
997 $ hg debugdrawdag <<'EOS'
997 $ hg debugdrawdag <<'EOS'
998 > D2 F2 G2 # D2, F2, G2 are replacements for D, F, G
998 > D2 F2 G2 # D2, F2, G2 are replacements for D, F, G
999 > | | |
999 > | | |
1000 > C H G
1000 > C H G
1001 > EOS
1001 > EOS
1002 $ for i in B C D F G I Z; do
1002 $ for i in B C D F G I Z; do
1003 > hg bookmark -i -r $i b-$i
1003 > hg bookmark -i -r $i b-$i
1004 > done
1004 > done
1005 $ hg bookmark -i -r E 'b-F@divergent1'
1005 $ hg bookmark -i -r E 'b-F@divergent1'
1006 $ hg bookmark -i -r H 'b-F@divergent2'
1006 $ hg bookmark -i -r H 'b-F@divergent2'
1007 $ hg bookmark -i -r G 'b-F@divergent3'
1007 $ hg bookmark -i -r G 'b-F@divergent3'
1008 $ cp -R . ../scmutilcleanup.obsstore
1008 $ cp -R . ../scmutilcleanup.obsstore
1009
1009
1010 $ cat > $TESTTMP/scmutilcleanup.py <<EOF
1010 $ cat > $TESTTMP/scmutilcleanup.py <<EOF
1011 > from mercurial import scmutil
1011 > from mercurial import scmutil
1012 > def reposetup(ui, repo):
1012 > def reposetup(ui, repo):
1013 > def nodes(expr):
1013 > def nodes(expr):
1014 > return [repo.changelog.node(r) for r in repo.revs(expr)]
1014 > return [repo.changelog.node(r) for r in repo.revs(expr)]
1015 > def node(expr):
1015 > def node(expr):
1016 > return nodes(expr)[0]
1016 > return nodes(expr)[0]
1017 > with repo.wlock():
1017 > with repo.wlock():
1018 > with repo.lock():
1018 > with repo.lock():
1019 > with repo.transaction('delayedstrip'):
1019 > with repo.transaction('delayedstrip'):
1020 > mapping = {node('F'): [node('F2')],
1020 > mapping = {node('F'): [node('F2')],
1021 > node('D'): [node('D2')],
1021 > node('D'): [node('D2')],
1022 > node('G'): [node('G2')]}
1022 > node('G'): [node('G2')]}
1023 > scmutil.cleanupnodes(repo, mapping, 'replace')
1023 > scmutil.cleanupnodes(repo, mapping, 'replace')
1024 > scmutil.cleanupnodes(repo, nodes('((B::)+I+Z)-D2'), 'replace')
1024 > scmutil.cleanupnodes(repo, nodes('((B::)+I+Z)-D2'), 'replace')
1025 > EOF
1025 > EOF
1026 $ hg log -r . -T '\n' --config extensions.t=$TESTTMP/scmutilcleanup.py
1026 $ hg log -r . -T '\n' --config extensions.t=$TESTTMP/scmutilcleanup.py
1027 warning: orphaned descendants detected, not stripping 112478962961, 1fc8102cda62, 26805aba1e60
1027 warning: orphaned descendants detected, not stripping 112478962961, 1fc8102cda62, 26805aba1e60
1028 saved backup bundle to $TESTTMP/scmutilcleanup/.hg/strip-backup/f585351a92f8-73fb7c03-replace.hg (glob)
1028 saved backup bundle to $TESTTMP/scmutilcleanup/.hg/strip-backup/f585351a92f8-73fb7c03-replace.hg (glob)
1029
1029
1030 $ hg log -G -T '{rev}:{node|short} {desc} {bookmarks}' -r 'sort(all(), topo)'
1030 $ hg log -G -T '{rev}:{node|short} {desc} {bookmarks}' -r 'sort(all(), topo)'
1031 o 8:1473d4b996d1 G2 b-F@divergent3 b-G
1031 o 8:1473d4b996d1 G2 b-F@divergent3 b-G
1032 |
1032 |
1033 | o 7:d94e89b773b6 F2 b-F
1033 | o 7:d11b3456a873 F2 b-F
1034 | |
1034 | |
1035 | o 5:7fe5bac4c918 H
1035 | o 5:5cb05ba470a7 H
1036 |/|
1036 |/|
1037 | o 3:7fb047a69f22 E b-F@divergent1
1037 | o 3:7fb047a69f22 E b-F@divergent1
1038 | |
1038 | |
1039 | | o 6:7c78f703e465 D2 b-D
1039 | | o 6:7c78f703e465 D2 b-D
1040 | | |
1040 | | |
1041 | | o 4:26805aba1e60 C
1041 | | o 4:26805aba1e60 C
1042 | | |
1042 | | |
1043 | | o 2:112478962961 B
1043 | | o 2:112478962961 B
1044 | |/
1044 | |/
1045 o | 1:1fc8102cda62 G
1045 o | 1:1fc8102cda62 G
1046 /
1046 /
1047 o 0:426bada5c675 A b-B b-C b-I
1047 o 0:426bada5c675 A b-B b-C b-I
1048
1048
1049 $ hg bookmark
1049 $ hg bookmark
1050 b-B 0:426bada5c675
1050 b-B 0:426bada5c675
1051 b-C 0:426bada5c675
1051 b-C 0:426bada5c675
1052 b-D 6:7c78f703e465
1052 b-D 6:7c78f703e465
1053 b-F 7:d94e89b773b6
1053 b-F 7:d11b3456a873
1054 b-F@divergent1 3:7fb047a69f22
1054 b-F@divergent1 3:7fb047a69f22
1055 b-F@divergent3 8:1473d4b996d1
1055 b-F@divergent3 8:1473d4b996d1
1056 b-G 8:1473d4b996d1
1056 b-G 8:1473d4b996d1
1057 b-I 0:426bada5c675
1057 b-I 0:426bada5c675
1058 b-Z -1:000000000000
1058 b-Z -1:000000000000
1059
1059
1060 Test the above using obsstore "by the way". Not directly related to strip, but
1060 Test the above using obsstore "by the way". Not directly related to strip, but
1061 we have reusable code here
1061 we have reusable code here
1062
1062
1063 $ cd $TESTTMP/scmutilcleanup.obsstore
1063 $ cd $TESTTMP/scmutilcleanup.obsstore
1064 $ cat >> .hg/hgrc <<EOF
1064 $ cat >> .hg/hgrc <<EOF
1065 > [experimental]
1065 > [experimental]
1066 > evolution=all
1066 > evolution=all
1067 > evolution.track-operation=1
1067 > evolution.track-operation=1
1068 > EOF
1068 > EOF
1069
1069
1070 $ hg log -r . -T '\n' --config extensions.t=$TESTTMP/scmutilcleanup.py
1070 $ hg log -r . -T '\n' --config extensions.t=$TESTTMP/scmutilcleanup.py
1071
1071
1072 $ rm .hg/localtags
1072 $ rm .hg/localtags
1073 $ hg log -G -T '{rev}:{node|short} {desc} {bookmarks}' -r 'sort(all(), topo)'
1073 $ hg log -G -T '{rev}:{node|short} {desc} {bookmarks}' -r 'sort(all(), topo)'
1074 o 12:1473d4b996d1 G2 b-F@divergent3 b-G
1074 o 12:1473d4b996d1 G2 b-F@divergent3 b-G
1075 |
1075 |
1076 | o 11:d94e89b773b6 F2 b-F
1076 | o 11:d11b3456a873 F2 b-F
1077 | |
1077 | |
1078 | o 8:7fe5bac4c918 H
1078 | o 8:5cb05ba470a7 H
1079 |/|
1079 |/|
1080 | o 4:7fb047a69f22 E b-F@divergent1
1080 | o 4:7fb047a69f22 E b-F@divergent1
1081 | |
1081 | |
1082 | | o 10:7c78f703e465 D2 b-D
1082 | | o 10:7c78f703e465 D2 b-D
1083 | | |
1083 | | |
1084 | | x 6:26805aba1e60 C
1084 | | x 6:26805aba1e60 C
1085 | | |
1085 | | |
1086 | | x 3:112478962961 B
1086 | | x 3:112478962961 B
1087 | |/
1087 | |/
1088 x | 1:1fc8102cda62 G
1088 x | 1:1fc8102cda62 G
1089 /
1089 /
1090 o 0:426bada5c675 A b-B b-C b-I
1090 o 0:426bada5c675 A b-B b-C b-I
1091
1091
1092 $ hg debugobsolete
1092 $ hg debugobsolete
1093 1fc8102cda6204549f031015641606ccf5513ec3 1473d4b996d1d1b121de6b39fab6a04fbf9d873e 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
1093 1fc8102cda6204549f031015641606ccf5513ec3 1473d4b996d1d1b121de6b39fab6a04fbf9d873e 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
1094 64a8289d249234b9886244d379f15e6b650b28e3 d94e89b773b67e72642a931159ada8d1a9246998 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
1094 64a8289d249234b9886244d379f15e6b650b28e3 d11b3456a873daec7c7bc53e5622e8df6d741bd2 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
1095 f585351a92f85104bff7c284233c338b10eb1df7 7c78f703e465d73102cc8780667ce269c5208a40 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
1095 f585351a92f85104bff7c284233c338b10eb1df7 7c78f703e465d73102cc8780667ce269c5208a40 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
1096 48b9aae0607f43ff110d84e6883c151942add5ab 0 {0000000000000000000000000000000000000000} (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
1096 48b9aae0607f43ff110d84e6883c151942add5ab 0 {0000000000000000000000000000000000000000} (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
1097 112478962961147124edd43549aedd1a335e44bf 0 {426bada5c67598ca65036d57d9e4b64b0c1ce7a0} (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
1097 112478962961147124edd43549aedd1a335e44bf 0 {426bada5c67598ca65036d57d9e4b64b0c1ce7a0} (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
1098 08ebfeb61bac6e3f12079de774d285a0d6689eba 0 {426bada5c67598ca65036d57d9e4b64b0c1ce7a0} (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
1098 08ebfeb61bac6e3f12079de774d285a0d6689eba 0 {426bada5c67598ca65036d57d9e4b64b0c1ce7a0} (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
1099 26805aba1e600a82e93661149f2313866a221a7b 0 {112478962961147124edd43549aedd1a335e44bf} (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
1099 26805aba1e600a82e93661149f2313866a221a7b 0 {112478962961147124edd43549aedd1a335e44bf} (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'replace', 'user': 'test'}
General Comments 0
You need to be logged in to leave comments. Login now