##// END OF EJS Templates
obsfate: only display date in verbose mode...
Boris Feld -
r34852:6f53a532 default
parent child Browse files
Show More
@@ -1,836 +1,837 b''
1 # obsutil.py - utility functions for obsolescence
1 # obsutil.py - utility functions for obsolescence
2 #
2 #
3 # Copyright 2017 Boris Feld <boris.feld@octobus.net>
3 # Copyright 2017 Boris Feld <boris.feld@octobus.net>
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 from __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 import re
10 import re
11
11
12 from . import (
12 from . import (
13 phases,
13 phases,
14 util
14 util
15 )
15 )
16
16
17 class marker(object):
17 class marker(object):
18 """Wrap obsolete marker raw data"""
18 """Wrap obsolete marker raw data"""
19
19
20 def __init__(self, repo, data):
20 def __init__(self, repo, data):
21 # the repo argument will be used to create changectx in later version
21 # the repo argument will be used to create changectx in later version
22 self._repo = repo
22 self._repo = repo
23 self._data = data
23 self._data = data
24 self._decodedmeta = None
24 self._decodedmeta = None
25
25
26 def __hash__(self):
26 def __hash__(self):
27 return hash(self._data)
27 return hash(self._data)
28
28
29 def __eq__(self, other):
29 def __eq__(self, other):
30 if type(other) != type(self):
30 if type(other) != type(self):
31 return False
31 return False
32 return self._data == other._data
32 return self._data == other._data
33
33
34 def precnode(self):
34 def precnode(self):
35 msg = ("'marker.precnode' is deprecated, "
35 msg = ("'marker.precnode' is deprecated, "
36 "use 'marker.prednode'")
36 "use 'marker.prednode'")
37 util.nouideprecwarn(msg, '4.4')
37 util.nouideprecwarn(msg, '4.4')
38 return self.prednode()
38 return self.prednode()
39
39
40 def prednode(self):
40 def prednode(self):
41 """Predecessor changeset node identifier"""
41 """Predecessor changeset node identifier"""
42 return self._data[0]
42 return self._data[0]
43
43
44 def succnodes(self):
44 def succnodes(self):
45 """List of successor changesets node identifiers"""
45 """List of successor changesets node identifiers"""
46 return self._data[1]
46 return self._data[1]
47
47
48 def parentnodes(self):
48 def parentnodes(self):
49 """Parents of the predecessors (None if not recorded)"""
49 """Parents of the predecessors (None if not recorded)"""
50 return self._data[5]
50 return self._data[5]
51
51
52 def metadata(self):
52 def metadata(self):
53 """Decoded metadata dictionary"""
53 """Decoded metadata dictionary"""
54 return dict(self._data[3])
54 return dict(self._data[3])
55
55
56 def date(self):
56 def date(self):
57 """Creation date as (unixtime, offset)"""
57 """Creation date as (unixtime, offset)"""
58 return self._data[4]
58 return self._data[4]
59
59
60 def flags(self):
60 def flags(self):
61 """The flags field of the marker"""
61 """The flags field of the marker"""
62 return self._data[2]
62 return self._data[2]
63
63
64 def getmarkers(repo, nodes=None, exclusive=False):
64 def getmarkers(repo, nodes=None, exclusive=False):
65 """returns markers known in a repository
65 """returns markers known in a repository
66
66
67 If <nodes> is specified, only markers "relevant" to those nodes are are
67 If <nodes> is specified, only markers "relevant" to those nodes are are
68 returned"""
68 returned"""
69 if nodes is None:
69 if nodes is None:
70 rawmarkers = repo.obsstore
70 rawmarkers = repo.obsstore
71 elif exclusive:
71 elif exclusive:
72 rawmarkers = exclusivemarkers(repo, nodes)
72 rawmarkers = exclusivemarkers(repo, nodes)
73 else:
73 else:
74 rawmarkers = repo.obsstore.relevantmarkers(nodes)
74 rawmarkers = repo.obsstore.relevantmarkers(nodes)
75
75
76 for markerdata in rawmarkers:
76 for markerdata in rawmarkers:
77 yield marker(repo, markerdata)
77 yield marker(repo, markerdata)
78
78
79 def closestpredecessors(repo, nodeid):
79 def closestpredecessors(repo, nodeid):
80 """yield the list of next predecessors pointing on visible changectx nodes
80 """yield the list of next predecessors pointing on visible changectx nodes
81
81
82 This function respect the repoview filtering, filtered revision will be
82 This function respect the repoview filtering, filtered revision will be
83 considered missing.
83 considered missing.
84 """
84 """
85
85
86 precursors = repo.obsstore.predecessors
86 precursors = repo.obsstore.predecessors
87 stack = [nodeid]
87 stack = [nodeid]
88 seen = set(stack)
88 seen = set(stack)
89
89
90 while stack:
90 while stack:
91 current = stack.pop()
91 current = stack.pop()
92 currentpreccs = precursors.get(current, ())
92 currentpreccs = precursors.get(current, ())
93
93
94 for prec in currentpreccs:
94 for prec in currentpreccs:
95 precnodeid = prec[0]
95 precnodeid = prec[0]
96
96
97 # Basic cycle protection
97 # Basic cycle protection
98 if precnodeid in seen:
98 if precnodeid in seen:
99 continue
99 continue
100 seen.add(precnodeid)
100 seen.add(precnodeid)
101
101
102 if precnodeid in repo:
102 if precnodeid in repo:
103 yield precnodeid
103 yield precnodeid
104 else:
104 else:
105 stack.append(precnodeid)
105 stack.append(precnodeid)
106
106
107 def allprecursors(*args, **kwargs):
107 def allprecursors(*args, **kwargs):
108 """ (DEPRECATED)
108 """ (DEPRECATED)
109 """
109 """
110 msg = ("'obsutil.allprecursors' is deprecated, "
110 msg = ("'obsutil.allprecursors' is deprecated, "
111 "use 'obsutil.allpredecessors'")
111 "use 'obsutil.allpredecessors'")
112 util.nouideprecwarn(msg, '4.4')
112 util.nouideprecwarn(msg, '4.4')
113
113
114 return allpredecessors(*args, **kwargs)
114 return allpredecessors(*args, **kwargs)
115
115
116 def allpredecessors(obsstore, nodes, ignoreflags=0):
116 def allpredecessors(obsstore, nodes, ignoreflags=0):
117 """Yield node for every precursors of <nodes>.
117 """Yield node for every precursors of <nodes>.
118
118
119 Some precursors may be unknown locally.
119 Some precursors may be unknown locally.
120
120
121 This is a linear yield unsuited to detecting folded changesets. It includes
121 This is a linear yield unsuited to detecting folded changesets. It includes
122 initial nodes too."""
122 initial nodes too."""
123
123
124 remaining = set(nodes)
124 remaining = set(nodes)
125 seen = set(remaining)
125 seen = set(remaining)
126 while remaining:
126 while remaining:
127 current = remaining.pop()
127 current = remaining.pop()
128 yield current
128 yield current
129 for mark in obsstore.predecessors.get(current, ()):
129 for mark in obsstore.predecessors.get(current, ()):
130 # ignore marker flagged with specified flag
130 # ignore marker flagged with specified flag
131 if mark[2] & ignoreflags:
131 if mark[2] & ignoreflags:
132 continue
132 continue
133 suc = mark[0]
133 suc = mark[0]
134 if suc not in seen:
134 if suc not in seen:
135 seen.add(suc)
135 seen.add(suc)
136 remaining.add(suc)
136 remaining.add(suc)
137
137
138 def allsuccessors(obsstore, nodes, ignoreflags=0):
138 def allsuccessors(obsstore, nodes, ignoreflags=0):
139 """Yield node for every successor of <nodes>.
139 """Yield node for every successor of <nodes>.
140
140
141 Some successors may be unknown locally.
141 Some successors may be unknown locally.
142
142
143 This is a linear yield unsuited to detecting split changesets. It includes
143 This is a linear yield unsuited to detecting split changesets. It includes
144 initial nodes too."""
144 initial nodes too."""
145 remaining = set(nodes)
145 remaining = set(nodes)
146 seen = set(remaining)
146 seen = set(remaining)
147 while remaining:
147 while remaining:
148 current = remaining.pop()
148 current = remaining.pop()
149 yield current
149 yield current
150 for mark in obsstore.successors.get(current, ()):
150 for mark in obsstore.successors.get(current, ()):
151 # ignore marker flagged with specified flag
151 # ignore marker flagged with specified flag
152 if mark[2] & ignoreflags:
152 if mark[2] & ignoreflags:
153 continue
153 continue
154 for suc in mark[1]:
154 for suc in mark[1]:
155 if suc not in seen:
155 if suc not in seen:
156 seen.add(suc)
156 seen.add(suc)
157 remaining.add(suc)
157 remaining.add(suc)
158
158
159 def _filterprunes(markers):
159 def _filterprunes(markers):
160 """return a set with no prune markers"""
160 """return a set with no prune markers"""
161 return set(m for m in markers if m[1])
161 return set(m for m in markers if m[1])
162
162
163 def exclusivemarkers(repo, nodes):
163 def exclusivemarkers(repo, nodes):
164 """set of markers relevant to "nodes" but no other locally-known nodes
164 """set of markers relevant to "nodes" but no other locally-known nodes
165
165
166 This function compute the set of markers "exclusive" to a locally-known
166 This function compute the set of markers "exclusive" to a locally-known
167 node. This means we walk the markers starting from <nodes> until we reach a
167 node. This means we walk the markers starting from <nodes> until we reach a
168 locally-known precursors outside of <nodes>. Element of <nodes> with
168 locally-known precursors outside of <nodes>. Element of <nodes> with
169 locally-known successors outside of <nodes> are ignored (since their
169 locally-known successors outside of <nodes> are ignored (since their
170 precursors markers are also relevant to these successors).
170 precursors markers are also relevant to these successors).
171
171
172 For example:
172 For example:
173
173
174 # (A0 rewritten as A1)
174 # (A0 rewritten as A1)
175 #
175 #
176 # A0 <-1- A1 # Marker "1" is exclusive to A1
176 # A0 <-1- A1 # Marker "1" is exclusive to A1
177
177
178 or
178 or
179
179
180 # (A0 rewritten as AX; AX rewritten as A1; AX is unkown locally)
180 # (A0 rewritten as AX; AX rewritten as A1; AX is unkown locally)
181 #
181 #
182 # <-1- A0 <-2- AX <-3- A1 # Marker "2,3" are exclusive to A1
182 # <-1- A0 <-2- AX <-3- A1 # Marker "2,3" are exclusive to A1
183
183
184 or
184 or
185
185
186 # (A0 has unknown precursors, A0 rewritten as A1 and A2 (divergence))
186 # (A0 has unknown precursors, A0 rewritten as A1 and A2 (divergence))
187 #
187 #
188 # <-2- A1 # Marker "2" is exclusive to A0,A1
188 # <-2- A1 # Marker "2" is exclusive to A0,A1
189 # /
189 # /
190 # <-1- A0
190 # <-1- A0
191 # \
191 # \
192 # <-3- A2 # Marker "3" is exclusive to A0,A2
192 # <-3- A2 # Marker "3" is exclusive to A0,A2
193 #
193 #
194 # in addition:
194 # in addition:
195 #
195 #
196 # Markers "2,3" are exclusive to A1,A2
196 # Markers "2,3" are exclusive to A1,A2
197 # Markers "1,2,3" are exclusive to A0,A1,A2
197 # Markers "1,2,3" are exclusive to A0,A1,A2
198
198
199 See test/test-obsolete-bundle-strip.t for more examples.
199 See test/test-obsolete-bundle-strip.t for more examples.
200
200
201 An example usage is strip. When stripping a changeset, we also want to
201 An example usage is strip. When stripping a changeset, we also want to
202 strip the markers exclusive to this changeset. Otherwise we would have
202 strip the markers exclusive to this changeset. Otherwise we would have
203 "dangling"" obsolescence markers from its precursors: Obsolescence markers
203 "dangling"" obsolescence markers from its precursors: Obsolescence markers
204 marking a node as obsolete without any successors available locally.
204 marking a node as obsolete without any successors available locally.
205
205
206 As for relevant markers, the prune markers for children will be followed.
206 As for relevant markers, the prune markers for children will be followed.
207 Of course, they will only be followed if the pruned children is
207 Of course, they will only be followed if the pruned children is
208 locally-known. Since the prune markers are relevant to the pruned node.
208 locally-known. Since the prune markers are relevant to the pruned node.
209 However, while prune markers are considered relevant to the parent of the
209 However, while prune markers are considered relevant to the parent of the
210 pruned changesets, prune markers for locally-known changeset (with no
210 pruned changesets, prune markers for locally-known changeset (with no
211 successors) are considered exclusive to the pruned nodes. This allows
211 successors) are considered exclusive to the pruned nodes. This allows
212 to strip the prune markers (with the rest of the exclusive chain) alongside
212 to strip the prune markers (with the rest of the exclusive chain) alongside
213 the pruned changesets.
213 the pruned changesets.
214 """
214 """
215 # running on a filtered repository would be dangerous as markers could be
215 # running on a filtered repository would be dangerous as markers could be
216 # reported as exclusive when they are relevant for other filtered nodes.
216 # reported as exclusive when they are relevant for other filtered nodes.
217 unfi = repo.unfiltered()
217 unfi = repo.unfiltered()
218
218
219 # shortcut to various useful item
219 # shortcut to various useful item
220 nm = unfi.changelog.nodemap
220 nm = unfi.changelog.nodemap
221 precursorsmarkers = unfi.obsstore.predecessors
221 precursorsmarkers = unfi.obsstore.predecessors
222 successormarkers = unfi.obsstore.successors
222 successormarkers = unfi.obsstore.successors
223 childrenmarkers = unfi.obsstore.children
223 childrenmarkers = unfi.obsstore.children
224
224
225 # exclusive markers (return of the function)
225 # exclusive markers (return of the function)
226 exclmarkers = set()
226 exclmarkers = set()
227 # we need fast membership testing
227 # we need fast membership testing
228 nodes = set(nodes)
228 nodes = set(nodes)
229 # looking for head in the obshistory
229 # looking for head in the obshistory
230 #
230 #
231 # XXX we are ignoring all issues in regard with cycle for now.
231 # XXX we are ignoring all issues in regard with cycle for now.
232 stack = [n for n in nodes if not _filterprunes(successormarkers.get(n, ()))]
232 stack = [n for n in nodes if not _filterprunes(successormarkers.get(n, ()))]
233 stack.sort()
233 stack.sort()
234 # nodes already stacked
234 # nodes already stacked
235 seennodes = set(stack)
235 seennodes = set(stack)
236 while stack:
236 while stack:
237 current = stack.pop()
237 current = stack.pop()
238 # fetch precursors markers
238 # fetch precursors markers
239 markers = list(precursorsmarkers.get(current, ()))
239 markers = list(precursorsmarkers.get(current, ()))
240 # extend the list with prune markers
240 # extend the list with prune markers
241 for mark in successormarkers.get(current, ()):
241 for mark in successormarkers.get(current, ()):
242 if not mark[1]:
242 if not mark[1]:
243 markers.append(mark)
243 markers.append(mark)
244 # and markers from children (looking for prune)
244 # and markers from children (looking for prune)
245 for mark in childrenmarkers.get(current, ()):
245 for mark in childrenmarkers.get(current, ()):
246 if not mark[1]:
246 if not mark[1]:
247 markers.append(mark)
247 markers.append(mark)
248 # traverse the markers
248 # traverse the markers
249 for mark in markers:
249 for mark in markers:
250 if mark in exclmarkers:
250 if mark in exclmarkers:
251 # markers already selected
251 # markers already selected
252 continue
252 continue
253
253
254 # If the markers is about the current node, select it
254 # If the markers is about the current node, select it
255 #
255 #
256 # (this delay the addition of markers from children)
256 # (this delay the addition of markers from children)
257 if mark[1] or mark[0] == current:
257 if mark[1] or mark[0] == current:
258 exclmarkers.add(mark)
258 exclmarkers.add(mark)
259
259
260 # should we keep traversing through the precursors?
260 # should we keep traversing through the precursors?
261 prec = mark[0]
261 prec = mark[0]
262
262
263 # nodes in the stack or already processed
263 # nodes in the stack or already processed
264 if prec in seennodes:
264 if prec in seennodes:
265 continue
265 continue
266
266
267 # is this a locally known node ?
267 # is this a locally known node ?
268 known = prec in nm
268 known = prec in nm
269 # if locally-known and not in the <nodes> set the traversal
269 # if locally-known and not in the <nodes> set the traversal
270 # stop here.
270 # stop here.
271 if known and prec not in nodes:
271 if known and prec not in nodes:
272 continue
272 continue
273
273
274 # do not keep going if there are unselected markers pointing to this
274 # do not keep going if there are unselected markers pointing to this
275 # nodes. If we end up traversing these unselected markers later the
275 # nodes. If we end up traversing these unselected markers later the
276 # node will be taken care of at that point.
276 # node will be taken care of at that point.
277 precmarkers = _filterprunes(successormarkers.get(prec))
277 precmarkers = _filterprunes(successormarkers.get(prec))
278 if precmarkers.issubset(exclmarkers):
278 if precmarkers.issubset(exclmarkers):
279 seennodes.add(prec)
279 seennodes.add(prec)
280 stack.append(prec)
280 stack.append(prec)
281
281
282 return exclmarkers
282 return exclmarkers
283
283
284 def foreground(repo, nodes):
284 def foreground(repo, nodes):
285 """return all nodes in the "foreground" of other node
285 """return all nodes in the "foreground" of other node
286
286
287 The foreground of a revision is anything reachable using parent -> children
287 The foreground of a revision is anything reachable using parent -> children
288 or precursor -> successor relation. It is very similar to "descendant" but
288 or precursor -> successor relation. It is very similar to "descendant" but
289 augmented with obsolescence information.
289 augmented with obsolescence information.
290
290
291 Beware that possible obsolescence cycle may result if complex situation.
291 Beware that possible obsolescence cycle may result if complex situation.
292 """
292 """
293 repo = repo.unfiltered()
293 repo = repo.unfiltered()
294 foreground = set(repo.set('%ln::', nodes))
294 foreground = set(repo.set('%ln::', nodes))
295 if repo.obsstore:
295 if repo.obsstore:
296 # We only need this complicated logic if there is obsolescence
296 # We only need this complicated logic if there is obsolescence
297 # XXX will probably deserve an optimised revset.
297 # XXX will probably deserve an optimised revset.
298 nm = repo.changelog.nodemap
298 nm = repo.changelog.nodemap
299 plen = -1
299 plen = -1
300 # compute the whole set of successors or descendants
300 # compute the whole set of successors or descendants
301 while len(foreground) != plen:
301 while len(foreground) != plen:
302 plen = len(foreground)
302 plen = len(foreground)
303 succs = set(c.node() for c in foreground)
303 succs = set(c.node() for c in foreground)
304 mutable = [c.node() for c in foreground if c.mutable()]
304 mutable = [c.node() for c in foreground if c.mutable()]
305 succs.update(allsuccessors(repo.obsstore, mutable))
305 succs.update(allsuccessors(repo.obsstore, mutable))
306 known = (n for n in succs if n in nm)
306 known = (n for n in succs if n in nm)
307 foreground = set(repo.set('%ln::', known))
307 foreground = set(repo.set('%ln::', known))
308 return set(c.node() for c in foreground)
308 return set(c.node() for c in foreground)
309
309
310 # effectflag field
310 # effectflag field
311 #
311 #
312 # Effect-flag is a 1-byte bit field used to store what changed between a
312 # Effect-flag is a 1-byte bit field used to store what changed between a
313 # changeset and its successor(s).
313 # changeset and its successor(s).
314 #
314 #
315 # The effect flag is stored in obs-markers metadata while we iterate on the
315 # The effect flag is stored in obs-markers metadata while we iterate on the
316 # information design. That's why we have the EFFECTFLAGFIELD. If we come up
316 # information design. That's why we have the EFFECTFLAGFIELD. If we come up
317 # with an incompatible design for effect flag, we can store a new design under
317 # with an incompatible design for effect flag, we can store a new design under
318 # another field name so we don't break readers. We plan to extend the existing
318 # another field name so we don't break readers. We plan to extend the existing
319 # obsmarkers bit-field when the effect flag design will be stabilized.
319 # obsmarkers bit-field when the effect flag design will be stabilized.
320 #
320 #
321 # The effect-flag is placed behind an experimental flag
321 # The effect-flag is placed behind an experimental flag
322 # `effect-flags` set to off by default.
322 # `effect-flags` set to off by default.
323 #
323 #
324
324
325 EFFECTFLAGFIELD = "ef1"
325 EFFECTFLAGFIELD = "ef1"
326
326
327 DESCCHANGED = 1 << 0 # action changed the description
327 DESCCHANGED = 1 << 0 # action changed the description
328 METACHANGED = 1 << 1 # action change the meta
328 METACHANGED = 1 << 1 # action change the meta
329 DIFFCHANGED = 1 << 3 # action change diff introduced by the changeset
329 DIFFCHANGED = 1 << 3 # action change diff introduced by the changeset
330 PARENTCHANGED = 1 << 2 # action change the parent
330 PARENTCHANGED = 1 << 2 # action change the parent
331 USERCHANGED = 1 << 4 # the user changed
331 USERCHANGED = 1 << 4 # the user changed
332 DATECHANGED = 1 << 5 # the date changed
332 DATECHANGED = 1 << 5 # the date changed
333 BRANCHCHANGED = 1 << 6 # the branch changed
333 BRANCHCHANGED = 1 << 6 # the branch changed
334
334
335 METABLACKLIST = [
335 METABLACKLIST = [
336 re.compile('^branch$'),
336 re.compile('^branch$'),
337 re.compile('^.*-source$'),
337 re.compile('^.*-source$'),
338 re.compile('^.*_source$'),
338 re.compile('^.*_source$'),
339 re.compile('^source$'),
339 re.compile('^source$'),
340 ]
340 ]
341
341
342 def metanotblacklisted(metaitem):
342 def metanotblacklisted(metaitem):
343 """ Check that the key of a meta item (extrakey, extravalue) does not
343 """ Check that the key of a meta item (extrakey, extravalue) does not
344 match at least one of the blacklist pattern
344 match at least one of the blacklist pattern
345 """
345 """
346 metakey = metaitem[0]
346 metakey = metaitem[0]
347
347
348 return not any(pattern.match(metakey) for pattern in METABLACKLIST)
348 return not any(pattern.match(metakey) for pattern in METABLACKLIST)
349
349
350 def _prepare_hunk(hunk):
350 def _prepare_hunk(hunk):
351 """Drop all information but the username and patch"""
351 """Drop all information but the username and patch"""
352 cleanhunk = []
352 cleanhunk = []
353 for line in hunk.splitlines():
353 for line in hunk.splitlines():
354 if line.startswith(b'# User') or not line.startswith(b'#'):
354 if line.startswith(b'# User') or not line.startswith(b'#'):
355 if line.startswith(b'@@'):
355 if line.startswith(b'@@'):
356 line = b'@@\n'
356 line = b'@@\n'
357 cleanhunk.append(line)
357 cleanhunk.append(line)
358 return cleanhunk
358 return cleanhunk
359
359
360 def _getdifflines(iterdiff):
360 def _getdifflines(iterdiff):
361 """return a cleaned up lines"""
361 """return a cleaned up lines"""
362 lines = next(iterdiff, None)
362 lines = next(iterdiff, None)
363
363
364 if lines is None:
364 if lines is None:
365 return lines
365 return lines
366
366
367 return _prepare_hunk(lines)
367 return _prepare_hunk(lines)
368
368
369 def _cmpdiff(leftctx, rightctx):
369 def _cmpdiff(leftctx, rightctx):
370 """return True if both ctx introduce the "same diff"
370 """return True if both ctx introduce the "same diff"
371
371
372 This is a first and basic implementation, with many shortcoming.
372 This is a first and basic implementation, with many shortcoming.
373 """
373 """
374
374
375 # Leftctx or right ctx might be filtered, so we need to use the contexts
375 # Leftctx or right ctx might be filtered, so we need to use the contexts
376 # with an unfiltered repository to safely compute the diff
376 # with an unfiltered repository to safely compute the diff
377 leftunfi = leftctx._repo.unfiltered()[leftctx.rev()]
377 leftunfi = leftctx._repo.unfiltered()[leftctx.rev()]
378 leftdiff = leftunfi.diff(git=1)
378 leftdiff = leftunfi.diff(git=1)
379 rightunfi = rightctx._repo.unfiltered()[rightctx.rev()]
379 rightunfi = rightctx._repo.unfiltered()[rightctx.rev()]
380 rightdiff = rightunfi.diff(git=1)
380 rightdiff = rightunfi.diff(git=1)
381
381
382 left, right = (0, 0)
382 left, right = (0, 0)
383 while None not in (left, right):
383 while None not in (left, right):
384 left = _getdifflines(leftdiff)
384 left = _getdifflines(leftdiff)
385 right = _getdifflines(rightdiff)
385 right = _getdifflines(rightdiff)
386
386
387 if left != right:
387 if left != right:
388 return False
388 return False
389 return True
389 return True
390
390
391 def geteffectflag(relation):
391 def geteffectflag(relation):
392 """ From an obs-marker relation, compute what changed between the
392 """ From an obs-marker relation, compute what changed between the
393 predecessor and the successor.
393 predecessor and the successor.
394 """
394 """
395 effects = 0
395 effects = 0
396
396
397 source = relation[0]
397 source = relation[0]
398
398
399 for changectx in relation[1]:
399 for changectx in relation[1]:
400 # Check if description has changed
400 # Check if description has changed
401 if changectx.description() != source.description():
401 if changectx.description() != source.description():
402 effects |= DESCCHANGED
402 effects |= DESCCHANGED
403
403
404 # Check if user has changed
404 # Check if user has changed
405 if changectx.user() != source.user():
405 if changectx.user() != source.user():
406 effects |= USERCHANGED
406 effects |= USERCHANGED
407
407
408 # Check if date has changed
408 # Check if date has changed
409 if changectx.date() != source.date():
409 if changectx.date() != source.date():
410 effects |= DATECHANGED
410 effects |= DATECHANGED
411
411
412 # Check if branch has changed
412 # Check if branch has changed
413 if changectx.branch() != source.branch():
413 if changectx.branch() != source.branch():
414 effects |= BRANCHCHANGED
414 effects |= BRANCHCHANGED
415
415
416 # Check if at least one of the parent has changed
416 # Check if at least one of the parent has changed
417 if changectx.parents() != source.parents():
417 if changectx.parents() != source.parents():
418 effects |= PARENTCHANGED
418 effects |= PARENTCHANGED
419
419
420 # Check if other meta has changed
420 # Check if other meta has changed
421 changeextra = changectx.extra().items()
421 changeextra = changectx.extra().items()
422 ctxmeta = filter(metanotblacklisted, changeextra)
422 ctxmeta = filter(metanotblacklisted, changeextra)
423
423
424 sourceextra = source.extra().items()
424 sourceextra = source.extra().items()
425 srcmeta = filter(metanotblacklisted, sourceextra)
425 srcmeta = filter(metanotblacklisted, sourceextra)
426
426
427 if ctxmeta != srcmeta:
427 if ctxmeta != srcmeta:
428 effects |= METACHANGED
428 effects |= METACHANGED
429
429
430 # Check if the diff has changed
430 # Check if the diff has changed
431 if not _cmpdiff(source, changectx):
431 if not _cmpdiff(source, changectx):
432 effects |= DIFFCHANGED
432 effects |= DIFFCHANGED
433
433
434 return effects
434 return effects
435
435
436 def getobsoleted(repo, tr):
436 def getobsoleted(repo, tr):
437 """return the set of pre-existing revisions obsoleted by a transaction"""
437 """return the set of pre-existing revisions obsoleted by a transaction"""
438 torev = repo.unfiltered().changelog.nodemap.get
438 torev = repo.unfiltered().changelog.nodemap.get
439 phase = repo._phasecache.phase
439 phase = repo._phasecache.phase
440 succsmarkers = repo.obsstore.successors.get
440 succsmarkers = repo.obsstore.successors.get
441 public = phases.public
441 public = phases.public
442 addedmarkers = tr.changes.get('obsmarkers')
442 addedmarkers = tr.changes.get('obsmarkers')
443 addedrevs = tr.changes.get('revs')
443 addedrevs = tr.changes.get('revs')
444 seenrevs = set(addedrevs)
444 seenrevs = set(addedrevs)
445 obsoleted = set()
445 obsoleted = set()
446 for mark in addedmarkers:
446 for mark in addedmarkers:
447 node = mark[0]
447 node = mark[0]
448 rev = torev(node)
448 rev = torev(node)
449 if rev is None or rev in seenrevs:
449 if rev is None or rev in seenrevs:
450 continue
450 continue
451 seenrevs.add(rev)
451 seenrevs.add(rev)
452 if phase(repo, rev) == public:
452 if phase(repo, rev) == public:
453 continue
453 continue
454 if set(succsmarkers(node) or []).issubset(addedmarkers):
454 if set(succsmarkers(node) or []).issubset(addedmarkers):
455 obsoleted.add(rev)
455 obsoleted.add(rev)
456 return obsoleted
456 return obsoleted
457
457
458 class _succs(list):
458 class _succs(list):
459 """small class to represent a successors with some metadata about it"""
459 """small class to represent a successors with some metadata about it"""
460
460
461 def __init__(self, *args, **kwargs):
461 def __init__(self, *args, **kwargs):
462 super(_succs, self).__init__(*args, **kwargs)
462 super(_succs, self).__init__(*args, **kwargs)
463 self.markers = set()
463 self.markers = set()
464
464
465 def copy(self):
465 def copy(self):
466 new = _succs(self)
466 new = _succs(self)
467 new.markers = self.markers.copy()
467 new.markers = self.markers.copy()
468 return new
468 return new
469
469
470 @util.propertycache
470 @util.propertycache
471 def _set(self):
471 def _set(self):
472 # immutable
472 # immutable
473 return set(self)
473 return set(self)
474
474
475 def canmerge(self, other):
475 def canmerge(self, other):
476 return self._set.issubset(other._set)
476 return self._set.issubset(other._set)
477
477
478 def successorssets(repo, initialnode, closest=False, cache=None):
478 def successorssets(repo, initialnode, closest=False, cache=None):
479 """Return set of all latest successors of initial nodes
479 """Return set of all latest successors of initial nodes
480
480
481 The successors set of a changeset A are the group of revisions that succeed
481 The successors set of a changeset A are the group of revisions that succeed
482 A. It succeeds A as a consistent whole, each revision being only a partial
482 A. It succeeds A as a consistent whole, each revision being only a partial
483 replacement. By default, the successors set contains non-obsolete
483 replacement. By default, the successors set contains non-obsolete
484 changesets only, walking the obsolescence graph until reaching a leaf. If
484 changesets only, walking the obsolescence graph until reaching a leaf. If
485 'closest' is set to True, closest successors-sets are return (the
485 'closest' is set to True, closest successors-sets are return (the
486 obsolescence walk stops on known changesets).
486 obsolescence walk stops on known changesets).
487
487
488 This function returns the full list of successor sets which is why it
488 This function returns the full list of successor sets which is why it
489 returns a list of tuples and not just a single tuple. Each tuple is a valid
489 returns a list of tuples and not just a single tuple. Each tuple is a valid
490 successors set. Note that (A,) may be a valid successors set for changeset A
490 successors set. Note that (A,) may be a valid successors set for changeset A
491 (see below).
491 (see below).
492
492
493 In most cases, a changeset A will have a single element (e.g. the changeset
493 In most cases, a changeset A will have a single element (e.g. the changeset
494 A is replaced by A') in its successors set. Though, it is also common for a
494 A is replaced by A') in its successors set. Though, it is also common for a
495 changeset A to have no elements in its successor set (e.g. the changeset
495 changeset A to have no elements in its successor set (e.g. the changeset
496 has been pruned). Therefore, the returned list of successors sets will be
496 has been pruned). Therefore, the returned list of successors sets will be
497 [(A',)] or [], respectively.
497 [(A',)] or [], respectively.
498
498
499 When a changeset A is split into A' and B', however, it will result in a
499 When a changeset A is split into A' and B', however, it will result in a
500 successors set containing more than a single element, i.e. [(A',B')].
500 successors set containing more than a single element, i.e. [(A',B')].
501 Divergent changesets will result in multiple successors sets, i.e. [(A',),
501 Divergent changesets will result in multiple successors sets, i.e. [(A',),
502 (A'')].
502 (A'')].
503
503
504 If a changeset A is not obsolete, then it will conceptually have no
504 If a changeset A is not obsolete, then it will conceptually have no
505 successors set. To distinguish this from a pruned changeset, the successor
505 successors set. To distinguish this from a pruned changeset, the successor
506 set will contain itself only, i.e. [(A,)].
506 set will contain itself only, i.e. [(A,)].
507
507
508 Finally, final successors unknown locally are considered to be pruned
508 Finally, final successors unknown locally are considered to be pruned
509 (pruned: obsoleted without any successors). (Final: successors not affected
509 (pruned: obsoleted without any successors). (Final: successors not affected
510 by markers).
510 by markers).
511
511
512 The 'closest' mode respect the repoview filtering. For example, without
512 The 'closest' mode respect the repoview filtering. For example, without
513 filter it will stop at the first locally known changeset, with 'visible'
513 filter it will stop at the first locally known changeset, with 'visible'
514 filter it will stop on visible changesets).
514 filter it will stop on visible changesets).
515
515
516 The optional `cache` parameter is a dictionary that may contains
516 The optional `cache` parameter is a dictionary that may contains
517 precomputed successors sets. It is meant to reuse the computation of a
517 precomputed successors sets. It is meant to reuse the computation of a
518 previous call to `successorssets` when multiple calls are made at the same
518 previous call to `successorssets` when multiple calls are made at the same
519 time. The cache dictionary is updated in place. The caller is responsible
519 time. The cache dictionary is updated in place. The caller is responsible
520 for its life span. Code that makes multiple calls to `successorssets`
520 for its life span. Code that makes multiple calls to `successorssets`
521 *should* use this cache mechanism or risk a performance hit.
521 *should* use this cache mechanism or risk a performance hit.
522
522
523 Since results are different depending of the 'closest' most, the same cache
523 Since results are different depending of the 'closest' most, the same cache
524 cannot be reused for both mode.
524 cannot be reused for both mode.
525 """
525 """
526
526
527 succmarkers = repo.obsstore.successors
527 succmarkers = repo.obsstore.successors
528
528
529 # Stack of nodes we search successors sets for
529 # Stack of nodes we search successors sets for
530 toproceed = [initialnode]
530 toproceed = [initialnode]
531 # set version of above list for fast loop detection
531 # set version of above list for fast loop detection
532 # element added to "toproceed" must be added here
532 # element added to "toproceed" must be added here
533 stackedset = set(toproceed)
533 stackedset = set(toproceed)
534 if cache is None:
534 if cache is None:
535 cache = {}
535 cache = {}
536
536
537 # This while loop is the flattened version of a recursive search for
537 # This while loop is the flattened version of a recursive search for
538 # successors sets
538 # successors sets
539 #
539 #
540 # def successorssets(x):
540 # def successorssets(x):
541 # successors = directsuccessors(x)
541 # successors = directsuccessors(x)
542 # ss = [[]]
542 # ss = [[]]
543 # for succ in directsuccessors(x):
543 # for succ in directsuccessors(x):
544 # # product as in itertools cartesian product
544 # # product as in itertools cartesian product
545 # ss = product(ss, successorssets(succ))
545 # ss = product(ss, successorssets(succ))
546 # return ss
546 # return ss
547 #
547 #
548 # But we can not use plain recursive calls here:
548 # But we can not use plain recursive calls here:
549 # - that would blow the python call stack
549 # - that would blow the python call stack
550 # - obsolescence markers may have cycles, we need to handle them.
550 # - obsolescence markers may have cycles, we need to handle them.
551 #
551 #
552 # The `toproceed` list act as our call stack. Every node we search
552 # The `toproceed` list act as our call stack. Every node we search
553 # successors set for are stacked there.
553 # successors set for are stacked there.
554 #
554 #
555 # The `stackedset` is set version of this stack used to check if a node is
555 # The `stackedset` is set version of this stack used to check if a node is
556 # already stacked. This check is used to detect cycles and prevent infinite
556 # already stacked. This check is used to detect cycles and prevent infinite
557 # loop.
557 # loop.
558 #
558 #
559 # successors set of all nodes are stored in the `cache` dictionary.
559 # successors set of all nodes are stored in the `cache` dictionary.
560 #
560 #
561 # After this while loop ends we use the cache to return the successors sets
561 # After this while loop ends we use the cache to return the successors sets
562 # for the node requested by the caller.
562 # for the node requested by the caller.
563 while toproceed:
563 while toproceed:
564 # Every iteration tries to compute the successors sets of the topmost
564 # Every iteration tries to compute the successors sets of the topmost
565 # node of the stack: CURRENT.
565 # node of the stack: CURRENT.
566 #
566 #
567 # There are four possible outcomes:
567 # There are four possible outcomes:
568 #
568 #
569 # 1) We already know the successors sets of CURRENT:
569 # 1) We already know the successors sets of CURRENT:
570 # -> mission accomplished, pop it from the stack.
570 # -> mission accomplished, pop it from the stack.
571 # 2) Stop the walk:
571 # 2) Stop the walk:
572 # default case: Node is not obsolete
572 # default case: Node is not obsolete
573 # closest case: Node is known at this repo filter level
573 # closest case: Node is known at this repo filter level
574 # -> the node is its own successors sets. Add it to the cache.
574 # -> the node is its own successors sets. Add it to the cache.
575 # 3) We do not know successors set of direct successors of CURRENT:
575 # 3) We do not know successors set of direct successors of CURRENT:
576 # -> We add those successors to the stack.
576 # -> We add those successors to the stack.
577 # 4) We know successors sets of all direct successors of CURRENT:
577 # 4) We know successors sets of all direct successors of CURRENT:
578 # -> We can compute CURRENT successors set and add it to the
578 # -> We can compute CURRENT successors set and add it to the
579 # cache.
579 # cache.
580 #
580 #
581 current = toproceed[-1]
581 current = toproceed[-1]
582
582
583 # case 2 condition is a bit hairy because of closest,
583 # case 2 condition is a bit hairy because of closest,
584 # we compute it on its own
584 # we compute it on its own
585 case2condition = ((current not in succmarkers)
585 case2condition = ((current not in succmarkers)
586 or (closest and current != initialnode
586 or (closest and current != initialnode
587 and current in repo))
587 and current in repo))
588
588
589 if current in cache:
589 if current in cache:
590 # case (1): We already know the successors sets
590 # case (1): We already know the successors sets
591 stackedset.remove(toproceed.pop())
591 stackedset.remove(toproceed.pop())
592 elif case2condition:
592 elif case2condition:
593 # case (2): end of walk.
593 # case (2): end of walk.
594 if current in repo:
594 if current in repo:
595 # We have a valid successors.
595 # We have a valid successors.
596 cache[current] = [_succs((current,))]
596 cache[current] = [_succs((current,))]
597 else:
597 else:
598 # Final obsolete version is unknown locally.
598 # Final obsolete version is unknown locally.
599 # Do not count that as a valid successors
599 # Do not count that as a valid successors
600 cache[current] = []
600 cache[current] = []
601 else:
601 else:
602 # cases (3) and (4)
602 # cases (3) and (4)
603 #
603 #
604 # We proceed in two phases. Phase 1 aims to distinguish case (3)
604 # We proceed in two phases. Phase 1 aims to distinguish case (3)
605 # from case (4):
605 # from case (4):
606 #
606 #
607 # For each direct successors of CURRENT, we check whether its
607 # For each direct successors of CURRENT, we check whether its
608 # successors sets are known. If they are not, we stack the
608 # successors sets are known. If they are not, we stack the
609 # unknown node and proceed to the next iteration of the while
609 # unknown node and proceed to the next iteration of the while
610 # loop. (case 3)
610 # loop. (case 3)
611 #
611 #
612 # During this step, we may detect obsolescence cycles: a node
612 # During this step, we may detect obsolescence cycles: a node
613 # with unknown successors sets but already in the call stack.
613 # with unknown successors sets but already in the call stack.
614 # In such a situation, we arbitrary set the successors sets of
614 # In such a situation, we arbitrary set the successors sets of
615 # the node to nothing (node pruned) to break the cycle.
615 # the node to nothing (node pruned) to break the cycle.
616 #
616 #
617 # If no break was encountered we proceed to phase 2.
617 # If no break was encountered we proceed to phase 2.
618 #
618 #
619 # Phase 2 computes successors sets of CURRENT (case 4); see details
619 # Phase 2 computes successors sets of CURRENT (case 4); see details
620 # in phase 2 itself.
620 # in phase 2 itself.
621 #
621 #
622 # Note the two levels of iteration in each phase.
622 # Note the two levels of iteration in each phase.
623 # - The first one handles obsolescence markers using CURRENT as
623 # - The first one handles obsolescence markers using CURRENT as
624 # precursor (successors markers of CURRENT).
624 # precursor (successors markers of CURRENT).
625 #
625 #
626 # Having multiple entry here means divergence.
626 # Having multiple entry here means divergence.
627 #
627 #
628 # - The second one handles successors defined in each marker.
628 # - The second one handles successors defined in each marker.
629 #
629 #
630 # Having none means pruned node, multiple successors means split,
630 # Having none means pruned node, multiple successors means split,
631 # single successors are standard replacement.
631 # single successors are standard replacement.
632 #
632 #
633 for mark in sorted(succmarkers[current]):
633 for mark in sorted(succmarkers[current]):
634 for suc in mark[1]:
634 for suc in mark[1]:
635 if suc not in cache:
635 if suc not in cache:
636 if suc in stackedset:
636 if suc in stackedset:
637 # cycle breaking
637 # cycle breaking
638 cache[suc] = []
638 cache[suc] = []
639 else:
639 else:
640 # case (3) If we have not computed successors sets
640 # case (3) If we have not computed successors sets
641 # of one of those successors we add it to the
641 # of one of those successors we add it to the
642 # `toproceed` stack and stop all work for this
642 # `toproceed` stack and stop all work for this
643 # iteration.
643 # iteration.
644 toproceed.append(suc)
644 toproceed.append(suc)
645 stackedset.add(suc)
645 stackedset.add(suc)
646 break
646 break
647 else:
647 else:
648 continue
648 continue
649 break
649 break
650 else:
650 else:
651 # case (4): we know all successors sets of all direct
651 # case (4): we know all successors sets of all direct
652 # successors
652 # successors
653 #
653 #
654 # Successors set contributed by each marker depends on the
654 # Successors set contributed by each marker depends on the
655 # successors sets of all its "successors" node.
655 # successors sets of all its "successors" node.
656 #
656 #
657 # Each different marker is a divergence in the obsolescence
657 # Each different marker is a divergence in the obsolescence
658 # history. It contributes successors sets distinct from other
658 # history. It contributes successors sets distinct from other
659 # markers.
659 # markers.
660 #
660 #
661 # Within a marker, a successor may have divergent successors
661 # Within a marker, a successor may have divergent successors
662 # sets. In such a case, the marker will contribute multiple
662 # sets. In such a case, the marker will contribute multiple
663 # divergent successors sets. If multiple successors have
663 # divergent successors sets. If multiple successors have
664 # divergent successors sets, a Cartesian product is used.
664 # divergent successors sets, a Cartesian product is used.
665 #
665 #
666 # At the end we post-process successors sets to remove
666 # At the end we post-process successors sets to remove
667 # duplicated entry and successors set that are strict subset of
667 # duplicated entry and successors set that are strict subset of
668 # another one.
668 # another one.
669 succssets = []
669 succssets = []
670 for mark in sorted(succmarkers[current]):
670 for mark in sorted(succmarkers[current]):
671 # successors sets contributed by this marker
671 # successors sets contributed by this marker
672 base = _succs()
672 base = _succs()
673 base.markers.add(mark)
673 base.markers.add(mark)
674 markss = [base]
674 markss = [base]
675 for suc in mark[1]:
675 for suc in mark[1]:
676 # cardinal product with previous successors
676 # cardinal product with previous successors
677 productresult = []
677 productresult = []
678 for prefix in markss:
678 for prefix in markss:
679 for suffix in cache[suc]:
679 for suffix in cache[suc]:
680 newss = prefix.copy()
680 newss = prefix.copy()
681 newss.markers.update(suffix.markers)
681 newss.markers.update(suffix.markers)
682 for part in suffix:
682 for part in suffix:
683 # do not duplicated entry in successors set
683 # do not duplicated entry in successors set
684 # first entry wins.
684 # first entry wins.
685 if part not in newss:
685 if part not in newss:
686 newss.append(part)
686 newss.append(part)
687 productresult.append(newss)
687 productresult.append(newss)
688 markss = productresult
688 markss = productresult
689 succssets.extend(markss)
689 succssets.extend(markss)
690 # remove duplicated and subset
690 # remove duplicated and subset
691 seen = []
691 seen = []
692 final = []
692 final = []
693 candidates = sorted((s for s in succssets if s),
693 candidates = sorted((s for s in succssets if s),
694 key=len, reverse=True)
694 key=len, reverse=True)
695 for cand in candidates:
695 for cand in candidates:
696 for seensuccs in seen:
696 for seensuccs in seen:
697 if cand.canmerge(seensuccs):
697 if cand.canmerge(seensuccs):
698 seensuccs.markers.update(cand.markers)
698 seensuccs.markers.update(cand.markers)
699 break
699 break
700 else:
700 else:
701 final.append(cand)
701 final.append(cand)
702 seen.append(cand)
702 seen.append(cand)
703 final.reverse() # put small successors set first
703 final.reverse() # put small successors set first
704 cache[current] = final
704 cache[current] = final
705 return cache[initialnode]
705 return cache[initialnode]
706
706
707 def successorsandmarkers(repo, ctx):
707 def successorsandmarkers(repo, ctx):
708 """compute the raw data needed for computing obsfate
708 """compute the raw data needed for computing obsfate
709 Returns a list of dict, one dict per successors set
709 Returns a list of dict, one dict per successors set
710 """
710 """
711 if not ctx.obsolete():
711 if not ctx.obsolete():
712 return None
712 return None
713
713
714 ssets = successorssets(repo, ctx.node(), closest=True)
714 ssets = successorssets(repo, ctx.node(), closest=True)
715
715
716 # closestsuccessors returns an empty list for pruned revisions, remap it
716 # closestsuccessors returns an empty list for pruned revisions, remap it
717 # into a list containing an empty list for future processing
717 # into a list containing an empty list for future processing
718 if ssets == []:
718 if ssets == []:
719 ssets = [[]]
719 ssets = [[]]
720
720
721 # Try to recover pruned markers
721 # Try to recover pruned markers
722 succsmap = repo.obsstore.successors
722 succsmap = repo.obsstore.successors
723 fullsuccessorsets = [] # successor set + markers
723 fullsuccessorsets = [] # successor set + markers
724 for sset in ssets:
724 for sset in ssets:
725 if sset:
725 if sset:
726 fullsuccessorsets.append(sset)
726 fullsuccessorsets.append(sset)
727 else:
727 else:
728 # successorsset return an empty set() when ctx or one of its
728 # successorsset return an empty set() when ctx or one of its
729 # successors is pruned.
729 # successors is pruned.
730 # In this case, walk the obs-markers tree again starting with ctx
730 # In this case, walk the obs-markers tree again starting with ctx
731 # and find the relevant pruning obs-makers, the ones without
731 # and find the relevant pruning obs-makers, the ones without
732 # successors.
732 # successors.
733 # Having these markers allow us to compute some information about
733 # Having these markers allow us to compute some information about
734 # its fate, like who pruned this changeset and when.
734 # its fate, like who pruned this changeset and when.
735
735
736 # XXX we do not catch all prune markers (eg rewritten then pruned)
736 # XXX we do not catch all prune markers (eg rewritten then pruned)
737 # (fix me later)
737 # (fix me later)
738 foundany = False
738 foundany = False
739 for mark in succsmap.get(ctx.node(), ()):
739 for mark in succsmap.get(ctx.node(), ()):
740 if not mark[1]:
740 if not mark[1]:
741 foundany = True
741 foundany = True
742 sset = _succs()
742 sset = _succs()
743 sset.markers.add(mark)
743 sset.markers.add(mark)
744 fullsuccessorsets.append(sset)
744 fullsuccessorsets.append(sset)
745 if not foundany:
745 if not foundany:
746 fullsuccessorsets.append(_succs())
746 fullsuccessorsets.append(_succs())
747
747
748 values = []
748 values = []
749 for sset in fullsuccessorsets:
749 for sset in fullsuccessorsets:
750 values.append({'successors': sset, 'markers': sset.markers})
750 values.append({'successors': sset, 'markers': sset.markers})
751
751
752 return values
752 return values
753
753
754 def successorsetverb(successorset):
754 def successorsetverb(successorset):
755 """ Return the verb summarizing the successorset
755 """ Return the verb summarizing the successorset
756 """
756 """
757 if not successorset:
757 if not successorset:
758 verb = 'pruned'
758 verb = 'pruned'
759 elif len(successorset) == 1:
759 elif len(successorset) == 1:
760 verb = 'rewritten'
760 verb = 'rewritten'
761 else:
761 else:
762 verb = 'split'
762 verb = 'split'
763 return verb
763 return verb
764
764
765 def markersdates(markers):
765 def markersdates(markers):
766 """returns the list of dates for a list of markers
766 """returns the list of dates for a list of markers
767 """
767 """
768 return [m[4] for m in markers]
768 return [m[4] for m in markers]
769
769
770 def markersusers(markers):
770 def markersusers(markers):
771 """ Returns a sorted list of markers users without duplicates
771 """ Returns a sorted list of markers users without duplicates
772 """
772 """
773 markersmeta = [dict(m[3]) for m in markers]
773 markersmeta = [dict(m[3]) for m in markers]
774 users = set(meta.get('user') for meta in markersmeta if meta.get('user'))
774 users = set(meta.get('user') for meta in markersmeta if meta.get('user'))
775
775
776 return sorted(users)
776 return sorted(users)
777
777
778 def markersoperations(markers):
778 def markersoperations(markers):
779 """ Returns a sorted list of markers operations without duplicates
779 """ Returns a sorted list of markers operations without duplicates
780 """
780 """
781 markersmeta = [dict(m[3]) for m in markers]
781 markersmeta = [dict(m[3]) for m in markers]
782 operations = set(meta.get('operation') for meta in markersmeta
782 operations = set(meta.get('operation') for meta in markersmeta
783 if meta.get('operation'))
783 if meta.get('operation'))
784
784
785 return sorted(operations)
785 return sorted(operations)
786
786
787 def obsfateprinter(successors, markers, ui):
787 def obsfateprinter(successors, markers, ui):
788 """ Build a obsfate string for a single successorset using all obsfate
788 """ Build a obsfate string for a single successorset using all obsfate
789 related function defined in obsutil
789 related function defined in obsutil
790 """
790 """
791 quiet = ui.quiet
791 quiet = ui.quiet
792 verbose = ui.verbose
792 verbose = ui.verbose
793 normal = not verbose and not quiet
793 normal = not verbose and not quiet
794
794
795 line = []
795 line = []
796
796
797 # Verb
797 # Verb
798 line.append(successorsetverb(successors))
798 line.append(successorsetverb(successors))
799
799
800 # Operations
800 # Operations
801 operations = markersoperations(markers)
801 operations = markersoperations(markers)
802 if operations:
802 if operations:
803 line.append(" using %s" % ", ".join(operations))
803 line.append(" using %s" % ", ".join(operations))
804
804
805 # Successors
805 # Successors
806 if successors:
806 if successors:
807 fmtsuccessors = [successors.joinfmt(succ) for succ in successors]
807 fmtsuccessors = [successors.joinfmt(succ) for succ in successors]
808 line.append(" as %s" % ", ".join(fmtsuccessors))
808 line.append(" as %s" % ", ".join(fmtsuccessors))
809
809
810 # Users
810 # Users
811 users = markersusers(markers)
811 users = markersusers(markers)
812 # Filter out current user in not verbose mode to reduce amount of
812 # Filter out current user in not verbose mode to reduce amount of
813 # information
813 # information
814 if not verbose:
814 if not verbose:
815 currentuser = ui.username(acceptempty=True)
815 currentuser = ui.username(acceptempty=True)
816 if len(users) == 1 and currentuser in users:
816 if len(users) == 1 and currentuser in users:
817 users = None
817 users = None
818
818
819 if (verbose or normal) and users:
819 if (verbose or normal) and users:
820 line.append(" by %s" % ", ".join(users))
820 line.append(" by %s" % ", ".join(users))
821
821
822 # Date
822 # Date
823 dates = markersdates(markers)
823 dates = markersdates(markers)
824
824
825 min_date = min(dates)
825 if verbose:
826 max_date = max(dates)
826 min_date = min(dates)
827 max_date = max(dates)
827
828
828 if min_date == max_date:
829 if min_date == max_date:
829 fmtmin_date = util.datestr(min_date, '%Y-%m-%d %H:%M %1%2')
830 fmtmin_date = util.datestr(min_date, '%Y-%m-%d %H:%M %1%2')
830 line.append(" (at %s)" % fmtmin_date)
831 line.append(" (at %s)" % fmtmin_date)
831 else:
832 else:
832 fmtmin_date = util.datestr(min_date, '%Y-%m-%d %H:%M %1%2')
833 fmtmin_date = util.datestr(min_date, '%Y-%m-%d %H:%M %1%2')
833 fmtmax_date = util.datestr(max_date, '%Y-%m-%d %H:%M %1%2')
834 fmtmax_date = util.datestr(max_date, '%Y-%m-%d %H:%M %1%2')
834 line.append(" (between %s and %s)" % (fmtmin_date, fmtmax_date))
835 line.append(" (between %s and %s)" % (fmtmin_date, fmtmax_date))
835
836
836 return "".join(line)
837 return "".join(line)
@@ -1,2128 +1,2128 b''
1 This test file test the various templates related to obsmarkers.
1 This test file test the various templates related to obsmarkers.
2
2
3 Global setup
3 Global setup
4 ============
4 ============
5
5
6 $ . $TESTDIR/testlib/obsmarker-common.sh
6 $ . $TESTDIR/testlib/obsmarker-common.sh
7 $ cat >> $HGRCPATH <<EOF
7 $ cat >> $HGRCPATH <<EOF
8 > [ui]
8 > [ui]
9 > interactive = true
9 > interactive = true
10 > [phases]
10 > [phases]
11 > publish=False
11 > publish=False
12 > [experimental]
12 > [experimental]
13 > stabilization=all
13 > stabilization=all
14 > [templates]
14 > [templates]
15 > obsfatesuccessors = "{if(successors, " as ")}{join(successors, ", ")}"
15 > obsfatesuccessors = "{if(successors, " as ")}{join(successors, ", ")}"
16 > obsfateverb = "{obsfateverb(successors)}"
16 > obsfateverb = "{obsfateverb(successors)}"
17 > obsfateoperations = "{if(obsfateoperations(markers), " using {join(obsfateoperations(markers), ", ")}")}"
17 > obsfateoperations = "{if(obsfateoperations(markers), " using {join(obsfateoperations(markers), ", ")}")}"
18 > obsfateusers = "{if(obsfateusers(markers), " by {join(obsfateusers(markers), ", ")}")}"
18 > obsfateusers = "{if(obsfateusers(markers), " by {join(obsfateusers(markers), ", ")}")}"
19 > obsfatedate = "{if(obsfatedate(markers), "{ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), " (at {min(obsfatedate(markers))|isodate})", " (between {min(obsfatedate(markers))|isodate} and {max(obsfatedate(markers))|isodate})")}")}"
19 > obsfatedate = "{if(obsfatedate(markers), "{ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), " (at {min(obsfatedate(markers))|isodate})", " (between {min(obsfatedate(markers))|isodate} and {max(obsfatedate(markers))|isodate})")}")}"
20 > obsfatetempl = "{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}; "
20 > obsfatetempl = "{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}; "
21 > [alias]
21 > [alias]
22 > tlog = log -G -T '{node|short}\
22 > tlog = log -G -T '{node|short}\
23 > {if(predecessors, "\n Predecessors: {predecessors}")}\
23 > {if(predecessors, "\n Predecessors: {predecessors}")}\
24 > {if(predecessors, "\n semi-colon: {join(predecessors, "; ")}")}\
24 > {if(predecessors, "\n semi-colon: {join(predecessors, "; ")}")}\
25 > {if(predecessors, "\n json: {predecessors|json}")}\
25 > {if(predecessors, "\n json: {predecessors|json}")}\
26 > {if(predecessors, "\n map: {join(predecessors % "{rev}:{node}", " ")}")}\
26 > {if(predecessors, "\n map: {join(predecessors % "{rev}:{node}", " ")}")}\
27 > {if(successorssets, "\n Successors: {successorssets}")}\
27 > {if(successorssets, "\n Successors: {successorssets}")}\
28 > {if(successorssets, "\n multi-line: {join(successorssets, "\n multi-line: ")}")}\
28 > {if(successorssets, "\n multi-line: {join(successorssets, "\n multi-line: ")}")}\
29 > {if(successorssets, "\n json: {successorssets|json}")}\n'
29 > {if(successorssets, "\n json: {successorssets|json}")}\n'
30 > fatelog = log -G -T '{node|short}\n{if(succsandmarkers, " Obsfate: {succsandmarkers % "{obsfatetempl}"} \n" )}'
30 > fatelog = log -G -T '{node|short}\n{if(succsandmarkers, " Obsfate: {succsandmarkers % "{obsfatetempl}"} \n" )}'
31 > fatelogjson = log -G -T '{node|short}\n{if(succsandmarkers, " Obsfate: {succsandmarkers|json}\n")}'
31 > fatelogjson = log -G -T '{node|short}\n{if(succsandmarkers, " Obsfate: {succsandmarkers|json}\n")}'
32 > fatelogkw = log -G -T '{node|short}\n{if(obsfate, "{obsfate % " Obsfate: {fate}\n"}")}'
32 > fatelogkw = log -G -T '{node|short}\n{if(obsfate, "{obsfate % " Obsfate: {fate}\n"}")}'
33 > EOF
33 > EOF
34
34
35 Test templates on amended commit
35 Test templates on amended commit
36 ================================
36 ================================
37
37
38 Test setup
38 Test setup
39 ----------
39 ----------
40
40
41 $ hg init $TESTTMP/templates-local-amend
41 $ hg init $TESTTMP/templates-local-amend
42 $ cd $TESTTMP/templates-local-amend
42 $ cd $TESTTMP/templates-local-amend
43 $ mkcommit ROOT
43 $ mkcommit ROOT
44 $ mkcommit A0
44 $ mkcommit A0
45 $ echo 42 >> A0
45 $ echo 42 >> A0
46 $ hg commit --amend -m "A1" --config devel.default-date="1234567890 0"
46 $ hg commit --amend -m "A1" --config devel.default-date="1234567890 0"
47 $ hg commit --amend -m "A2" --config devel.default-date="987654321 0" --config devel.user.obsmarker=test2
47 $ hg commit --amend -m "A2" --config devel.default-date="987654321 0" --config devel.user.obsmarker=test2
48
48
49 $ hg log --hidden -G
49 $ hg log --hidden -G
50 @ changeset: 3:d004c8f274b9
50 @ changeset: 3:d004c8f274b9
51 | tag: tip
51 | tag: tip
52 | parent: 0:ea207398892e
52 | parent: 0:ea207398892e
53 | user: test
53 | user: test
54 | date: Thu Jan 01 00:00:00 1970 +0000
54 | date: Thu Jan 01 00:00:00 1970 +0000
55 | summary: A2
55 | summary: A2
56 |
56 |
57 | x changeset: 2:a468dc9b3633
57 | x changeset: 2:a468dc9b3633
58 |/ parent: 0:ea207398892e
58 |/ parent: 0:ea207398892e
59 | user: test
59 | user: test
60 | date: Thu Jan 01 00:00:00 1970 +0000
60 | date: Thu Jan 01 00:00:00 1970 +0000
61 | summary: A1
61 | summary: A1
62 |
62 |
63 | x changeset: 1:471f378eab4c
63 | x changeset: 1:471f378eab4c
64 |/ user: test
64 |/ user: test
65 | date: Thu Jan 01 00:00:00 1970 +0000
65 | date: Thu Jan 01 00:00:00 1970 +0000
66 | summary: A0
66 | summary: A0
67 |
67 |
68 o changeset: 0:ea207398892e
68 o changeset: 0:ea207398892e
69 user: test
69 user: test
70 date: Thu Jan 01 00:00:00 1970 +0000
70 date: Thu Jan 01 00:00:00 1970 +0000
71 summary: ROOT
71 summary: ROOT
72
72
73 Check templates
73 Check templates
74 ---------------
74 ---------------
75 $ hg up 'desc(A0)' --hidden
75 $ hg up 'desc(A0)' --hidden
76 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
76 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
77
77
78 Predecessors template should show current revision as it is the working copy
78 Predecessors template should show current revision as it is the working copy
79 $ hg tlog
79 $ hg tlog
80 o d004c8f274b9
80 o d004c8f274b9
81 | Predecessors: 1:471f378eab4c
81 | Predecessors: 1:471f378eab4c
82 | semi-colon: 1:471f378eab4c
82 | semi-colon: 1:471f378eab4c
83 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
83 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
84 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
84 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
85 | @ 471f378eab4c
85 | @ 471f378eab4c
86 |/ Successors: 3:d004c8f274b9
86 |/ Successors: 3:d004c8f274b9
87 | multi-line: 3:d004c8f274b9
87 | multi-line: 3:d004c8f274b9
88 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
88 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
89 o ea207398892e
89 o ea207398892e
90
90
91 $ hg fatelog
91 $ hg fatelog
92 o d004c8f274b9
92 o d004c8f274b9
93 |
93 |
94 | @ 471f378eab4c
94 | @ 471f378eab4c
95 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test, test2 (between 2001-04-19 04:25 +0000 and 2009-02-13 23:31 +0000);
95 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test, test2 (between 2001-04-19 04:25 +0000 and 2009-02-13 23:31 +0000);
96 o ea207398892e
96 o ea207398892e
97
97
98
98
99 $ hg fatelogkw
99 $ hg fatelogkw
100 o d004c8f274b9
100 o d004c8f274b9
101 |
101 |
102 | @ 471f378eab4c
102 | @ 471f378eab4c
103 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test, test2 (between 2001-04-19 04:25 +0000 and 2009-02-13 23:31 +0000)
103 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test, test2
104 o ea207398892e
104 o ea207398892e
105
105
106 $ hg up 'desc(A1)' --hidden
106 $ hg up 'desc(A1)' --hidden
107 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
107 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
108
108
109 Predecessors template should show current revision as it is the working copy
109 Predecessors template should show current revision as it is the working copy
110 $ hg tlog
110 $ hg tlog
111 o d004c8f274b9
111 o d004c8f274b9
112 | Predecessors: 2:a468dc9b3633
112 | Predecessors: 2:a468dc9b3633
113 | semi-colon: 2:a468dc9b3633
113 | semi-colon: 2:a468dc9b3633
114 | json: ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]
114 | json: ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]
115 | map: 2:a468dc9b36338b14fdb7825f55ce3df4e71517ad
115 | map: 2:a468dc9b36338b14fdb7825f55ce3df4e71517ad
116 | @ a468dc9b3633
116 | @ a468dc9b3633
117 |/ Successors: 3:d004c8f274b9
117 |/ Successors: 3:d004c8f274b9
118 | multi-line: 3:d004c8f274b9
118 | multi-line: 3:d004c8f274b9
119 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
119 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
120 o ea207398892e
120 o ea207398892e
121
121
122 $ hg fatelog
122 $ hg fatelog
123 o d004c8f274b9
123 o d004c8f274b9
124 |
124 |
125 | @ a468dc9b3633
125 | @ a468dc9b3633
126 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000);
126 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000);
127 o ea207398892e
127 o ea207398892e
128
128
129 Predecessors template should show all the predecessors as we force their display
129 Predecessors template should show all the predecessors as we force their display
130 with --hidden
130 with --hidden
131 $ hg tlog --hidden
131 $ hg tlog --hidden
132 o d004c8f274b9
132 o d004c8f274b9
133 | Predecessors: 2:a468dc9b3633
133 | Predecessors: 2:a468dc9b3633
134 | semi-colon: 2:a468dc9b3633
134 | semi-colon: 2:a468dc9b3633
135 | json: ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]
135 | json: ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]
136 | map: 2:a468dc9b36338b14fdb7825f55ce3df4e71517ad
136 | map: 2:a468dc9b36338b14fdb7825f55ce3df4e71517ad
137 | @ a468dc9b3633
137 | @ a468dc9b3633
138 |/ Predecessors: 1:471f378eab4c
138 |/ Predecessors: 1:471f378eab4c
139 | semi-colon: 1:471f378eab4c
139 | semi-colon: 1:471f378eab4c
140 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
140 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
141 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
141 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
142 | Successors: 3:d004c8f274b9
142 | Successors: 3:d004c8f274b9
143 | multi-line: 3:d004c8f274b9
143 | multi-line: 3:d004c8f274b9
144 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
144 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
145 | x 471f378eab4c
145 | x 471f378eab4c
146 |/ Successors: 2:a468dc9b3633
146 |/ Successors: 2:a468dc9b3633
147 | multi-line: 2:a468dc9b3633
147 | multi-line: 2:a468dc9b3633
148 | json: [["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]]
148 | json: [["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]]
149 o ea207398892e
149 o ea207398892e
150
150
151 $ hg fatelog --hidden
151 $ hg fatelog --hidden
152 o d004c8f274b9
152 o d004c8f274b9
153 |
153 |
154 | @ a468dc9b3633
154 | @ a468dc9b3633
155 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000);
155 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000);
156 | x 471f378eab4c
156 | x 471f378eab4c
157 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000);
157 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000);
158 o ea207398892e
158 o ea207398892e
159
159
160
160
161 Predecessors template shouldn't show anything as all obsolete commit are not
161 Predecessors template shouldn't show anything as all obsolete commit are not
162 visible.
162 visible.
163 $ hg up 'desc(A2)'
163 $ hg up 'desc(A2)'
164 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
164 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
165 $ hg tlog
165 $ hg tlog
166 @ d004c8f274b9
166 @ d004c8f274b9
167 |
167 |
168 o ea207398892e
168 o ea207398892e
169
169
170 $ hg tlog --hidden
170 $ hg tlog --hidden
171 @ d004c8f274b9
171 @ d004c8f274b9
172 | Predecessors: 2:a468dc9b3633
172 | Predecessors: 2:a468dc9b3633
173 | semi-colon: 2:a468dc9b3633
173 | semi-colon: 2:a468dc9b3633
174 | json: ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]
174 | json: ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]
175 | map: 2:a468dc9b36338b14fdb7825f55ce3df4e71517ad
175 | map: 2:a468dc9b36338b14fdb7825f55ce3df4e71517ad
176 | x a468dc9b3633
176 | x a468dc9b3633
177 |/ Predecessors: 1:471f378eab4c
177 |/ Predecessors: 1:471f378eab4c
178 | semi-colon: 1:471f378eab4c
178 | semi-colon: 1:471f378eab4c
179 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
179 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
180 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
180 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
181 | Successors: 3:d004c8f274b9
181 | Successors: 3:d004c8f274b9
182 | multi-line: 3:d004c8f274b9
182 | multi-line: 3:d004c8f274b9
183 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
183 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
184 | x 471f378eab4c
184 | x 471f378eab4c
185 |/ Successors: 2:a468dc9b3633
185 |/ Successors: 2:a468dc9b3633
186 | multi-line: 2:a468dc9b3633
186 | multi-line: 2:a468dc9b3633
187 | json: [["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]]
187 | json: [["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]]
188 o ea207398892e
188 o ea207398892e
189
189
190 $ hg fatelog
190 $ hg fatelog
191 @ d004c8f274b9
191 @ d004c8f274b9
192 |
192 |
193 o ea207398892e
193 o ea207398892e
194
194
195
195
196 $ hg fatelog --hidden
196 $ hg fatelog --hidden
197 @ d004c8f274b9
197 @ d004c8f274b9
198 |
198 |
199 | x a468dc9b3633
199 | x a468dc9b3633
200 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000);
200 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000);
201 | x 471f378eab4c
201 | x 471f378eab4c
202 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000);
202 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000);
203 o ea207398892e
203 o ea207398892e
204
204
205 $ hg fatelogjson --hidden
205 $ hg fatelogjson --hidden
206 @ d004c8f274b9
206 @ d004c8f274b9
207 |
207 |
208 | x a468dc9b3633
208 | x a468dc9b3633
209 |/ Obsfate: [{"markers": [["a468dc9b36338b14fdb7825f55ce3df4e71517ad", ["d004c8f274b9ec480a47a93c10dac5eee63adb78"], 0, [["operation", "amend"], ["user", "test2"]], [987654321.0, 0], null]], "successors": ["d004c8f274b9ec480a47a93c10dac5eee63adb78"]}]
209 |/ Obsfate: [{"markers": [["a468dc9b36338b14fdb7825f55ce3df4e71517ad", ["d004c8f274b9ec480a47a93c10dac5eee63adb78"], 0, [["operation", "amend"], ["user", "test2"]], [987654321.0, 0], null]], "successors": ["d004c8f274b9ec480a47a93c10dac5eee63adb78"]}]
210 | x 471f378eab4c
210 | x 471f378eab4c
211 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"], 0, [["operation", "amend"], ["user", "test"]], [1234567890.0, 0], null]], "successors": ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]}]
211 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"], 0, [["operation", "amend"], ["user", "test"]], [1234567890.0, 0], null]], "successors": ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]}]
212 o ea207398892e
212 o ea207398892e
213
213
214
214
215 Check other fatelog implementations
215 Check other fatelog implementations
216 -----------------------------------
216 -----------------------------------
217
217
218 $ hg fatelogkw --hidden -q
218 $ hg fatelogkw --hidden -q
219 @ d004c8f274b9
219 @ d004c8f274b9
220 |
220 |
221 | x a468dc9b3633
221 | x a468dc9b3633
222 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 (at 2001-04-19 04:25 +0000)
222 |/ Obsfate: rewritten using amend as 3:d004c8f274b9
223 | x 471f378eab4c
223 | x 471f378eab4c
224 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 (at 2009-02-13 23:31 +0000)
224 |/ Obsfate: rewritten using amend as 2:a468dc9b3633
225 o ea207398892e
225 o ea207398892e
226
226
227 $ hg fatelogkw --hidden
227 $ hg fatelogkw --hidden
228 @ d004c8f274b9
228 @ d004c8f274b9
229 |
229 |
230 | x a468dc9b3633
230 | x a468dc9b3633
231 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000)
231 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2
232 | x 471f378eab4c
232 | x 471f378eab4c
233 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 (at 2009-02-13 23:31 +0000)
233 |/ Obsfate: rewritten using amend as 2:a468dc9b3633
234 o ea207398892e
234 o ea207398892e
235
235
236 $ hg fatelogkw --hidden -v
236 $ hg fatelogkw --hidden -v
237 @ d004c8f274b9
237 @ d004c8f274b9
238 |
238 |
239 | x a468dc9b3633
239 | x a468dc9b3633
240 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000)
240 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000)
241 | x 471f378eab4c
241 | x 471f378eab4c
242 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000)
242 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000)
243 o ea207398892e
243 o ea207398892e
244
244
245 Test templates with splitted commit
245 Test templates with splitted commit
246 ===================================
246 ===================================
247
247
248 $ hg init $TESTTMP/templates-local-split
248 $ hg init $TESTTMP/templates-local-split
249 $ cd $TESTTMP/templates-local-split
249 $ cd $TESTTMP/templates-local-split
250 $ mkcommit ROOT
250 $ mkcommit ROOT
251 $ echo 42 >> a
251 $ echo 42 >> a
252 $ echo 43 >> b
252 $ echo 43 >> b
253 $ hg commit -A -m "A0"
253 $ hg commit -A -m "A0"
254 adding a
254 adding a
255 adding b
255 adding b
256 $ hg log --hidden -G
256 $ hg log --hidden -G
257 @ changeset: 1:471597cad322
257 @ changeset: 1:471597cad322
258 | tag: tip
258 | tag: tip
259 | user: test
259 | user: test
260 | date: Thu Jan 01 00:00:00 1970 +0000
260 | date: Thu Jan 01 00:00:00 1970 +0000
261 | summary: A0
261 | summary: A0
262 |
262 |
263 o changeset: 0:ea207398892e
263 o changeset: 0:ea207398892e
264 user: test
264 user: test
265 date: Thu Jan 01 00:00:00 1970 +0000
265 date: Thu Jan 01 00:00:00 1970 +0000
266 summary: ROOT
266 summary: ROOT
267
267
268 # Simulate split
268 # Simulate split
269 $ hg up -r "desc(ROOT)"
269 $ hg up -r "desc(ROOT)"
270 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
270 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
271 $ echo 42 >> a
271 $ echo 42 >> a
272 $ hg commit -A -m "A0"
272 $ hg commit -A -m "A0"
273 adding a
273 adding a
274 created new head
274 created new head
275 $ echo 43 >> b
275 $ echo 43 >> b
276 $ hg commit -A -m "A0"
276 $ hg commit -A -m "A0"
277 adding b
277 adding b
278 $ hg debugobsolete `getid "1"` `getid "2"` `getid "3"`
278 $ hg debugobsolete `getid "1"` `getid "2"` `getid "3"`
279 obsoleted 1 changesets
279 obsoleted 1 changesets
280
280
281 $ hg log --hidden -G
281 $ hg log --hidden -G
282 @ changeset: 3:f257fde29c7a
282 @ changeset: 3:f257fde29c7a
283 | tag: tip
283 | tag: tip
284 | user: test
284 | user: test
285 | date: Thu Jan 01 00:00:00 1970 +0000
285 | date: Thu Jan 01 00:00:00 1970 +0000
286 | summary: A0
286 | summary: A0
287 |
287 |
288 o changeset: 2:337fec4d2edc
288 o changeset: 2:337fec4d2edc
289 | parent: 0:ea207398892e
289 | parent: 0:ea207398892e
290 | user: test
290 | user: test
291 | date: Thu Jan 01 00:00:00 1970 +0000
291 | date: Thu Jan 01 00:00:00 1970 +0000
292 | summary: A0
292 | summary: A0
293 |
293 |
294 | x changeset: 1:471597cad322
294 | x changeset: 1:471597cad322
295 |/ user: test
295 |/ user: test
296 | date: Thu Jan 01 00:00:00 1970 +0000
296 | date: Thu Jan 01 00:00:00 1970 +0000
297 | summary: A0
297 | summary: A0
298 |
298 |
299 o changeset: 0:ea207398892e
299 o changeset: 0:ea207398892e
300 user: test
300 user: test
301 date: Thu Jan 01 00:00:00 1970 +0000
301 date: Thu Jan 01 00:00:00 1970 +0000
302 summary: ROOT
302 summary: ROOT
303
303
304 Check templates
304 Check templates
305 ---------------
305 ---------------
306
306
307 $ hg up 'obsolete()' --hidden
307 $ hg up 'obsolete()' --hidden
308 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
308 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
309
309
310 Predecessors template should show current revision as it is the working copy
310 Predecessors template should show current revision as it is the working copy
311 $ hg tlog
311 $ hg tlog
312 o f257fde29c7a
312 o f257fde29c7a
313 | Predecessors: 1:471597cad322
313 | Predecessors: 1:471597cad322
314 | semi-colon: 1:471597cad322
314 | semi-colon: 1:471597cad322
315 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
315 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
316 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
316 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
317 o 337fec4d2edc
317 o 337fec4d2edc
318 | Predecessors: 1:471597cad322
318 | Predecessors: 1:471597cad322
319 | semi-colon: 1:471597cad322
319 | semi-colon: 1:471597cad322
320 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
320 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
321 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
321 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
322 | @ 471597cad322
322 | @ 471597cad322
323 |/ Successors: 2:337fec4d2edc 3:f257fde29c7a
323 |/ Successors: 2:337fec4d2edc 3:f257fde29c7a
324 | multi-line: 2:337fec4d2edc 3:f257fde29c7a
324 | multi-line: 2:337fec4d2edc 3:f257fde29c7a
325 | json: [["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]]
325 | json: [["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]]
326 o ea207398892e
326 o ea207398892e
327
327
328
328
329 $ hg fatelog
329 $ hg fatelog
330 o f257fde29c7a
330 o f257fde29c7a
331 |
331 |
332 o 337fec4d2edc
332 o 337fec4d2edc
333 |
333 |
334 | @ 471597cad322
334 | @ 471597cad322
335 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test (at 1970-01-01 00:00 +0000);
335 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test (at 1970-01-01 00:00 +0000);
336 o ea207398892e
336 o ea207398892e
337
337
338 $ hg up f257fde29c7a
338 $ hg up f257fde29c7a
339 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
339 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
340
340
341 Predecessors template should not show a predecessor as it's not displayed in
341 Predecessors template should not show a predecessor as it's not displayed in
342 the log
342 the log
343 $ hg tlog
343 $ hg tlog
344 @ f257fde29c7a
344 @ f257fde29c7a
345 |
345 |
346 o 337fec4d2edc
346 o 337fec4d2edc
347 |
347 |
348 o ea207398892e
348 o ea207398892e
349
349
350 Predecessors template should show both predecessors as we force their display
350 Predecessors template should show both predecessors as we force their display
351 with --hidden
351 with --hidden
352 $ hg tlog --hidden
352 $ hg tlog --hidden
353 @ f257fde29c7a
353 @ f257fde29c7a
354 | Predecessors: 1:471597cad322
354 | Predecessors: 1:471597cad322
355 | semi-colon: 1:471597cad322
355 | semi-colon: 1:471597cad322
356 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
356 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
357 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
357 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
358 o 337fec4d2edc
358 o 337fec4d2edc
359 | Predecessors: 1:471597cad322
359 | Predecessors: 1:471597cad322
360 | semi-colon: 1:471597cad322
360 | semi-colon: 1:471597cad322
361 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
361 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
362 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
362 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
363 | x 471597cad322
363 | x 471597cad322
364 |/ Successors: 2:337fec4d2edc 3:f257fde29c7a
364 |/ Successors: 2:337fec4d2edc 3:f257fde29c7a
365 | multi-line: 2:337fec4d2edc 3:f257fde29c7a
365 | multi-line: 2:337fec4d2edc 3:f257fde29c7a
366 | json: [["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]]
366 | json: [["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]]
367 o ea207398892e
367 o ea207398892e
368
368
369
369
370 $ hg fatelog --hidden
370 $ hg fatelog --hidden
371 @ f257fde29c7a
371 @ f257fde29c7a
372 |
372 |
373 o 337fec4d2edc
373 o 337fec4d2edc
374 |
374 |
375 | x 471597cad322
375 | x 471597cad322
376 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test (at 1970-01-01 00:00 +0000);
376 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test (at 1970-01-01 00:00 +0000);
377 o ea207398892e
377 o ea207398892e
378
378
379 $ hg fatelogjson --hidden
379 $ hg fatelogjson --hidden
380 @ f257fde29c7a
380 @ f257fde29c7a
381 |
381 |
382 o 337fec4d2edc
382 o 337fec4d2edc
383 |
383 |
384 | x 471597cad322
384 | x 471597cad322
385 |/ Obsfate: [{"markers": [["471597cad322d1f659bb169751be9133dad92ef3", ["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]}]
385 |/ Obsfate: [{"markers": [["471597cad322d1f659bb169751be9133dad92ef3", ["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]}]
386 o ea207398892e
386 o ea207398892e
387
387
388 Check other fatelog implementations
388 Check other fatelog implementations
389 -----------------------------------
389 -----------------------------------
390
390
391 $ hg fatelogkw --hidden -q
391 $ hg fatelogkw --hidden -q
392 @ f257fde29c7a
392 @ f257fde29c7a
393 |
393 |
394 o 337fec4d2edc
394 o 337fec4d2edc
395 |
395 |
396 | x 471597cad322
396 | x 471597cad322
397 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a (at 1970-01-01 00:00 +0000)
397 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a
398 o ea207398892e
398 o ea207398892e
399
399
400 $ hg fatelogkw --hidden
400 $ hg fatelogkw --hidden
401 @ f257fde29c7a
401 @ f257fde29c7a
402 |
402 |
403 o 337fec4d2edc
403 o 337fec4d2edc
404 |
404 |
405 | x 471597cad322
405 | x 471597cad322
406 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a (at 1970-01-01 00:00 +0000)
406 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a
407 o ea207398892e
407 o ea207398892e
408
408
409 $ hg fatelogkw --hidden -v
409 $ hg fatelogkw --hidden -v
410 @ f257fde29c7a
410 @ f257fde29c7a
411 |
411 |
412 o 337fec4d2edc
412 o 337fec4d2edc
413 |
413 |
414 | x 471597cad322
414 | x 471597cad322
415 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test (at 1970-01-01 00:00 +0000)
415 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test (at 1970-01-01 00:00 +0000)
416 o ea207398892e
416 o ea207398892e
417
417
418
418
419 Test templates with folded commit
419 Test templates with folded commit
420 =================================
420 =================================
421
421
422 Test setup
422 Test setup
423 ----------
423 ----------
424
424
425 $ hg init $TESTTMP/templates-local-fold
425 $ hg init $TESTTMP/templates-local-fold
426 $ cd $TESTTMP/templates-local-fold
426 $ cd $TESTTMP/templates-local-fold
427 $ mkcommit ROOT
427 $ mkcommit ROOT
428 $ mkcommit A0
428 $ mkcommit A0
429 $ mkcommit B0
429 $ mkcommit B0
430 $ hg log --hidden -G
430 $ hg log --hidden -G
431 @ changeset: 2:0dec01379d3b
431 @ changeset: 2:0dec01379d3b
432 | tag: tip
432 | tag: tip
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: B0
435 | summary: B0
436 |
436 |
437 o changeset: 1:471f378eab4c
437 o changeset: 1:471f378eab4c
438 | user: test
438 | user: test
439 | date: Thu Jan 01 00:00:00 1970 +0000
439 | date: Thu Jan 01 00:00:00 1970 +0000
440 | summary: A0
440 | summary: A0
441 |
441 |
442 o changeset: 0:ea207398892e
442 o changeset: 0:ea207398892e
443 user: test
443 user: test
444 date: Thu Jan 01 00:00:00 1970 +0000
444 date: Thu Jan 01 00:00:00 1970 +0000
445 summary: ROOT
445 summary: ROOT
446
446
447 Simulate a fold
447 Simulate a fold
448 $ hg up -r "desc(ROOT)"
448 $ hg up -r "desc(ROOT)"
449 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
449 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
450 $ echo "A0" > A0
450 $ echo "A0" > A0
451 $ echo "B0" > B0
451 $ echo "B0" > B0
452 $ hg commit -A -m "C0"
452 $ hg commit -A -m "C0"
453 adding A0
453 adding A0
454 adding B0
454 adding B0
455 created new head
455 created new head
456 $ hg debugobsolete `getid "desc(A0)"` `getid "desc(C0)"`
456 $ hg debugobsolete `getid "desc(A0)"` `getid "desc(C0)"`
457 obsoleted 1 changesets
457 obsoleted 1 changesets
458 $ hg debugobsolete `getid "desc(B0)"` `getid "desc(C0)"`
458 $ hg debugobsolete `getid "desc(B0)"` `getid "desc(C0)"`
459 obsoleted 1 changesets
459 obsoleted 1 changesets
460
460
461 $ hg log --hidden -G
461 $ hg log --hidden -G
462 @ changeset: 3:eb5a0daa2192
462 @ changeset: 3:eb5a0daa2192
463 | tag: tip
463 | tag: tip
464 | parent: 0:ea207398892e
464 | parent: 0:ea207398892e
465 | user: test
465 | user: test
466 | date: Thu Jan 01 00:00:00 1970 +0000
466 | date: Thu Jan 01 00:00:00 1970 +0000
467 | summary: C0
467 | summary: C0
468 |
468 |
469 | x changeset: 2:0dec01379d3b
469 | x changeset: 2:0dec01379d3b
470 | | user: test
470 | | user: test
471 | | date: Thu Jan 01 00:00:00 1970 +0000
471 | | date: Thu Jan 01 00:00:00 1970 +0000
472 | | summary: B0
472 | | summary: B0
473 | |
473 | |
474 | x changeset: 1:471f378eab4c
474 | x changeset: 1:471f378eab4c
475 |/ user: test
475 |/ user: test
476 | date: Thu Jan 01 00:00:00 1970 +0000
476 | date: Thu Jan 01 00:00:00 1970 +0000
477 | summary: A0
477 | summary: A0
478 |
478 |
479 o changeset: 0:ea207398892e
479 o changeset: 0:ea207398892e
480 user: test
480 user: test
481 date: Thu Jan 01 00:00:00 1970 +0000
481 date: Thu Jan 01 00:00:00 1970 +0000
482 summary: ROOT
482 summary: ROOT
483
483
484 Check templates
484 Check templates
485 ---------------
485 ---------------
486
486
487 $ hg up 'desc(A0)' --hidden
487 $ hg up 'desc(A0)' --hidden
488 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
488 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
489
489
490 Predecessors template should show current revision as it is the working copy
490 Predecessors template should show current revision as it is the working copy
491 $ hg tlog
491 $ hg tlog
492 o eb5a0daa2192
492 o eb5a0daa2192
493 | Predecessors: 1:471f378eab4c
493 | Predecessors: 1:471f378eab4c
494 | semi-colon: 1:471f378eab4c
494 | semi-colon: 1:471f378eab4c
495 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
495 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
496 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
496 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
497 | @ 471f378eab4c
497 | @ 471f378eab4c
498 |/ Successors: 3:eb5a0daa2192
498 |/ Successors: 3:eb5a0daa2192
499 | multi-line: 3:eb5a0daa2192
499 | multi-line: 3:eb5a0daa2192
500 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
500 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
501 o ea207398892e
501 o ea207398892e
502
502
503
503
504 $ hg fatelog
504 $ hg fatelog
505 o eb5a0daa2192
505 o eb5a0daa2192
506 |
506 |
507 | @ 471f378eab4c
507 | @ 471f378eab4c
508 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
508 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
509 o ea207398892e
509 o ea207398892e
510
510
511 $ hg up 'desc(B0)' --hidden
511 $ hg up 'desc(B0)' --hidden
512 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
512 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
513
513
514 Predecessors template should show both predecessors as they should be both
514 Predecessors template should show both predecessors as they should be both
515 displayed
515 displayed
516 $ hg tlog
516 $ hg tlog
517 o eb5a0daa2192
517 o eb5a0daa2192
518 | Predecessors: 2:0dec01379d3b 1:471f378eab4c
518 | Predecessors: 2:0dec01379d3b 1:471f378eab4c
519 | semi-colon: 2:0dec01379d3b; 1:471f378eab4c
519 | semi-colon: 2:0dec01379d3b; 1:471f378eab4c
520 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
520 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
521 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
521 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
522 | @ 0dec01379d3b
522 | @ 0dec01379d3b
523 | | Successors: 3:eb5a0daa2192
523 | | Successors: 3:eb5a0daa2192
524 | | multi-line: 3:eb5a0daa2192
524 | | multi-line: 3:eb5a0daa2192
525 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
525 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
526 | x 471f378eab4c
526 | x 471f378eab4c
527 |/ Successors: 3:eb5a0daa2192
527 |/ Successors: 3:eb5a0daa2192
528 | multi-line: 3:eb5a0daa2192
528 | multi-line: 3:eb5a0daa2192
529 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
529 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
530 o ea207398892e
530 o ea207398892e
531
531
532
532
533 $ hg fatelog
533 $ hg fatelog
534 o eb5a0daa2192
534 o eb5a0daa2192
535 |
535 |
536 | @ 0dec01379d3b
536 | @ 0dec01379d3b
537 | | Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
537 | | Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
538 | x 471f378eab4c
538 | x 471f378eab4c
539 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
539 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
540 o ea207398892e
540 o ea207398892e
541
541
542 $ hg up 'desc(C0)'
542 $ hg up 'desc(C0)'
543 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
543 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
544
544
545 Predecessors template should not show predecessors as they are not displayed in
545 Predecessors template should not show predecessors as they are not displayed in
546 the log
546 the log
547 $ hg tlog
547 $ hg tlog
548 @ eb5a0daa2192
548 @ eb5a0daa2192
549 |
549 |
550 o ea207398892e
550 o ea207398892e
551
551
552 Predecessors template should show both predecessors as we force their display
552 Predecessors template should show both predecessors as we force their display
553 with --hidden
553 with --hidden
554 $ hg tlog --hidden
554 $ hg tlog --hidden
555 @ eb5a0daa2192
555 @ eb5a0daa2192
556 | Predecessors: 2:0dec01379d3b 1:471f378eab4c
556 | Predecessors: 2:0dec01379d3b 1:471f378eab4c
557 | semi-colon: 2:0dec01379d3b; 1:471f378eab4c
557 | semi-colon: 2:0dec01379d3b; 1:471f378eab4c
558 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
558 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
559 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
559 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
560 | x 0dec01379d3b
560 | x 0dec01379d3b
561 | | Successors: 3:eb5a0daa2192
561 | | Successors: 3:eb5a0daa2192
562 | | multi-line: 3:eb5a0daa2192
562 | | multi-line: 3:eb5a0daa2192
563 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
563 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
564 | x 471f378eab4c
564 | x 471f378eab4c
565 |/ Successors: 3:eb5a0daa2192
565 |/ Successors: 3:eb5a0daa2192
566 | multi-line: 3:eb5a0daa2192
566 | multi-line: 3:eb5a0daa2192
567 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
567 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
568 o ea207398892e
568 o ea207398892e
569
569
570
570
571 $ hg fatelog --hidden
571 $ hg fatelog --hidden
572 @ eb5a0daa2192
572 @ eb5a0daa2192
573 |
573 |
574 | x 0dec01379d3b
574 | x 0dec01379d3b
575 | | Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
575 | | Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
576 | x 471f378eab4c
576 | x 471f378eab4c
577 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
577 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
578 o ea207398892e
578 o ea207398892e
579
579
580
580
581 $ hg fatelogjson --hidden
581 $ hg fatelogjson --hidden
582 @ eb5a0daa2192
582 @ eb5a0daa2192
583 |
583 |
584 | x 0dec01379d3b
584 | x 0dec01379d3b
585 | | Obsfate: [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
585 | | Obsfate: [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
586 | x 471f378eab4c
586 | x 471f378eab4c
587 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
587 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
588 o ea207398892e
588 o ea207398892e
589
589
590 Check other fatelog implementations
590 Check other fatelog implementations
591 -----------------------------------
591 -----------------------------------
592
592
593 $ hg fatelogkw --hidden -q
593 $ hg fatelogkw --hidden -q
594 @ eb5a0daa2192
594 @ eb5a0daa2192
595 |
595 |
596 | x 0dec01379d3b
596 | x 0dec01379d3b
597 | | Obsfate: rewritten as 3:eb5a0daa2192 (at 1970-01-01 00:00 +0000)
597 | | Obsfate: rewritten as 3:eb5a0daa2192
598 | x 471f378eab4c
598 | x 471f378eab4c
599 |/ Obsfate: rewritten as 3:eb5a0daa2192 (at 1970-01-01 00:00 +0000)
599 |/ Obsfate: rewritten as 3:eb5a0daa2192
600 o ea207398892e
600 o ea207398892e
601
601
602 $ hg fatelogkw --hidden
602 $ hg fatelogkw --hidden
603 @ eb5a0daa2192
603 @ eb5a0daa2192
604 |
604 |
605 | x 0dec01379d3b
605 | x 0dec01379d3b
606 | | Obsfate: rewritten as 3:eb5a0daa2192 (at 1970-01-01 00:00 +0000)
606 | | Obsfate: rewritten as 3:eb5a0daa2192
607 | x 471f378eab4c
607 | x 471f378eab4c
608 |/ Obsfate: rewritten as 3:eb5a0daa2192 (at 1970-01-01 00:00 +0000)
608 |/ Obsfate: rewritten as 3:eb5a0daa2192
609 o ea207398892e
609 o ea207398892e
610
610
611 $ hg fatelogkw --hidden -v
611 $ hg fatelogkw --hidden -v
612 @ eb5a0daa2192
612 @ eb5a0daa2192
613 |
613 |
614 | x 0dec01379d3b
614 | x 0dec01379d3b
615 | | Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
615 | | Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
616 | x 471f378eab4c
616 | x 471f378eab4c
617 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
617 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
618 o ea207398892e
618 o ea207398892e
619
619
620
620
621 Test templates with divergence
621 Test templates with divergence
622 ==============================
622 ==============================
623
623
624 Test setup
624 Test setup
625 ----------
625 ----------
626
626
627 $ hg init $TESTTMP/templates-local-divergence
627 $ hg init $TESTTMP/templates-local-divergence
628 $ cd $TESTTMP/templates-local-divergence
628 $ cd $TESTTMP/templates-local-divergence
629 $ mkcommit ROOT
629 $ mkcommit ROOT
630 $ mkcommit A0
630 $ mkcommit A0
631 $ hg commit --amend -m "A1"
631 $ hg commit --amend -m "A1"
632 $ hg log --hidden -G
632 $ hg log --hidden -G
633 @ changeset: 2:fdf9bde5129a
633 @ changeset: 2:fdf9bde5129a
634 | tag: tip
634 | tag: tip
635 | parent: 0:ea207398892e
635 | parent: 0:ea207398892e
636 | user: test
636 | user: test
637 | date: Thu Jan 01 00:00:00 1970 +0000
637 | date: Thu Jan 01 00:00:00 1970 +0000
638 | summary: A1
638 | summary: A1
639 |
639 |
640 | x changeset: 1:471f378eab4c
640 | x changeset: 1:471f378eab4c
641 |/ user: test
641 |/ user: test
642 | date: Thu Jan 01 00:00:00 1970 +0000
642 | date: Thu Jan 01 00:00:00 1970 +0000
643 | summary: A0
643 | summary: A0
644 |
644 |
645 o changeset: 0:ea207398892e
645 o changeset: 0:ea207398892e
646 user: test
646 user: test
647 date: Thu Jan 01 00:00:00 1970 +0000
647 date: Thu Jan 01 00:00:00 1970 +0000
648 summary: ROOT
648 summary: ROOT
649
649
650 $ hg update --hidden 'desc(A0)'
650 $ hg update --hidden 'desc(A0)'
651 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
651 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
652 $ hg commit --amend -m "A2"
652 $ hg commit --amend -m "A2"
653 $ hg log --hidden -G
653 $ hg log --hidden -G
654 @ changeset: 3:65b757b745b9
654 @ changeset: 3:65b757b745b9
655 | tag: tip
655 | tag: tip
656 | parent: 0:ea207398892e
656 | parent: 0:ea207398892e
657 | user: test
657 | user: test
658 | date: Thu Jan 01 00:00:00 1970 +0000
658 | date: Thu Jan 01 00:00:00 1970 +0000
659 | instability: content-divergent
659 | instability: content-divergent
660 | summary: A2
660 | summary: A2
661 |
661 |
662 | o changeset: 2:fdf9bde5129a
662 | o changeset: 2:fdf9bde5129a
663 |/ parent: 0:ea207398892e
663 |/ parent: 0:ea207398892e
664 | user: test
664 | user: test
665 | date: Thu Jan 01 00:00:00 1970 +0000
665 | date: Thu Jan 01 00:00:00 1970 +0000
666 | instability: content-divergent
666 | instability: content-divergent
667 | summary: A1
667 | summary: A1
668 |
668 |
669 | x changeset: 1:471f378eab4c
669 | x changeset: 1:471f378eab4c
670 |/ user: test
670 |/ user: test
671 | date: Thu Jan 01 00:00:00 1970 +0000
671 | date: Thu Jan 01 00:00:00 1970 +0000
672 | summary: A0
672 | summary: A0
673 |
673 |
674 o changeset: 0:ea207398892e
674 o changeset: 0:ea207398892e
675 user: test
675 user: test
676 date: Thu Jan 01 00:00:00 1970 +0000
676 date: Thu Jan 01 00:00:00 1970 +0000
677 summary: ROOT
677 summary: ROOT
678
678
679 $ hg commit --amend -m 'A3'
679 $ hg commit --amend -m 'A3'
680 $ hg log --hidden -G
680 $ hg log --hidden -G
681 @ changeset: 4:019fadeab383
681 @ changeset: 4:019fadeab383
682 | tag: tip
682 | tag: tip
683 | parent: 0:ea207398892e
683 | parent: 0:ea207398892e
684 | user: test
684 | user: test
685 | date: Thu Jan 01 00:00:00 1970 +0000
685 | date: Thu Jan 01 00:00:00 1970 +0000
686 | instability: content-divergent
686 | instability: content-divergent
687 | summary: A3
687 | summary: A3
688 |
688 |
689 | x changeset: 3:65b757b745b9
689 | x changeset: 3:65b757b745b9
690 |/ parent: 0:ea207398892e
690 |/ parent: 0:ea207398892e
691 | user: test
691 | user: test
692 | date: Thu Jan 01 00:00:00 1970 +0000
692 | date: Thu Jan 01 00:00:00 1970 +0000
693 | summary: A2
693 | summary: A2
694 |
694 |
695 | o changeset: 2:fdf9bde5129a
695 | o changeset: 2:fdf9bde5129a
696 |/ parent: 0:ea207398892e
696 |/ parent: 0:ea207398892e
697 | user: test
697 | user: test
698 | date: Thu Jan 01 00:00:00 1970 +0000
698 | date: Thu Jan 01 00:00:00 1970 +0000
699 | instability: content-divergent
699 | instability: content-divergent
700 | summary: A1
700 | summary: A1
701 |
701 |
702 | x changeset: 1:471f378eab4c
702 | x changeset: 1:471f378eab4c
703 |/ user: test
703 |/ user: test
704 | date: Thu Jan 01 00:00:00 1970 +0000
704 | date: Thu Jan 01 00:00:00 1970 +0000
705 | summary: A0
705 | summary: A0
706 |
706 |
707 o changeset: 0:ea207398892e
707 o changeset: 0:ea207398892e
708 user: test
708 user: test
709 date: Thu Jan 01 00:00:00 1970 +0000
709 date: Thu Jan 01 00:00:00 1970 +0000
710 summary: ROOT
710 summary: ROOT
711
711
712
712
713 Check templates
713 Check templates
714 ---------------
714 ---------------
715
715
716 $ hg up 'desc(A0)' --hidden
716 $ hg up 'desc(A0)' --hidden
717 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
717 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
718
718
719 Predecessors template should show current revision as it is the working copy
719 Predecessors template should show current revision as it is the working copy
720 $ hg tlog
720 $ hg tlog
721 o 019fadeab383
721 o 019fadeab383
722 | Predecessors: 1:471f378eab4c
722 | Predecessors: 1:471f378eab4c
723 | semi-colon: 1:471f378eab4c
723 | semi-colon: 1:471f378eab4c
724 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
724 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
725 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
725 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
726 | o fdf9bde5129a
726 | o fdf9bde5129a
727 |/ Predecessors: 1:471f378eab4c
727 |/ Predecessors: 1:471f378eab4c
728 | semi-colon: 1:471f378eab4c
728 | semi-colon: 1:471f378eab4c
729 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
729 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
730 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
730 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
731 | @ 471f378eab4c
731 | @ 471f378eab4c
732 |/ Successors: 2:fdf9bde5129a; 4:019fadeab383
732 |/ Successors: 2:fdf9bde5129a; 4:019fadeab383
733 | multi-line: 2:fdf9bde5129a
733 | multi-line: 2:fdf9bde5129a
734 | multi-line: 4:019fadeab383
734 | multi-line: 4:019fadeab383
735 | json: [["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]]
735 | json: [["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]]
736 o ea207398892e
736 o ea207398892e
737
737
738 $ hg fatelog
738 $ hg fatelog
739 o 019fadeab383
739 o 019fadeab383
740 |
740 |
741 | o fdf9bde5129a
741 | o fdf9bde5129a
742 |/
742 |/
743 | @ 471f378eab4c
743 | @ 471f378eab4c
744 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000); rewritten using amend as 4:019fadeab383 by test (at 1970-01-01 00:00 +0000);
744 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000); rewritten using amend as 4:019fadeab383 by test (at 1970-01-01 00:00 +0000);
745 o ea207398892e
745 o ea207398892e
746
746
747 $ hg up 'desc(A1)'
747 $ hg up 'desc(A1)'
748 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
748 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
749
749
750 Predecessors template should not show predecessors as they are not displayed in
750 Predecessors template should not show predecessors as they are not displayed in
751 the log
751 the log
752 $ hg tlog
752 $ hg tlog
753 o 019fadeab383
753 o 019fadeab383
754 |
754 |
755 | @ fdf9bde5129a
755 | @ fdf9bde5129a
756 |/
756 |/
757 o ea207398892e
757 o ea207398892e
758
758
759
759
760 $ hg fatelog
760 $ hg fatelog
761 o 019fadeab383
761 o 019fadeab383
762 |
762 |
763 | @ fdf9bde5129a
763 | @ fdf9bde5129a
764 |/
764 |/
765 o ea207398892e
765 o ea207398892e
766
766
767 Predecessors template should the predecessors as we force their display with
767 Predecessors template should the predecessors as we force their display with
768 --hidden
768 --hidden
769 $ hg tlog --hidden
769 $ hg tlog --hidden
770 o 019fadeab383
770 o 019fadeab383
771 | Predecessors: 3:65b757b745b9
771 | Predecessors: 3:65b757b745b9
772 | semi-colon: 3:65b757b745b9
772 | semi-colon: 3:65b757b745b9
773 | json: ["65b757b745b935093c87a2bccd877521cccffcbd"]
773 | json: ["65b757b745b935093c87a2bccd877521cccffcbd"]
774 | map: 3:65b757b745b935093c87a2bccd877521cccffcbd
774 | map: 3:65b757b745b935093c87a2bccd877521cccffcbd
775 | x 65b757b745b9
775 | x 65b757b745b9
776 |/ Predecessors: 1:471f378eab4c
776 |/ Predecessors: 1:471f378eab4c
777 | semi-colon: 1:471f378eab4c
777 | semi-colon: 1:471f378eab4c
778 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
778 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
779 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
779 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
780 | Successors: 4:019fadeab383
780 | Successors: 4:019fadeab383
781 | multi-line: 4:019fadeab383
781 | multi-line: 4:019fadeab383
782 | json: [["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]]
782 | json: [["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]]
783 | @ fdf9bde5129a
783 | @ fdf9bde5129a
784 |/ Predecessors: 1:471f378eab4c
784 |/ Predecessors: 1:471f378eab4c
785 | semi-colon: 1:471f378eab4c
785 | semi-colon: 1:471f378eab4c
786 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
786 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
787 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
787 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
788 | x 471f378eab4c
788 | x 471f378eab4c
789 |/ Successors: 2:fdf9bde5129a; 3:65b757b745b9
789 |/ Successors: 2:fdf9bde5129a; 3:65b757b745b9
790 | multi-line: 2:fdf9bde5129a
790 | multi-line: 2:fdf9bde5129a
791 | multi-line: 3:65b757b745b9
791 | multi-line: 3:65b757b745b9
792 | json: [["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], ["65b757b745b935093c87a2bccd877521cccffcbd"]]
792 | json: [["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], ["65b757b745b935093c87a2bccd877521cccffcbd"]]
793 o ea207398892e
793 o ea207398892e
794
794
795
795
796 $ hg fatelog --hidden
796 $ hg fatelog --hidden
797 o 019fadeab383
797 o 019fadeab383
798 |
798 |
799 | x 65b757b745b9
799 | x 65b757b745b9
800 |/ Obsfate: rewritten using amend as 4:019fadeab383 by test (at 1970-01-01 00:00 +0000);
800 |/ Obsfate: rewritten using amend as 4:019fadeab383 by test (at 1970-01-01 00:00 +0000);
801 | @ fdf9bde5129a
801 | @ fdf9bde5129a
802 |/
802 |/
803 | x 471f378eab4c
803 | x 471f378eab4c
804 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000); rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000);
804 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000); rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000);
805 o ea207398892e
805 o ea207398892e
806
806
807
807
808 $ hg fatelogjson --hidden
808 $ hg fatelogjson --hidden
809 o 019fadeab383
809 o 019fadeab383
810 |
810 |
811 | x 65b757b745b9
811 | x 65b757b745b9
812 |/ Obsfate: [{"markers": [["65b757b745b935093c87a2bccd877521cccffcbd", ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"], 0, [["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]}]
812 |/ Obsfate: [{"markers": [["65b757b745b935093c87a2bccd877521cccffcbd", ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"], 0, [["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]}]
813 | @ fdf9bde5129a
813 | @ fdf9bde5129a
814 |/
814 |/
815 | x 471f378eab4c
815 | x 471f378eab4c
816 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], 0, [["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"]}, {"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["65b757b745b935093c87a2bccd877521cccffcbd"], 0, [["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["65b757b745b935093c87a2bccd877521cccffcbd"]}]
816 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], 0, [["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"]}, {"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["65b757b745b935093c87a2bccd877521cccffcbd"], 0, [["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["65b757b745b935093c87a2bccd877521cccffcbd"]}]
817 o ea207398892e
817 o ea207398892e
818
818
819
819
820 Check other fatelog implementations
820 Check other fatelog implementations
821 -----------------------------------
821 -----------------------------------
822
822
823 $ hg fatelogkw --hidden -q
823 $ hg fatelogkw --hidden -q
824 o 019fadeab383
824 o 019fadeab383
825 |
825 |
826 | x 65b757b745b9
826 | x 65b757b745b9
827 |/ Obsfate: rewritten using amend as 4:019fadeab383 (at 1970-01-01 00:00 +0000)
827 |/ Obsfate: rewritten using amend as 4:019fadeab383
828 | @ fdf9bde5129a
828 | @ fdf9bde5129a
829 |/
829 |/
830 | x 471f378eab4c
830 | x 471f378eab4c
831 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a (at 1970-01-01 00:00 +0000)
831 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a
832 | Obsfate: rewritten using amend as 3:65b757b745b9 (at 1970-01-01 00:00 +0000)
832 | Obsfate: rewritten using amend as 3:65b757b745b9
833 o ea207398892e
833 o ea207398892e
834
834
835 $ hg fatelogkw --hidden
835 $ hg fatelogkw --hidden
836 o 019fadeab383
836 o 019fadeab383
837 |
837 |
838 | x 65b757b745b9
838 | x 65b757b745b9
839 |/ Obsfate: rewritten using amend as 4:019fadeab383 (at 1970-01-01 00:00 +0000)
839 |/ Obsfate: rewritten using amend as 4:019fadeab383
840 | @ fdf9bde5129a
840 | @ fdf9bde5129a
841 |/
841 |/
842 | x 471f378eab4c
842 | x 471f378eab4c
843 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a (at 1970-01-01 00:00 +0000)
843 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a
844 | Obsfate: rewritten using amend as 3:65b757b745b9 (at 1970-01-01 00:00 +0000)
844 | Obsfate: rewritten using amend as 3:65b757b745b9
845 o ea207398892e
845 o ea207398892e
846
846
847 $ hg fatelogkw --hidden -v
847 $ hg fatelogkw --hidden -v
848 o 019fadeab383
848 o 019fadeab383
849 |
849 |
850 | x 65b757b745b9
850 | x 65b757b745b9
851 |/ Obsfate: rewritten using amend as 4:019fadeab383 by test (at 1970-01-01 00:00 +0000)
851 |/ Obsfate: rewritten using amend as 4:019fadeab383 by test (at 1970-01-01 00:00 +0000)
852 | @ fdf9bde5129a
852 | @ fdf9bde5129a
853 |/
853 |/
854 | x 471f378eab4c
854 | x 471f378eab4c
855 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000)
855 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000)
856 | Obsfate: rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000)
856 | Obsfate: rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000)
857 o ea207398892e
857 o ea207398892e
858
858
859
859
860 Test templates with amended + folded commit
860 Test templates with amended + folded commit
861 ===========================================
861 ===========================================
862
862
863 Test setup
863 Test setup
864 ----------
864 ----------
865
865
866 $ hg init $TESTTMP/templates-local-amend-fold
866 $ hg init $TESTTMP/templates-local-amend-fold
867 $ cd $TESTTMP/templates-local-amend-fold
867 $ cd $TESTTMP/templates-local-amend-fold
868 $ mkcommit ROOT
868 $ mkcommit ROOT
869 $ mkcommit A0
869 $ mkcommit A0
870 $ mkcommit B0
870 $ mkcommit B0
871 $ hg commit --amend -m "B1"
871 $ hg commit --amend -m "B1"
872 $ hg log --hidden -G
872 $ hg log --hidden -G
873 @ changeset: 3:b7ea6d14e664
873 @ changeset: 3:b7ea6d14e664
874 | tag: tip
874 | tag: tip
875 | parent: 1:471f378eab4c
875 | parent: 1:471f378eab4c
876 | user: test
876 | user: test
877 | date: Thu Jan 01 00:00:00 1970 +0000
877 | date: Thu Jan 01 00:00:00 1970 +0000
878 | summary: B1
878 | summary: B1
879 |
879 |
880 | x changeset: 2:0dec01379d3b
880 | x changeset: 2:0dec01379d3b
881 |/ user: test
881 |/ user: test
882 | date: Thu Jan 01 00:00:00 1970 +0000
882 | date: Thu Jan 01 00:00:00 1970 +0000
883 | summary: B0
883 | summary: B0
884 |
884 |
885 o changeset: 1:471f378eab4c
885 o changeset: 1:471f378eab4c
886 | user: test
886 | user: test
887 | date: Thu Jan 01 00:00:00 1970 +0000
887 | date: Thu Jan 01 00:00:00 1970 +0000
888 | summary: A0
888 | summary: A0
889 |
889 |
890 o changeset: 0:ea207398892e
890 o changeset: 0:ea207398892e
891 user: test
891 user: test
892 date: Thu Jan 01 00:00:00 1970 +0000
892 date: Thu Jan 01 00:00:00 1970 +0000
893 summary: ROOT
893 summary: ROOT
894
894
895 # Simulate a fold
895 # Simulate a fold
896 $ hg up -r "desc(ROOT)"
896 $ hg up -r "desc(ROOT)"
897 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
897 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
898 $ echo "A0" > A0
898 $ echo "A0" > A0
899 $ echo "B0" > B0
899 $ echo "B0" > B0
900 $ hg commit -A -m "C0"
900 $ hg commit -A -m "C0"
901 adding A0
901 adding A0
902 adding B0
902 adding B0
903 created new head
903 created new head
904 $ hg debugobsolete `getid "desc(A0)"` `getid "desc(C0)"`
904 $ hg debugobsolete `getid "desc(A0)"` `getid "desc(C0)"`
905 obsoleted 1 changesets
905 obsoleted 1 changesets
906 $ hg debugobsolete `getid "desc(B1)"` `getid "desc(C0)"`
906 $ hg debugobsolete `getid "desc(B1)"` `getid "desc(C0)"`
907 obsoleted 1 changesets
907 obsoleted 1 changesets
908
908
909 $ hg log --hidden -G
909 $ hg log --hidden -G
910 @ changeset: 4:eb5a0daa2192
910 @ changeset: 4:eb5a0daa2192
911 | tag: tip
911 | tag: tip
912 | parent: 0:ea207398892e
912 | parent: 0:ea207398892e
913 | user: test
913 | user: test
914 | date: Thu Jan 01 00:00:00 1970 +0000
914 | date: Thu Jan 01 00:00:00 1970 +0000
915 | summary: C0
915 | summary: C0
916 |
916 |
917 | x changeset: 3:b7ea6d14e664
917 | x changeset: 3:b7ea6d14e664
918 | | parent: 1:471f378eab4c
918 | | parent: 1:471f378eab4c
919 | | user: test
919 | | user: test
920 | | date: Thu Jan 01 00:00:00 1970 +0000
920 | | date: Thu Jan 01 00:00:00 1970 +0000
921 | | summary: B1
921 | | summary: B1
922 | |
922 | |
923 | | x changeset: 2:0dec01379d3b
923 | | x changeset: 2:0dec01379d3b
924 | |/ user: test
924 | |/ user: test
925 | | date: Thu Jan 01 00:00:00 1970 +0000
925 | | date: Thu Jan 01 00:00:00 1970 +0000
926 | | summary: B0
926 | | summary: B0
927 | |
927 | |
928 | x changeset: 1:471f378eab4c
928 | x changeset: 1:471f378eab4c
929 |/ user: test
929 |/ user: test
930 | date: Thu Jan 01 00:00:00 1970 +0000
930 | date: Thu Jan 01 00:00:00 1970 +0000
931 | summary: A0
931 | summary: A0
932 |
932 |
933 o changeset: 0:ea207398892e
933 o changeset: 0:ea207398892e
934 user: test
934 user: test
935 date: Thu Jan 01 00:00:00 1970 +0000
935 date: Thu Jan 01 00:00:00 1970 +0000
936 summary: ROOT
936 summary: ROOT
937
937
938 Check templates
938 Check templates
939 ---------------
939 ---------------
940
940
941 $ hg up 'desc(A0)' --hidden
941 $ hg up 'desc(A0)' --hidden
942 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
942 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
943
943
944 Predecessors template should show current revision as it is the working copy
944 Predecessors template should show current revision as it is the working copy
945 $ hg tlog
945 $ hg tlog
946 o eb5a0daa2192
946 o eb5a0daa2192
947 | Predecessors: 1:471f378eab4c
947 | Predecessors: 1:471f378eab4c
948 | semi-colon: 1:471f378eab4c
948 | semi-colon: 1:471f378eab4c
949 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
949 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
950 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
950 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
951 | @ 471f378eab4c
951 | @ 471f378eab4c
952 |/ Successors: 4:eb5a0daa2192
952 |/ Successors: 4:eb5a0daa2192
953 | multi-line: 4:eb5a0daa2192
953 | multi-line: 4:eb5a0daa2192
954 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
954 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
955 o ea207398892e
955 o ea207398892e
956
956
957
957
958 $ hg fatelog
958 $ hg fatelog
959 o eb5a0daa2192
959 o eb5a0daa2192
960 |
960 |
961 | @ 471f378eab4c
961 | @ 471f378eab4c
962 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
962 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
963 o ea207398892e
963 o ea207398892e
964
964
965 $ hg up 'desc(B0)' --hidden
965 $ hg up 'desc(B0)' --hidden
966 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
966 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
967
967
968 Predecessors template should both predecessors as they are visible
968 Predecessors template should both predecessors as they are visible
969 $ hg tlog
969 $ hg tlog
970 o eb5a0daa2192
970 o eb5a0daa2192
971 | Predecessors: 2:0dec01379d3b 1:471f378eab4c
971 | Predecessors: 2:0dec01379d3b 1:471f378eab4c
972 | semi-colon: 2:0dec01379d3b; 1:471f378eab4c
972 | semi-colon: 2:0dec01379d3b; 1:471f378eab4c
973 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
973 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
974 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
974 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
975 | @ 0dec01379d3b
975 | @ 0dec01379d3b
976 | | Successors: 4:eb5a0daa2192
976 | | Successors: 4:eb5a0daa2192
977 | | multi-line: 4:eb5a0daa2192
977 | | multi-line: 4:eb5a0daa2192
978 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
978 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
979 | x 471f378eab4c
979 | x 471f378eab4c
980 |/ Successors: 4:eb5a0daa2192
980 |/ Successors: 4:eb5a0daa2192
981 | multi-line: 4:eb5a0daa2192
981 | multi-line: 4:eb5a0daa2192
982 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
982 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
983 o ea207398892e
983 o ea207398892e
984
984
985
985
986 $ hg fatelog
986 $ hg fatelog
987 o eb5a0daa2192
987 o eb5a0daa2192
988 |
988 |
989 | @ 0dec01379d3b
989 | @ 0dec01379d3b
990 | | Obsfate: rewritten using amend as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
990 | | Obsfate: rewritten using amend as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
991 | x 471f378eab4c
991 | x 471f378eab4c
992 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
992 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
993 o ea207398892e
993 o ea207398892e
994
994
995 $ hg up 'desc(B1)' --hidden
995 $ hg up 'desc(B1)' --hidden
996 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
996 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
997
997
998 Predecessors template should both predecessors as they are visible
998 Predecessors template should both predecessors as they are visible
999 $ hg tlog
999 $ hg tlog
1000 o eb5a0daa2192
1000 o eb5a0daa2192
1001 | Predecessors: 1:471f378eab4c 3:b7ea6d14e664
1001 | Predecessors: 1:471f378eab4c 3:b7ea6d14e664
1002 | semi-colon: 1:471f378eab4c; 3:b7ea6d14e664
1002 | semi-colon: 1:471f378eab4c; 3:b7ea6d14e664
1003 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874", "b7ea6d14e664bdc8922221f7992631b50da3fb07"]
1003 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874", "b7ea6d14e664bdc8922221f7992631b50da3fb07"]
1004 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874 3:b7ea6d14e664bdc8922221f7992631b50da3fb07
1004 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874 3:b7ea6d14e664bdc8922221f7992631b50da3fb07
1005 | @ b7ea6d14e664
1005 | @ b7ea6d14e664
1006 | | Successors: 4:eb5a0daa2192
1006 | | Successors: 4:eb5a0daa2192
1007 | | multi-line: 4:eb5a0daa2192
1007 | | multi-line: 4:eb5a0daa2192
1008 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1008 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1009 | x 471f378eab4c
1009 | x 471f378eab4c
1010 |/ Successors: 4:eb5a0daa2192
1010 |/ Successors: 4:eb5a0daa2192
1011 | multi-line: 4:eb5a0daa2192
1011 | multi-line: 4:eb5a0daa2192
1012 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1012 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1013 o ea207398892e
1013 o ea207398892e
1014
1014
1015
1015
1016 $ hg fatelog
1016 $ hg fatelog
1017 o eb5a0daa2192
1017 o eb5a0daa2192
1018 |
1018 |
1019 | @ b7ea6d14e664
1019 | @ b7ea6d14e664
1020 | | Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1020 | | Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1021 | x 471f378eab4c
1021 | x 471f378eab4c
1022 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1022 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1023 o ea207398892e
1023 o ea207398892e
1024
1024
1025 $ hg up 'desc(C0)'
1025 $ hg up 'desc(C0)'
1026 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1026 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1027
1027
1028 Predecessors template should show no predecessors as they are both non visible
1028 Predecessors template should show no predecessors as they are both non visible
1029 $ hg tlog
1029 $ hg tlog
1030 @ eb5a0daa2192
1030 @ eb5a0daa2192
1031 |
1031 |
1032 o ea207398892e
1032 o ea207398892e
1033
1033
1034
1034
1035 $ hg fatelog
1035 $ hg fatelog
1036 @ eb5a0daa2192
1036 @ eb5a0daa2192
1037 |
1037 |
1038 o ea207398892e
1038 o ea207398892e
1039
1039
1040 Predecessors template should show all predecessors as we force their display
1040 Predecessors template should show all predecessors as we force their display
1041 with --hidden
1041 with --hidden
1042 $ hg tlog --hidden
1042 $ hg tlog --hidden
1043 @ eb5a0daa2192
1043 @ eb5a0daa2192
1044 | Predecessors: 1:471f378eab4c 3:b7ea6d14e664
1044 | Predecessors: 1:471f378eab4c 3:b7ea6d14e664
1045 | semi-colon: 1:471f378eab4c; 3:b7ea6d14e664
1045 | semi-colon: 1:471f378eab4c; 3:b7ea6d14e664
1046 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874", "b7ea6d14e664bdc8922221f7992631b50da3fb07"]
1046 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874", "b7ea6d14e664bdc8922221f7992631b50da3fb07"]
1047 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874 3:b7ea6d14e664bdc8922221f7992631b50da3fb07
1047 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874 3:b7ea6d14e664bdc8922221f7992631b50da3fb07
1048 | x b7ea6d14e664
1048 | x b7ea6d14e664
1049 | | Predecessors: 2:0dec01379d3b
1049 | | Predecessors: 2:0dec01379d3b
1050 | | semi-colon: 2:0dec01379d3b
1050 | | semi-colon: 2:0dec01379d3b
1051 | | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1051 | | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1052 | | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1052 | | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1053 | | Successors: 4:eb5a0daa2192
1053 | | Successors: 4:eb5a0daa2192
1054 | | multi-line: 4:eb5a0daa2192
1054 | | multi-line: 4:eb5a0daa2192
1055 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1055 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1056 | | x 0dec01379d3b
1056 | | x 0dec01379d3b
1057 | |/ Successors: 3:b7ea6d14e664
1057 | |/ Successors: 3:b7ea6d14e664
1058 | | multi-line: 3:b7ea6d14e664
1058 | | multi-line: 3:b7ea6d14e664
1059 | | json: [["b7ea6d14e664bdc8922221f7992631b50da3fb07"]]
1059 | | json: [["b7ea6d14e664bdc8922221f7992631b50da3fb07"]]
1060 | x 471f378eab4c
1060 | x 471f378eab4c
1061 |/ Successors: 4:eb5a0daa2192
1061 |/ Successors: 4:eb5a0daa2192
1062 | multi-line: 4:eb5a0daa2192
1062 | multi-line: 4:eb5a0daa2192
1063 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1063 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1064 o ea207398892e
1064 o ea207398892e
1065
1065
1066
1066
1067 $ hg fatelog --hidden
1067 $ hg fatelog --hidden
1068 @ eb5a0daa2192
1068 @ eb5a0daa2192
1069 |
1069 |
1070 | x b7ea6d14e664
1070 | x b7ea6d14e664
1071 | | Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1071 | | Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1072 | | x 0dec01379d3b
1072 | | x 0dec01379d3b
1073 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664 by test (at 1970-01-01 00:00 +0000);
1073 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664 by test (at 1970-01-01 00:00 +0000);
1074 | x 471f378eab4c
1074 | x 471f378eab4c
1075 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1075 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1076 o ea207398892e
1076 o ea207398892e
1077
1077
1078
1078
1079 $ hg fatelogjson --hidden
1079 $ hg fatelogjson --hidden
1080 @ eb5a0daa2192
1080 @ eb5a0daa2192
1081 |
1081 |
1082 | x b7ea6d14e664
1082 | x b7ea6d14e664
1083 | | Obsfate: [{"markers": [["b7ea6d14e664bdc8922221f7992631b50da3fb07", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
1083 | | Obsfate: [{"markers": [["b7ea6d14e664bdc8922221f7992631b50da3fb07", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
1084 | | x 0dec01379d3b
1084 | | x 0dec01379d3b
1085 | |/ Obsfate: [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["b7ea6d14e664bdc8922221f7992631b50da3fb07"], 0, [["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["b7ea6d14e664bdc8922221f7992631b50da3fb07"]}]
1085 | |/ Obsfate: [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["b7ea6d14e664bdc8922221f7992631b50da3fb07"], 0, [["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["b7ea6d14e664bdc8922221f7992631b50da3fb07"]}]
1086 | x 471f378eab4c
1086 | x 471f378eab4c
1087 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
1087 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
1088 o ea207398892e
1088 o ea207398892e
1089
1089
1090
1090
1091 Check other fatelog implementations
1091 Check other fatelog implementations
1092 -----------------------------------
1092 -----------------------------------
1093
1093
1094 $ hg fatelogkw --hidden -q
1094 $ hg fatelogkw --hidden -q
1095 @ eb5a0daa2192
1095 @ eb5a0daa2192
1096 |
1096 |
1097 | x b7ea6d14e664
1097 | x b7ea6d14e664
1098 | | Obsfate: rewritten as 4:eb5a0daa2192 (at 1970-01-01 00:00 +0000)
1098 | | Obsfate: rewritten as 4:eb5a0daa2192
1099 | | x 0dec01379d3b
1099 | | x 0dec01379d3b
1100 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664 (at 1970-01-01 00:00 +0000)
1100 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664
1101 | x 471f378eab4c
1101 | x 471f378eab4c
1102 |/ Obsfate: rewritten as 4:eb5a0daa2192 (at 1970-01-01 00:00 +0000)
1102 |/ Obsfate: rewritten as 4:eb5a0daa2192
1103 o ea207398892e
1103 o ea207398892e
1104
1104
1105 $ hg fatelogkw --hidden
1105 $ hg fatelogkw --hidden
1106 @ eb5a0daa2192
1106 @ eb5a0daa2192
1107 |
1107 |
1108 | x b7ea6d14e664
1108 | x b7ea6d14e664
1109 | | Obsfate: rewritten as 4:eb5a0daa2192 (at 1970-01-01 00:00 +0000)
1109 | | Obsfate: rewritten as 4:eb5a0daa2192
1110 | | x 0dec01379d3b
1110 | | x 0dec01379d3b
1111 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664 (at 1970-01-01 00:00 +0000)
1111 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664
1112 | x 471f378eab4c
1112 | x 471f378eab4c
1113 |/ Obsfate: rewritten as 4:eb5a0daa2192 (at 1970-01-01 00:00 +0000)
1113 |/ Obsfate: rewritten as 4:eb5a0daa2192
1114 o ea207398892e
1114 o ea207398892e
1115
1115
1116 $ hg fatelogkw --hidden -v
1116 $ hg fatelogkw --hidden -v
1117 @ eb5a0daa2192
1117 @ eb5a0daa2192
1118 |
1118 |
1119 | x b7ea6d14e664
1119 | x b7ea6d14e664
1120 | | Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
1120 | | Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
1121 | | x 0dec01379d3b
1121 | | x 0dec01379d3b
1122 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664 by test (at 1970-01-01 00:00 +0000)
1122 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664 by test (at 1970-01-01 00:00 +0000)
1123 | x 471f378eab4c
1123 | x 471f378eab4c
1124 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
1124 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
1125 o ea207398892e
1125 o ea207398892e
1126
1126
1127
1127
1128 Test template with pushed and pulled obs markers
1128 Test template with pushed and pulled obs markers
1129 ================================================
1129 ================================================
1130
1130
1131 Test setup
1131 Test setup
1132 ----------
1132 ----------
1133
1133
1134 $ hg init $TESTTMP/templates-local-remote-markers-1
1134 $ hg init $TESTTMP/templates-local-remote-markers-1
1135 $ cd $TESTTMP/templates-local-remote-markers-1
1135 $ cd $TESTTMP/templates-local-remote-markers-1
1136 $ mkcommit ROOT
1136 $ mkcommit ROOT
1137 $ mkcommit A0
1137 $ mkcommit A0
1138 $ hg clone $TESTTMP/templates-local-remote-markers-1 $TESTTMP/templates-local-remote-markers-2
1138 $ hg clone $TESTTMP/templates-local-remote-markers-1 $TESTTMP/templates-local-remote-markers-2
1139 updating to branch default
1139 updating to branch default
1140 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1140 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1141 $ cd $TESTTMP/templates-local-remote-markers-2
1141 $ cd $TESTTMP/templates-local-remote-markers-2
1142 $ hg log --hidden -G
1142 $ hg log --hidden -G
1143 @ changeset: 1:471f378eab4c
1143 @ changeset: 1:471f378eab4c
1144 | tag: tip
1144 | tag: tip
1145 | user: test
1145 | user: test
1146 | date: Thu Jan 01 00:00:00 1970 +0000
1146 | date: Thu Jan 01 00:00:00 1970 +0000
1147 | summary: A0
1147 | summary: A0
1148 |
1148 |
1149 o changeset: 0:ea207398892e
1149 o changeset: 0:ea207398892e
1150 user: test
1150 user: test
1151 date: Thu Jan 01 00:00:00 1970 +0000
1151 date: Thu Jan 01 00:00:00 1970 +0000
1152 summary: ROOT
1152 summary: ROOT
1153
1153
1154 $ cd $TESTTMP/templates-local-remote-markers-1
1154 $ cd $TESTTMP/templates-local-remote-markers-1
1155 $ hg commit --amend -m "A1"
1155 $ hg commit --amend -m "A1"
1156 $ hg commit --amend -m "A2"
1156 $ hg commit --amend -m "A2"
1157 $ hg log --hidden -G
1157 $ hg log --hidden -G
1158 @ changeset: 3:7a230b46bf61
1158 @ changeset: 3:7a230b46bf61
1159 | tag: tip
1159 | tag: tip
1160 | parent: 0:ea207398892e
1160 | parent: 0:ea207398892e
1161 | user: test
1161 | user: test
1162 | date: Thu Jan 01 00:00:00 1970 +0000
1162 | date: Thu Jan 01 00:00:00 1970 +0000
1163 | summary: A2
1163 | summary: A2
1164 |
1164 |
1165 | x changeset: 2:fdf9bde5129a
1165 | x changeset: 2:fdf9bde5129a
1166 |/ parent: 0:ea207398892e
1166 |/ parent: 0:ea207398892e
1167 | user: test
1167 | user: test
1168 | date: Thu Jan 01 00:00:00 1970 +0000
1168 | date: Thu Jan 01 00:00:00 1970 +0000
1169 | summary: A1
1169 | summary: A1
1170 |
1170 |
1171 | x changeset: 1:471f378eab4c
1171 | x changeset: 1:471f378eab4c
1172 |/ user: test
1172 |/ user: test
1173 | date: Thu Jan 01 00:00:00 1970 +0000
1173 | date: Thu Jan 01 00:00:00 1970 +0000
1174 | summary: A0
1174 | summary: A0
1175 |
1175 |
1176 o changeset: 0:ea207398892e
1176 o changeset: 0:ea207398892e
1177 user: test
1177 user: test
1178 date: Thu Jan 01 00:00:00 1970 +0000
1178 date: Thu Jan 01 00:00:00 1970 +0000
1179 summary: ROOT
1179 summary: ROOT
1180
1180
1181 $ cd $TESTTMP/templates-local-remote-markers-2
1181 $ cd $TESTTMP/templates-local-remote-markers-2
1182 $ hg pull
1182 $ hg pull
1183 pulling from $TESTTMP/templates-local-remote-markers-1 (glob)
1183 pulling from $TESTTMP/templates-local-remote-markers-1 (glob)
1184 searching for changes
1184 searching for changes
1185 adding changesets
1185 adding changesets
1186 adding manifests
1186 adding manifests
1187 adding file changes
1187 adding file changes
1188 added 1 changesets with 0 changes to 1 files (+1 heads)
1188 added 1 changesets with 0 changes to 1 files (+1 heads)
1189 2 new obsolescence markers
1189 2 new obsolescence markers
1190 obsoleted 1 changesets
1190 obsoleted 1 changesets
1191 new changesets 7a230b46bf61
1191 new changesets 7a230b46bf61
1192 (run 'hg heads' to see heads, 'hg merge' to merge)
1192 (run 'hg heads' to see heads, 'hg merge' to merge)
1193 $ hg log --hidden -G
1193 $ hg log --hidden -G
1194 o changeset: 2:7a230b46bf61
1194 o changeset: 2:7a230b46bf61
1195 | tag: tip
1195 | tag: tip
1196 | parent: 0:ea207398892e
1196 | parent: 0:ea207398892e
1197 | user: test
1197 | user: test
1198 | date: Thu Jan 01 00:00:00 1970 +0000
1198 | date: Thu Jan 01 00:00:00 1970 +0000
1199 | summary: A2
1199 | summary: A2
1200 |
1200 |
1201 | @ changeset: 1:471f378eab4c
1201 | @ changeset: 1:471f378eab4c
1202 |/ user: test
1202 |/ user: test
1203 | date: Thu Jan 01 00:00:00 1970 +0000
1203 | date: Thu Jan 01 00:00:00 1970 +0000
1204 | summary: A0
1204 | summary: A0
1205 |
1205 |
1206 o changeset: 0:ea207398892e
1206 o changeset: 0:ea207398892e
1207 user: test
1207 user: test
1208 date: Thu Jan 01 00:00:00 1970 +0000
1208 date: Thu Jan 01 00:00:00 1970 +0000
1209 summary: ROOT
1209 summary: ROOT
1210
1210
1211
1211
1212 $ hg debugobsolete
1212 $ hg debugobsolete
1213 471f378eab4c5e25f6c77f785b27c936efb22874 fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1213 471f378eab4c5e25f6c77f785b27c936efb22874 fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1214 fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e 7a230b46bf61e50b30308c6cfd7bd1269ef54702 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1214 fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e 7a230b46bf61e50b30308c6cfd7bd1269ef54702 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1215
1215
1216 Check templates
1216 Check templates
1217 ---------------
1217 ---------------
1218
1218
1219 Predecessors template should show current revision as it is the working copy
1219 Predecessors template should show current revision as it is the working copy
1220 $ hg tlog
1220 $ hg tlog
1221 o 7a230b46bf61
1221 o 7a230b46bf61
1222 | Predecessors: 1:471f378eab4c
1222 | Predecessors: 1:471f378eab4c
1223 | semi-colon: 1:471f378eab4c
1223 | semi-colon: 1:471f378eab4c
1224 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1224 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1225 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1225 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1226 | @ 471f378eab4c
1226 | @ 471f378eab4c
1227 |/ Successors: 2:7a230b46bf61
1227 |/ Successors: 2:7a230b46bf61
1228 | multi-line: 2:7a230b46bf61
1228 | multi-line: 2:7a230b46bf61
1229 | json: [["7a230b46bf61e50b30308c6cfd7bd1269ef54702"]]
1229 | json: [["7a230b46bf61e50b30308c6cfd7bd1269ef54702"]]
1230 o ea207398892e
1230 o ea207398892e
1231
1231
1232
1232
1233 $ hg fatelog
1233 $ hg fatelog
1234 o 7a230b46bf61
1234 o 7a230b46bf61
1235 |
1235 |
1236 | @ 471f378eab4c
1236 | @ 471f378eab4c
1237 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000);
1237 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000);
1238 o ea207398892e
1238 o ea207398892e
1239
1239
1240 $ hg up 'desc(A2)'
1240 $ hg up 'desc(A2)'
1241 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1241 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1242
1242
1243 Predecessors template should show no predecessors as they are non visible
1243 Predecessors template should show no predecessors as they are non visible
1244 $ hg tlog
1244 $ hg tlog
1245 @ 7a230b46bf61
1245 @ 7a230b46bf61
1246 |
1246 |
1247 o ea207398892e
1247 o ea207398892e
1248
1248
1249
1249
1250 $ hg fatelog
1250 $ hg fatelog
1251 @ 7a230b46bf61
1251 @ 7a230b46bf61
1252 |
1252 |
1253 o ea207398892e
1253 o ea207398892e
1254
1254
1255 Predecessors template should show all predecessors as we force their display
1255 Predecessors template should show all predecessors as we force their display
1256 with --hidden
1256 with --hidden
1257 $ hg tlog --hidden
1257 $ hg tlog --hidden
1258 @ 7a230b46bf61
1258 @ 7a230b46bf61
1259 | Predecessors: 1:471f378eab4c
1259 | Predecessors: 1:471f378eab4c
1260 | semi-colon: 1:471f378eab4c
1260 | semi-colon: 1:471f378eab4c
1261 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1261 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1262 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1262 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1263 | x 471f378eab4c
1263 | x 471f378eab4c
1264 |/ Successors: 2:7a230b46bf61
1264 |/ Successors: 2:7a230b46bf61
1265 | multi-line: 2:7a230b46bf61
1265 | multi-line: 2:7a230b46bf61
1266 | json: [["7a230b46bf61e50b30308c6cfd7bd1269ef54702"]]
1266 | json: [["7a230b46bf61e50b30308c6cfd7bd1269ef54702"]]
1267 o ea207398892e
1267 o ea207398892e
1268
1268
1269
1269
1270 $ hg fatelog --hidden
1270 $ hg fatelog --hidden
1271 @ 7a230b46bf61
1271 @ 7a230b46bf61
1272 |
1272 |
1273 | x 471f378eab4c
1273 | x 471f378eab4c
1274 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000);
1274 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000);
1275 o ea207398892e
1275 o ea207398892e
1276
1276
1277
1277
1278 Check other fatelog implementations
1278 Check other fatelog implementations
1279 -----------------------------------
1279 -----------------------------------
1280
1280
1281 $ hg fatelogkw --hidden -q
1281 $ hg fatelogkw --hidden -q
1282 @ 7a230b46bf61
1282 @ 7a230b46bf61
1283 |
1283 |
1284 | x 471f378eab4c
1284 | x 471f378eab4c
1285 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 (at 1970-01-01 00:00 +0000)
1285 |/ Obsfate: rewritten using amend as 2:7a230b46bf61
1286 o ea207398892e
1286 o ea207398892e
1287
1287
1288 $ hg fatelogkw --hidden
1288 $ hg fatelogkw --hidden
1289 @ 7a230b46bf61
1289 @ 7a230b46bf61
1290 |
1290 |
1291 | x 471f378eab4c
1291 | x 471f378eab4c
1292 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 (at 1970-01-01 00:00 +0000)
1292 |/ Obsfate: rewritten using amend as 2:7a230b46bf61
1293 o ea207398892e
1293 o ea207398892e
1294
1294
1295 $ hg fatelogkw --hidden -v
1295 $ hg fatelogkw --hidden -v
1296 @ 7a230b46bf61
1296 @ 7a230b46bf61
1297 |
1297 |
1298 | x 471f378eab4c
1298 | x 471f378eab4c
1299 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000)
1299 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000)
1300 o ea207398892e
1300 o ea207398892e
1301
1301
1302
1302
1303 Test template with obsmarkers cycle
1303 Test template with obsmarkers cycle
1304 ===================================
1304 ===================================
1305
1305
1306 Test setup
1306 Test setup
1307 ----------
1307 ----------
1308
1308
1309 $ hg init $TESTTMP/templates-local-cycle
1309 $ hg init $TESTTMP/templates-local-cycle
1310 $ cd $TESTTMP/templates-local-cycle
1310 $ cd $TESTTMP/templates-local-cycle
1311 $ mkcommit ROOT
1311 $ mkcommit ROOT
1312 $ mkcommit A0
1312 $ mkcommit A0
1313 $ mkcommit B0
1313 $ mkcommit B0
1314 $ hg up -r 0
1314 $ hg up -r 0
1315 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1315 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1316 $ mkcommit C0
1316 $ mkcommit C0
1317 created new head
1317 created new head
1318
1318
1319 Create the cycle
1319 Create the cycle
1320
1320
1321 $ hg debugobsolete `getid "desc(A0)"` `getid "desc(B0)"`
1321 $ hg debugobsolete `getid "desc(A0)"` `getid "desc(B0)"`
1322 obsoleted 1 changesets
1322 obsoleted 1 changesets
1323 $ hg debugobsolete `getid "desc(B0)"` `getid "desc(C0)"`
1323 $ hg debugobsolete `getid "desc(B0)"` `getid "desc(C0)"`
1324 obsoleted 1 changesets
1324 obsoleted 1 changesets
1325 $ hg debugobsolete `getid "desc(B0)"` `getid "desc(A0)"`
1325 $ hg debugobsolete `getid "desc(B0)"` `getid "desc(A0)"`
1326
1326
1327 Check templates
1327 Check templates
1328 ---------------
1328 ---------------
1329
1329
1330 $ hg tlog
1330 $ hg tlog
1331 @ f897c6137566
1331 @ f897c6137566
1332 |
1332 |
1333 o ea207398892e
1333 o ea207398892e
1334
1334
1335
1335
1336 $ hg fatelog
1336 $ hg fatelog
1337 @ f897c6137566
1337 @ f897c6137566
1338 |
1338 |
1339 o ea207398892e
1339 o ea207398892e
1340
1340
1341
1341
1342 $ hg up -r "desc(B0)" --hidden
1342 $ hg up -r "desc(B0)" --hidden
1343 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
1343 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
1344 $ hg tlog
1344 $ hg tlog
1345 o f897c6137566
1345 o f897c6137566
1346 | Predecessors: 2:0dec01379d3b
1346 | Predecessors: 2:0dec01379d3b
1347 | semi-colon: 2:0dec01379d3b
1347 | semi-colon: 2:0dec01379d3b
1348 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1348 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1349 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1349 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1350 | @ 0dec01379d3b
1350 | @ 0dec01379d3b
1351 | | Predecessors: 1:471f378eab4c
1351 | | Predecessors: 1:471f378eab4c
1352 | | semi-colon: 1:471f378eab4c
1352 | | semi-colon: 1:471f378eab4c
1353 | | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1353 | | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1354 | | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1354 | | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1355 | | Successors: 3:f897c6137566; 1:471f378eab4c
1355 | | Successors: 3:f897c6137566; 1:471f378eab4c
1356 | | multi-line: 3:f897c6137566
1356 | | multi-line: 3:f897c6137566
1357 | | multi-line: 1:471f378eab4c
1357 | | multi-line: 1:471f378eab4c
1358 | | json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
1358 | | json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
1359 | x 471f378eab4c
1359 | x 471f378eab4c
1360 |/ Predecessors: 2:0dec01379d3b
1360 |/ Predecessors: 2:0dec01379d3b
1361 | semi-colon: 2:0dec01379d3b
1361 | semi-colon: 2:0dec01379d3b
1362 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1362 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1363 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1363 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1364 | Successors: 2:0dec01379d3b
1364 | Successors: 2:0dec01379d3b
1365 | multi-line: 2:0dec01379d3b
1365 | multi-line: 2:0dec01379d3b
1366 | json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
1366 | json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
1367 o ea207398892e
1367 o ea207398892e
1368
1368
1369
1369
1370 $ hg fatelog
1370 $ hg fatelog
1371 o f897c6137566
1371 o f897c6137566
1372 |
1372 |
1373 | @ 0dec01379d3b
1373 | @ 0dec01379d3b
1374 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000); rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000);
1374 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000); rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000);
1375 | x 471f378eab4c
1375 | x 471f378eab4c
1376 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000);
1376 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000);
1377 o ea207398892e
1377 o ea207398892e
1378
1378
1379
1379
1380 $ hg up -r "desc(A0)" --hidden
1380 $ hg up -r "desc(A0)" --hidden
1381 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1381 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1382 $ hg tlog
1382 $ hg tlog
1383 o f897c6137566
1383 o f897c6137566
1384 | Predecessors: 1:471f378eab4c
1384 | Predecessors: 1:471f378eab4c
1385 | semi-colon: 1:471f378eab4c
1385 | semi-colon: 1:471f378eab4c
1386 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1386 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1387 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1387 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1388 | @ 471f378eab4c
1388 | @ 471f378eab4c
1389 |/
1389 |/
1390 o ea207398892e
1390 o ea207398892e
1391
1391
1392
1392
1393 $ hg fatelog
1393 $ hg fatelog
1394 o f897c6137566
1394 o f897c6137566
1395 |
1395 |
1396 | @ 471f378eab4c
1396 | @ 471f378eab4c
1397 |/ Obsfate: pruned;
1397 |/ Obsfate: pruned;
1398 o ea207398892e
1398 o ea207398892e
1399
1399
1400
1400
1401 $ hg up -r "desc(ROOT)" --hidden
1401 $ hg up -r "desc(ROOT)" --hidden
1402 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1402 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1403 $ hg tlog
1403 $ hg tlog
1404 o f897c6137566
1404 o f897c6137566
1405 |
1405 |
1406 @ ea207398892e
1406 @ ea207398892e
1407
1407
1408
1408
1409 $ hg fatelog
1409 $ hg fatelog
1410 o f897c6137566
1410 o f897c6137566
1411 |
1411 |
1412 @ ea207398892e
1412 @ ea207398892e
1413
1413
1414
1414
1415 $ hg tlog --hidden
1415 $ hg tlog --hidden
1416 o f897c6137566
1416 o f897c6137566
1417 | Predecessors: 2:0dec01379d3b
1417 | Predecessors: 2:0dec01379d3b
1418 | semi-colon: 2:0dec01379d3b
1418 | semi-colon: 2:0dec01379d3b
1419 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1419 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1420 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1420 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1421 | x 0dec01379d3b
1421 | x 0dec01379d3b
1422 | | Predecessors: 1:471f378eab4c
1422 | | Predecessors: 1:471f378eab4c
1423 | | semi-colon: 1:471f378eab4c
1423 | | semi-colon: 1:471f378eab4c
1424 | | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1424 | | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1425 | | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1425 | | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1426 | | Successors: 3:f897c6137566; 1:471f378eab4c
1426 | | Successors: 3:f897c6137566; 1:471f378eab4c
1427 | | multi-line: 3:f897c6137566
1427 | | multi-line: 3:f897c6137566
1428 | | multi-line: 1:471f378eab4c
1428 | | multi-line: 1:471f378eab4c
1429 | | json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
1429 | | json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
1430 | x 471f378eab4c
1430 | x 471f378eab4c
1431 |/ Predecessors: 2:0dec01379d3b
1431 |/ Predecessors: 2:0dec01379d3b
1432 | semi-colon: 2:0dec01379d3b
1432 | semi-colon: 2:0dec01379d3b
1433 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1433 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1434 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1434 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1435 | Successors: 2:0dec01379d3b
1435 | Successors: 2:0dec01379d3b
1436 | multi-line: 2:0dec01379d3b
1436 | multi-line: 2:0dec01379d3b
1437 | json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
1437 | json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
1438 @ ea207398892e
1438 @ ea207398892e
1439
1439
1440
1440
1441 Check other fatelog implementations
1441 Check other fatelog implementations
1442 -----------------------------------
1442 -----------------------------------
1443
1443
1444 $ hg fatelogkw --hidden -q
1444 $ hg fatelogkw --hidden -q
1445 o f897c6137566
1445 o f897c6137566
1446 |
1446 |
1447 | x 0dec01379d3b
1447 | x 0dec01379d3b
1448 | | Obsfate: rewritten as 3:f897c6137566 (at 1970-01-01 00:00 +0000)
1448 | | Obsfate: rewritten as 3:f897c6137566
1449 | | Obsfate: rewritten as 1:471f378eab4c (at 1970-01-01 00:00 +0000)
1449 | | Obsfate: rewritten as 1:471f378eab4c
1450 | x 471f378eab4c
1450 | x 471f378eab4c
1451 |/ Obsfate: rewritten as 2:0dec01379d3b (at 1970-01-01 00:00 +0000)
1451 |/ Obsfate: rewritten as 2:0dec01379d3b
1452 @ ea207398892e
1452 @ ea207398892e
1453
1453
1454 $ hg fatelogkw --hidden
1454 $ hg fatelogkw --hidden
1455 o f897c6137566
1455 o f897c6137566
1456 |
1456 |
1457 | x 0dec01379d3b
1457 | x 0dec01379d3b
1458 | | Obsfate: rewritten as 3:f897c6137566 (at 1970-01-01 00:00 +0000)
1458 | | Obsfate: rewritten as 3:f897c6137566
1459 | | Obsfate: rewritten as 1:471f378eab4c (at 1970-01-01 00:00 +0000)
1459 | | Obsfate: rewritten as 1:471f378eab4c
1460 | x 471f378eab4c
1460 | x 471f378eab4c
1461 |/ Obsfate: rewritten as 2:0dec01379d3b (at 1970-01-01 00:00 +0000)
1461 |/ Obsfate: rewritten as 2:0dec01379d3b
1462 @ ea207398892e
1462 @ ea207398892e
1463
1463
1464 $ hg fatelogkw --hidden -v
1464 $ hg fatelogkw --hidden -v
1465 o f897c6137566
1465 o f897c6137566
1466 |
1466 |
1467 | x 0dec01379d3b
1467 | x 0dec01379d3b
1468 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000)
1468 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000)
1469 | | Obsfate: rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000)
1469 | | Obsfate: rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000)
1470 | x 471f378eab4c
1470 | x 471f378eab4c
1471 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000)
1471 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000)
1472 @ ea207398892e
1472 @ ea207398892e
1473
1473
1474
1474
1475 Test template with split + divergence with cycles
1475 Test template with split + divergence with cycles
1476 =================================================
1476 =================================================
1477
1477
1478 $ hg log -G
1478 $ hg log -G
1479 o changeset: 3:f897c6137566
1479 o changeset: 3:f897c6137566
1480 | tag: tip
1480 | tag: tip
1481 | parent: 0:ea207398892e
1481 | parent: 0:ea207398892e
1482 | user: test
1482 | user: test
1483 | date: Thu Jan 01 00:00:00 1970 +0000
1483 | date: Thu Jan 01 00:00:00 1970 +0000
1484 | summary: C0
1484 | summary: C0
1485 |
1485 |
1486 @ changeset: 0:ea207398892e
1486 @ changeset: 0:ea207398892e
1487 user: test
1487 user: test
1488 date: Thu Jan 01 00:00:00 1970 +0000
1488 date: Thu Jan 01 00:00:00 1970 +0000
1489 summary: ROOT
1489 summary: ROOT
1490
1490
1491 $ hg up
1491 $ hg up
1492 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1492 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1493
1493
1494 Create a commit with three files
1494 Create a commit with three files
1495 $ touch A B C
1495 $ touch A B C
1496 $ hg commit -A -m "Add A,B,C" A B C
1496 $ hg commit -A -m "Add A,B,C" A B C
1497
1497
1498 Split it
1498 Split it
1499 $ hg up 3
1499 $ hg up 3
1500 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
1500 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
1501 $ touch A
1501 $ touch A
1502 $ hg commit -A -m "Add A,B,C" A
1502 $ hg commit -A -m "Add A,B,C" A
1503 created new head
1503 created new head
1504
1504
1505 $ touch B
1505 $ touch B
1506 $ hg commit -A -m "Add A,B,C" B
1506 $ hg commit -A -m "Add A,B,C" B
1507
1507
1508 $ touch C
1508 $ touch C
1509 $ hg commit -A -m "Add A,B,C" C
1509 $ hg commit -A -m "Add A,B,C" C
1510
1510
1511 $ hg log -G
1511 $ hg log -G
1512 @ changeset: 7:ba2ed02b0c9a
1512 @ changeset: 7:ba2ed02b0c9a
1513 | tag: tip
1513 | tag: tip
1514 | user: test
1514 | user: test
1515 | date: Thu Jan 01 00:00:00 1970 +0000
1515 | date: Thu Jan 01 00:00:00 1970 +0000
1516 | summary: Add A,B,C
1516 | summary: Add A,B,C
1517 |
1517 |
1518 o changeset: 6:4a004186e638
1518 o changeset: 6:4a004186e638
1519 | user: test
1519 | user: test
1520 | date: Thu Jan 01 00:00:00 1970 +0000
1520 | date: Thu Jan 01 00:00:00 1970 +0000
1521 | summary: Add A,B,C
1521 | summary: Add A,B,C
1522 |
1522 |
1523 o changeset: 5:dd800401bd8c
1523 o changeset: 5:dd800401bd8c
1524 | parent: 3:f897c6137566
1524 | parent: 3:f897c6137566
1525 | user: test
1525 | user: test
1526 | date: Thu Jan 01 00:00:00 1970 +0000
1526 | date: Thu Jan 01 00:00:00 1970 +0000
1527 | summary: Add A,B,C
1527 | summary: Add A,B,C
1528 |
1528 |
1529 | o changeset: 4:9bd10a0775e4
1529 | o changeset: 4:9bd10a0775e4
1530 |/ user: test
1530 |/ user: test
1531 | date: Thu Jan 01 00:00:00 1970 +0000
1531 | date: Thu Jan 01 00:00:00 1970 +0000
1532 | summary: Add A,B,C
1532 | summary: Add A,B,C
1533 |
1533 |
1534 o changeset: 3:f897c6137566
1534 o changeset: 3:f897c6137566
1535 | parent: 0:ea207398892e
1535 | parent: 0:ea207398892e
1536 | user: test
1536 | user: test
1537 | date: Thu Jan 01 00:00:00 1970 +0000
1537 | date: Thu Jan 01 00:00:00 1970 +0000
1538 | summary: C0
1538 | summary: C0
1539 |
1539 |
1540 o changeset: 0:ea207398892e
1540 o changeset: 0:ea207398892e
1541 user: test
1541 user: test
1542 date: Thu Jan 01 00:00:00 1970 +0000
1542 date: Thu Jan 01 00:00:00 1970 +0000
1543 summary: ROOT
1543 summary: ROOT
1544
1544
1545 $ hg debugobsolete `getid "4"` `getid "5"` `getid "6"` `getid "7"`
1545 $ hg debugobsolete `getid "4"` `getid "5"` `getid "6"` `getid "7"`
1546 obsoleted 1 changesets
1546 obsoleted 1 changesets
1547 $ hg log -G
1547 $ hg log -G
1548 @ changeset: 7:ba2ed02b0c9a
1548 @ changeset: 7:ba2ed02b0c9a
1549 | tag: tip
1549 | tag: tip
1550 | user: test
1550 | user: test
1551 | date: Thu Jan 01 00:00:00 1970 +0000
1551 | date: Thu Jan 01 00:00:00 1970 +0000
1552 | summary: Add A,B,C
1552 | summary: Add A,B,C
1553 |
1553 |
1554 o changeset: 6:4a004186e638
1554 o changeset: 6:4a004186e638
1555 | user: test
1555 | user: test
1556 | date: Thu Jan 01 00:00:00 1970 +0000
1556 | date: Thu Jan 01 00:00:00 1970 +0000
1557 | summary: Add A,B,C
1557 | summary: Add A,B,C
1558 |
1558 |
1559 o changeset: 5:dd800401bd8c
1559 o changeset: 5:dd800401bd8c
1560 | parent: 3:f897c6137566
1560 | parent: 3:f897c6137566
1561 | user: test
1561 | user: test
1562 | date: Thu Jan 01 00:00:00 1970 +0000
1562 | date: Thu Jan 01 00:00:00 1970 +0000
1563 | summary: Add A,B,C
1563 | summary: Add A,B,C
1564 |
1564 |
1565 o changeset: 3:f897c6137566
1565 o changeset: 3:f897c6137566
1566 | parent: 0:ea207398892e
1566 | parent: 0:ea207398892e
1567 | user: test
1567 | user: test
1568 | date: Thu Jan 01 00:00:00 1970 +0000
1568 | date: Thu Jan 01 00:00:00 1970 +0000
1569 | summary: C0
1569 | summary: C0
1570 |
1570 |
1571 o changeset: 0:ea207398892e
1571 o changeset: 0:ea207398892e
1572 user: test
1572 user: test
1573 date: Thu Jan 01 00:00:00 1970 +0000
1573 date: Thu Jan 01 00:00:00 1970 +0000
1574 summary: ROOT
1574 summary: ROOT
1575
1575
1576 Diverge one of the splitted commit
1576 Diverge one of the splitted commit
1577
1577
1578 $ hg up 6
1578 $ hg up 6
1579 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1579 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1580 $ hg commit --amend -m "Add only B"
1580 $ hg commit --amend -m "Add only B"
1581
1581
1582 $ hg up 6 --hidden
1582 $ hg up 6 --hidden
1583 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1583 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1584 $ hg commit --amend -m "Add B only"
1584 $ hg commit --amend -m "Add B only"
1585
1585
1586 $ hg log -G
1586 $ hg log -G
1587 @ changeset: 9:0b997eb7ceee
1587 @ changeset: 9:0b997eb7ceee
1588 | tag: tip
1588 | tag: tip
1589 | parent: 5:dd800401bd8c
1589 | parent: 5:dd800401bd8c
1590 | user: test
1590 | user: test
1591 | date: Thu Jan 01 00:00:00 1970 +0000
1591 | date: Thu Jan 01 00:00:00 1970 +0000
1592 | instability: content-divergent
1592 | instability: content-divergent
1593 | summary: Add B only
1593 | summary: Add B only
1594 |
1594 |
1595 | o changeset: 8:b18bc8331526
1595 | o changeset: 8:b18bc8331526
1596 |/ parent: 5:dd800401bd8c
1596 |/ parent: 5:dd800401bd8c
1597 | user: test
1597 | user: test
1598 | date: Thu Jan 01 00:00:00 1970 +0000
1598 | date: Thu Jan 01 00:00:00 1970 +0000
1599 | instability: content-divergent
1599 | instability: content-divergent
1600 | summary: Add only B
1600 | summary: Add only B
1601 |
1601 |
1602 | o changeset: 7:ba2ed02b0c9a
1602 | o changeset: 7:ba2ed02b0c9a
1603 | | user: test
1603 | | user: test
1604 | | date: Thu Jan 01 00:00:00 1970 +0000
1604 | | date: Thu Jan 01 00:00:00 1970 +0000
1605 | | instability: orphan, content-divergent
1605 | | instability: orphan, content-divergent
1606 | | summary: Add A,B,C
1606 | | summary: Add A,B,C
1607 | |
1607 | |
1608 | x changeset: 6:4a004186e638
1608 | x changeset: 6:4a004186e638
1609 |/ user: test
1609 |/ user: test
1610 | date: Thu Jan 01 00:00:00 1970 +0000
1610 | date: Thu Jan 01 00:00:00 1970 +0000
1611 | summary: Add A,B,C
1611 | summary: Add A,B,C
1612 |
1612 |
1613 o changeset: 5:dd800401bd8c
1613 o changeset: 5:dd800401bd8c
1614 | parent: 3:f897c6137566
1614 | parent: 3:f897c6137566
1615 | user: test
1615 | user: test
1616 | date: Thu Jan 01 00:00:00 1970 +0000
1616 | date: Thu Jan 01 00:00:00 1970 +0000
1617 | instability: content-divergent
1617 | instability: content-divergent
1618 | summary: Add A,B,C
1618 | summary: Add A,B,C
1619 |
1619 |
1620 o changeset: 3:f897c6137566
1620 o changeset: 3:f897c6137566
1621 | parent: 0:ea207398892e
1621 | parent: 0:ea207398892e
1622 | user: test
1622 | user: test
1623 | date: Thu Jan 01 00:00:00 1970 +0000
1623 | date: Thu Jan 01 00:00:00 1970 +0000
1624 | summary: C0
1624 | summary: C0
1625 |
1625 |
1626 o changeset: 0:ea207398892e
1626 o changeset: 0:ea207398892e
1627 user: test
1627 user: test
1628 date: Thu Jan 01 00:00:00 1970 +0000
1628 date: Thu Jan 01 00:00:00 1970 +0000
1629 summary: ROOT
1629 summary: ROOT
1630
1630
1631
1631
1632 Check templates
1632 Check templates
1633 ---------------
1633 ---------------
1634
1634
1635 $ hg tlog
1635 $ hg tlog
1636 @ 0b997eb7ceee
1636 @ 0b997eb7ceee
1637 | Predecessors: 6:4a004186e638
1637 | Predecessors: 6:4a004186e638
1638 | semi-colon: 6:4a004186e638
1638 | semi-colon: 6:4a004186e638
1639 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
1639 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
1640 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
1640 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
1641 | o b18bc8331526
1641 | o b18bc8331526
1642 |/ Predecessors: 6:4a004186e638
1642 |/ Predecessors: 6:4a004186e638
1643 | semi-colon: 6:4a004186e638
1643 | semi-colon: 6:4a004186e638
1644 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
1644 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
1645 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
1645 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
1646 | o ba2ed02b0c9a
1646 | o ba2ed02b0c9a
1647 | |
1647 | |
1648 | x 4a004186e638
1648 | x 4a004186e638
1649 |/ Successors: 8:b18bc8331526; 9:0b997eb7ceee
1649 |/ Successors: 8:b18bc8331526; 9:0b997eb7ceee
1650 | multi-line: 8:b18bc8331526
1650 | multi-line: 8:b18bc8331526
1651 | multi-line: 9:0b997eb7ceee
1651 | multi-line: 9:0b997eb7ceee
1652 | json: [["b18bc8331526a22cbb1801022bd1555bf291c48b"], ["0b997eb7ceeee06200a02f8aab185979092d514e"]]
1652 | json: [["b18bc8331526a22cbb1801022bd1555bf291c48b"], ["0b997eb7ceeee06200a02f8aab185979092d514e"]]
1653 o dd800401bd8c
1653 o dd800401bd8c
1654 |
1654 |
1655 o f897c6137566
1655 o f897c6137566
1656 |
1656 |
1657 o ea207398892e
1657 o ea207398892e
1658
1658
1659 $ hg fatelog
1659 $ hg fatelog
1660 @ 0b997eb7ceee
1660 @ 0b997eb7ceee
1661 |
1661 |
1662 | o b18bc8331526
1662 | o b18bc8331526
1663 |/
1663 |/
1664 | o ba2ed02b0c9a
1664 | o ba2ed02b0c9a
1665 | |
1665 | |
1666 | x 4a004186e638
1666 | x 4a004186e638
1667 |/ Obsfate: rewritten using amend as 8:b18bc8331526 by test (at 1970-01-01 00:00 +0000); rewritten using amend as 9:0b997eb7ceee by test (at 1970-01-01 00:00 +0000);
1667 |/ Obsfate: rewritten using amend as 8:b18bc8331526 by test (at 1970-01-01 00:00 +0000); rewritten using amend as 9:0b997eb7ceee by test (at 1970-01-01 00:00 +0000);
1668 o dd800401bd8c
1668 o dd800401bd8c
1669 |
1669 |
1670 o f897c6137566
1670 o f897c6137566
1671 |
1671 |
1672 o ea207398892e
1672 o ea207398892e
1673
1673
1674 $ hg tlog --hidden
1674 $ hg tlog --hidden
1675 @ 0b997eb7ceee
1675 @ 0b997eb7ceee
1676 | Predecessors: 6:4a004186e638
1676 | Predecessors: 6:4a004186e638
1677 | semi-colon: 6:4a004186e638
1677 | semi-colon: 6:4a004186e638
1678 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
1678 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
1679 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
1679 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
1680 | o b18bc8331526
1680 | o b18bc8331526
1681 |/ Predecessors: 6:4a004186e638
1681 |/ Predecessors: 6:4a004186e638
1682 | semi-colon: 6:4a004186e638
1682 | semi-colon: 6:4a004186e638
1683 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
1683 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
1684 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
1684 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
1685 | o ba2ed02b0c9a
1685 | o ba2ed02b0c9a
1686 | | Predecessors: 4:9bd10a0775e4
1686 | | Predecessors: 4:9bd10a0775e4
1687 | | semi-colon: 4:9bd10a0775e4
1687 | | semi-colon: 4:9bd10a0775e4
1688 | | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1688 | | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1689 | | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1689 | | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1690 | x 4a004186e638
1690 | x 4a004186e638
1691 |/ Predecessors: 4:9bd10a0775e4
1691 |/ Predecessors: 4:9bd10a0775e4
1692 | semi-colon: 4:9bd10a0775e4
1692 | semi-colon: 4:9bd10a0775e4
1693 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1693 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1694 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1694 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1695 | Successors: 8:b18bc8331526; 9:0b997eb7ceee
1695 | Successors: 8:b18bc8331526; 9:0b997eb7ceee
1696 | multi-line: 8:b18bc8331526
1696 | multi-line: 8:b18bc8331526
1697 | multi-line: 9:0b997eb7ceee
1697 | multi-line: 9:0b997eb7ceee
1698 | json: [["b18bc8331526a22cbb1801022bd1555bf291c48b"], ["0b997eb7ceeee06200a02f8aab185979092d514e"]]
1698 | json: [["b18bc8331526a22cbb1801022bd1555bf291c48b"], ["0b997eb7ceeee06200a02f8aab185979092d514e"]]
1699 o dd800401bd8c
1699 o dd800401bd8c
1700 | Predecessors: 4:9bd10a0775e4
1700 | Predecessors: 4:9bd10a0775e4
1701 | semi-colon: 4:9bd10a0775e4
1701 | semi-colon: 4:9bd10a0775e4
1702 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1702 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1703 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1703 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1704 | x 9bd10a0775e4
1704 | x 9bd10a0775e4
1705 |/ Successors: 5:dd800401bd8c 6:4a004186e638 7:ba2ed02b0c9a
1705 |/ Successors: 5:dd800401bd8c 6:4a004186e638 7:ba2ed02b0c9a
1706 | multi-line: 5:dd800401bd8c 6:4a004186e638 7:ba2ed02b0c9a
1706 | multi-line: 5:dd800401bd8c 6:4a004186e638 7:ba2ed02b0c9a
1707 | json: [["dd800401bd8c79d815329277739e433e883f784e", "4a004186e63889f20cb16434fcbd72220bd1eace", "ba2ed02b0c9a56b9fdbc4e79c7e57866984d8a1f"]]
1707 | json: [["dd800401bd8c79d815329277739e433e883f784e", "4a004186e63889f20cb16434fcbd72220bd1eace", "ba2ed02b0c9a56b9fdbc4e79c7e57866984d8a1f"]]
1708 o f897c6137566
1708 o f897c6137566
1709 | Predecessors: 2:0dec01379d3b
1709 | Predecessors: 2:0dec01379d3b
1710 | semi-colon: 2:0dec01379d3b
1710 | semi-colon: 2:0dec01379d3b
1711 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1711 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1712 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1712 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1713 | x 0dec01379d3b
1713 | x 0dec01379d3b
1714 | | Predecessors: 1:471f378eab4c
1714 | | Predecessors: 1:471f378eab4c
1715 | | semi-colon: 1:471f378eab4c
1715 | | semi-colon: 1:471f378eab4c
1716 | | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1716 | | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1717 | | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1717 | | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1718 | | Successors: 3:f897c6137566; 1:471f378eab4c
1718 | | Successors: 3:f897c6137566; 1:471f378eab4c
1719 | | multi-line: 3:f897c6137566
1719 | | multi-line: 3:f897c6137566
1720 | | multi-line: 1:471f378eab4c
1720 | | multi-line: 1:471f378eab4c
1721 | | json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
1721 | | json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
1722 | x 471f378eab4c
1722 | x 471f378eab4c
1723 |/ Predecessors: 2:0dec01379d3b
1723 |/ Predecessors: 2:0dec01379d3b
1724 | semi-colon: 2:0dec01379d3b
1724 | semi-colon: 2:0dec01379d3b
1725 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1725 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1726 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1726 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1727 | Successors: 2:0dec01379d3b
1727 | Successors: 2:0dec01379d3b
1728 | multi-line: 2:0dec01379d3b
1728 | multi-line: 2:0dec01379d3b
1729 | json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
1729 | json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
1730 o ea207398892e
1730 o ea207398892e
1731
1731
1732 $ hg fatelog --hidden
1732 $ hg fatelog --hidden
1733 @ 0b997eb7ceee
1733 @ 0b997eb7ceee
1734 |
1734 |
1735 | o b18bc8331526
1735 | o b18bc8331526
1736 |/
1736 |/
1737 | o ba2ed02b0c9a
1737 | o ba2ed02b0c9a
1738 | |
1738 | |
1739 | x 4a004186e638
1739 | x 4a004186e638
1740 |/ Obsfate: rewritten using amend as 8:b18bc8331526 by test (at 1970-01-01 00:00 +0000); rewritten using amend as 9:0b997eb7ceee by test (at 1970-01-01 00:00 +0000);
1740 |/ Obsfate: rewritten using amend as 8:b18bc8331526 by test (at 1970-01-01 00:00 +0000); rewritten using amend as 9:0b997eb7ceee by test (at 1970-01-01 00:00 +0000);
1741 o dd800401bd8c
1741 o dd800401bd8c
1742 |
1742 |
1743 | x 9bd10a0775e4
1743 | x 9bd10a0775e4
1744 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a by test (at 1970-01-01 00:00 +0000);
1744 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a by test (at 1970-01-01 00:00 +0000);
1745 o f897c6137566
1745 o f897c6137566
1746 |
1746 |
1747 | x 0dec01379d3b
1747 | x 0dec01379d3b
1748 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000); rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000);
1748 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000); rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000);
1749 | x 471f378eab4c
1749 | x 471f378eab4c
1750 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000);
1750 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000);
1751 o ea207398892e
1751 o ea207398892e
1752
1752
1753 $ hg fatelogjson --hidden
1753 $ hg fatelogjson --hidden
1754 @ 0b997eb7ceee
1754 @ 0b997eb7ceee
1755 |
1755 |
1756 | o b18bc8331526
1756 | o b18bc8331526
1757 |/
1757 |/
1758 | o ba2ed02b0c9a
1758 | o ba2ed02b0c9a
1759 | |
1759 | |
1760 | x 4a004186e638
1760 | x 4a004186e638
1761 |/ Obsfate: [{"markers": [["4a004186e63889f20cb16434fcbd72220bd1eace", ["b18bc8331526a22cbb1801022bd1555bf291c48b"], 0, [["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["b18bc8331526a22cbb1801022bd1555bf291c48b"]}, {"markers": [["4a004186e63889f20cb16434fcbd72220bd1eace", ["0b997eb7ceeee06200a02f8aab185979092d514e"], 0, [["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["0b997eb7ceeee06200a02f8aab185979092d514e"]}]
1761 |/ Obsfate: [{"markers": [["4a004186e63889f20cb16434fcbd72220bd1eace", ["b18bc8331526a22cbb1801022bd1555bf291c48b"], 0, [["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["b18bc8331526a22cbb1801022bd1555bf291c48b"]}, {"markers": [["4a004186e63889f20cb16434fcbd72220bd1eace", ["0b997eb7ceeee06200a02f8aab185979092d514e"], 0, [["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["0b997eb7ceeee06200a02f8aab185979092d514e"]}]
1762 o dd800401bd8c
1762 o dd800401bd8c
1763 |
1763 |
1764 | x 9bd10a0775e4
1764 | x 9bd10a0775e4
1765 |/ Obsfate: [{"markers": [["9bd10a0775e478708cada5f176ec6de654359ce7", ["dd800401bd8c79d815329277739e433e883f784e", "4a004186e63889f20cb16434fcbd72220bd1eace", "ba2ed02b0c9a56b9fdbc4e79c7e57866984d8a1f"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["dd800401bd8c79d815329277739e433e883f784e", "4a004186e63889f20cb16434fcbd72220bd1eace", "ba2ed02b0c9a56b9fdbc4e79c7e57866984d8a1f"]}]
1765 |/ Obsfate: [{"markers": [["9bd10a0775e478708cada5f176ec6de654359ce7", ["dd800401bd8c79d815329277739e433e883f784e", "4a004186e63889f20cb16434fcbd72220bd1eace", "ba2ed02b0c9a56b9fdbc4e79c7e57866984d8a1f"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["dd800401bd8c79d815329277739e433e883f784e", "4a004186e63889f20cb16434fcbd72220bd1eace", "ba2ed02b0c9a56b9fdbc4e79c7e57866984d8a1f"]}]
1766 o f897c6137566
1766 o f897c6137566
1767 |
1767 |
1768 | x 0dec01379d3b
1768 | x 0dec01379d3b
1769 | | Obsfate: [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["f897c6137566320b081514b4c7227ecc3d384b39"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["f897c6137566320b081514b4c7227ecc3d384b39"]}, {"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["471f378eab4c5e25f6c77f785b27c936efb22874"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["471f378eab4c5e25f6c77f785b27c936efb22874"]}]
1769 | | Obsfate: [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["f897c6137566320b081514b4c7227ecc3d384b39"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["f897c6137566320b081514b4c7227ecc3d384b39"]}, {"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["471f378eab4c5e25f6c77f785b27c936efb22874"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["471f378eab4c5e25f6c77f785b27c936efb22874"]}]
1770 | x 471f378eab4c
1770 | x 471f378eab4c
1771 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]}]
1771 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]}]
1772 o ea207398892e
1772 o ea207398892e
1773
1773
1774 $ hg up --hidden 4
1774 $ hg up --hidden 4
1775 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1775 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1776 $ hg rebase -r 7 -d 8 --config extensions.rebase=
1776 $ hg rebase -r 7 -d 8 --config extensions.rebase=
1777 rebasing 7:ba2ed02b0c9a "Add A,B,C"
1777 rebasing 7:ba2ed02b0c9a "Add A,B,C"
1778 $ hg tlog
1778 $ hg tlog
1779 o eceed8f98ffc
1779 o eceed8f98ffc
1780 | Predecessors: 4:9bd10a0775e4
1780 | Predecessors: 4:9bd10a0775e4
1781 | semi-colon: 4:9bd10a0775e4
1781 | semi-colon: 4:9bd10a0775e4
1782 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1782 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1783 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1783 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1784 | o 0b997eb7ceee
1784 | o 0b997eb7ceee
1785 | | Predecessors: 4:9bd10a0775e4
1785 | | Predecessors: 4:9bd10a0775e4
1786 | | semi-colon: 4:9bd10a0775e4
1786 | | semi-colon: 4:9bd10a0775e4
1787 | | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1787 | | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1788 | | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1788 | | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1789 o | b18bc8331526
1789 o | b18bc8331526
1790 |/ Predecessors: 4:9bd10a0775e4
1790 |/ Predecessors: 4:9bd10a0775e4
1791 | semi-colon: 4:9bd10a0775e4
1791 | semi-colon: 4:9bd10a0775e4
1792 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1792 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1793 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1793 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1794 o dd800401bd8c
1794 o dd800401bd8c
1795 | Predecessors: 4:9bd10a0775e4
1795 | Predecessors: 4:9bd10a0775e4
1796 | semi-colon: 4:9bd10a0775e4
1796 | semi-colon: 4:9bd10a0775e4
1797 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1797 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
1798 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1798 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
1799 | @ 9bd10a0775e4
1799 | @ 9bd10a0775e4
1800 |/ Successors: 5:dd800401bd8c 9:0b997eb7ceee 10:eceed8f98ffc; 5:dd800401bd8c 8:b18bc8331526 10:eceed8f98ffc
1800 |/ Successors: 5:dd800401bd8c 9:0b997eb7ceee 10:eceed8f98ffc; 5:dd800401bd8c 8:b18bc8331526 10:eceed8f98ffc
1801 | multi-line: 5:dd800401bd8c 9:0b997eb7ceee 10:eceed8f98ffc
1801 | multi-line: 5:dd800401bd8c 9:0b997eb7ceee 10:eceed8f98ffc
1802 | multi-line: 5:dd800401bd8c 8:b18bc8331526 10:eceed8f98ffc
1802 | multi-line: 5:dd800401bd8c 8:b18bc8331526 10:eceed8f98ffc
1803 | json: [["dd800401bd8c79d815329277739e433e883f784e", "0b997eb7ceeee06200a02f8aab185979092d514e", "eceed8f98ffc4186032e29a6542ab98888ebf68d"], ["dd800401bd8c79d815329277739e433e883f784e", "b18bc8331526a22cbb1801022bd1555bf291c48b", "eceed8f98ffc4186032e29a6542ab98888ebf68d"]]
1803 | json: [["dd800401bd8c79d815329277739e433e883f784e", "0b997eb7ceeee06200a02f8aab185979092d514e", "eceed8f98ffc4186032e29a6542ab98888ebf68d"], ["dd800401bd8c79d815329277739e433e883f784e", "b18bc8331526a22cbb1801022bd1555bf291c48b", "eceed8f98ffc4186032e29a6542ab98888ebf68d"]]
1804 o f897c6137566
1804 o f897c6137566
1805 |
1805 |
1806 o ea207398892e
1806 o ea207398892e
1807
1807
1808
1808
1809 $ hg fatelog
1809 $ hg fatelog
1810 o eceed8f98ffc
1810 o eceed8f98ffc
1811 |
1811 |
1812 | o 0b997eb7ceee
1812 | o 0b997eb7ceee
1813 | |
1813 | |
1814 o | b18bc8331526
1814 o | b18bc8331526
1815 |/
1815 |/
1816 o dd800401bd8c
1816 o dd800401bd8c
1817 |
1817 |
1818 | @ 9bd10a0775e4
1818 | @ 9bd10a0775e4
1819 |/ Obsfate: split using amend, rebase as 5:dd800401bd8c, 9:0b997eb7ceee, 10:eceed8f98ffc by test (at 1970-01-01 00:00 +0000); split using amend, rebase as 5:dd800401bd8c, 8:b18bc8331526, 10:eceed8f98ffc by test (at 1970-01-01 00:00 +0000);
1819 |/ Obsfate: split using amend, rebase as 5:dd800401bd8c, 9:0b997eb7ceee, 10:eceed8f98ffc by test (at 1970-01-01 00:00 +0000); split using amend, rebase as 5:dd800401bd8c, 8:b18bc8331526, 10:eceed8f98ffc by test (at 1970-01-01 00:00 +0000);
1820 o f897c6137566
1820 o f897c6137566
1821 |
1821 |
1822 o ea207398892e
1822 o ea207398892e
1823
1823
1824 Check other fatelog implementations
1824 Check other fatelog implementations
1825 -----------------------------------
1825 -----------------------------------
1826
1826
1827 $ hg fatelogkw --hidden -q
1827 $ hg fatelogkw --hidden -q
1828 o eceed8f98ffc
1828 o eceed8f98ffc
1829 |
1829 |
1830 | o 0b997eb7ceee
1830 | o 0b997eb7ceee
1831 | |
1831 | |
1832 o | b18bc8331526
1832 o | b18bc8331526
1833 |/
1833 |/
1834 | x ba2ed02b0c9a
1834 | x ba2ed02b0c9a
1835 | | Obsfate: rewritten using rebase as 10:eceed8f98ffc (at 1970-01-01 00:00 +0000)
1835 | | Obsfate: rewritten using rebase as 10:eceed8f98ffc
1836 | x 4a004186e638
1836 | x 4a004186e638
1837 |/ Obsfate: rewritten using amend as 8:b18bc8331526 (at 1970-01-01 00:00 +0000)
1837 |/ Obsfate: rewritten using amend as 8:b18bc8331526
1838 | Obsfate: rewritten using amend as 9:0b997eb7ceee (at 1970-01-01 00:00 +0000)
1838 | Obsfate: rewritten using amend as 9:0b997eb7ceee
1839 o dd800401bd8c
1839 o dd800401bd8c
1840 |
1840 |
1841 | @ 9bd10a0775e4
1841 | @ 9bd10a0775e4
1842 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a (at 1970-01-01 00:00 +0000)
1842 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a
1843 o f897c6137566
1843 o f897c6137566
1844 |
1844 |
1845 | x 0dec01379d3b
1845 | x 0dec01379d3b
1846 | | Obsfate: rewritten as 3:f897c6137566 (at 1970-01-01 00:00 +0000)
1846 | | Obsfate: rewritten as 3:f897c6137566
1847 | | Obsfate: rewritten as 1:471f378eab4c (at 1970-01-01 00:00 +0000)
1847 | | Obsfate: rewritten as 1:471f378eab4c
1848 | x 471f378eab4c
1848 | x 471f378eab4c
1849 |/ Obsfate: rewritten as 2:0dec01379d3b (at 1970-01-01 00:00 +0000)
1849 |/ Obsfate: rewritten as 2:0dec01379d3b
1850 o ea207398892e
1850 o ea207398892e
1851
1851
1852 $ hg fatelogkw --hidden
1852 $ hg fatelogkw --hidden
1853 o eceed8f98ffc
1853 o eceed8f98ffc
1854 |
1854 |
1855 | o 0b997eb7ceee
1855 | o 0b997eb7ceee
1856 | |
1856 | |
1857 o | b18bc8331526
1857 o | b18bc8331526
1858 |/
1858 |/
1859 | x ba2ed02b0c9a
1859 | x ba2ed02b0c9a
1860 | | Obsfate: rewritten using rebase as 10:eceed8f98ffc (at 1970-01-01 00:00 +0000)
1860 | | Obsfate: rewritten using rebase as 10:eceed8f98ffc
1861 | x 4a004186e638
1861 | x 4a004186e638
1862 |/ Obsfate: rewritten using amend as 8:b18bc8331526 (at 1970-01-01 00:00 +0000)
1862 |/ Obsfate: rewritten using amend as 8:b18bc8331526
1863 | Obsfate: rewritten using amend as 9:0b997eb7ceee (at 1970-01-01 00:00 +0000)
1863 | Obsfate: rewritten using amend as 9:0b997eb7ceee
1864 o dd800401bd8c
1864 o dd800401bd8c
1865 |
1865 |
1866 | @ 9bd10a0775e4
1866 | @ 9bd10a0775e4
1867 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a (at 1970-01-01 00:00 +0000)
1867 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a
1868 o f897c6137566
1868 o f897c6137566
1869 |
1869 |
1870 | x 0dec01379d3b
1870 | x 0dec01379d3b
1871 | | Obsfate: rewritten as 3:f897c6137566 (at 1970-01-01 00:00 +0000)
1871 | | Obsfate: rewritten as 3:f897c6137566
1872 | | Obsfate: rewritten as 1:471f378eab4c (at 1970-01-01 00:00 +0000)
1872 | | Obsfate: rewritten as 1:471f378eab4c
1873 | x 471f378eab4c
1873 | x 471f378eab4c
1874 |/ Obsfate: rewritten as 2:0dec01379d3b (at 1970-01-01 00:00 +0000)
1874 |/ Obsfate: rewritten as 2:0dec01379d3b
1875 o ea207398892e
1875 o ea207398892e
1876
1876
1877 $ hg fatelogkw --hidden -v
1877 $ hg fatelogkw --hidden -v
1878 o eceed8f98ffc
1878 o eceed8f98ffc
1879 |
1879 |
1880 | o 0b997eb7ceee
1880 | o 0b997eb7ceee
1881 | |
1881 | |
1882 o | b18bc8331526
1882 o | b18bc8331526
1883 |/
1883 |/
1884 | x ba2ed02b0c9a
1884 | x ba2ed02b0c9a
1885 | | Obsfate: rewritten using rebase as 10:eceed8f98ffc by test (at 1970-01-01 00:00 +0000)
1885 | | Obsfate: rewritten using rebase as 10:eceed8f98ffc by test (at 1970-01-01 00:00 +0000)
1886 | x 4a004186e638
1886 | x 4a004186e638
1887 |/ Obsfate: rewritten using amend as 8:b18bc8331526 by test (at 1970-01-01 00:00 +0000)
1887 |/ Obsfate: rewritten using amend as 8:b18bc8331526 by test (at 1970-01-01 00:00 +0000)
1888 | Obsfate: rewritten using amend as 9:0b997eb7ceee by test (at 1970-01-01 00:00 +0000)
1888 | Obsfate: rewritten using amend as 9:0b997eb7ceee by test (at 1970-01-01 00:00 +0000)
1889 o dd800401bd8c
1889 o dd800401bd8c
1890 |
1890 |
1891 | @ 9bd10a0775e4
1891 | @ 9bd10a0775e4
1892 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a by test (at 1970-01-01 00:00 +0000)
1892 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a by test (at 1970-01-01 00:00 +0000)
1893 o f897c6137566
1893 o f897c6137566
1894 |
1894 |
1895 | x 0dec01379d3b
1895 | x 0dec01379d3b
1896 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000)
1896 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000)
1897 | | Obsfate: rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000)
1897 | | Obsfate: rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000)
1898 | x 471f378eab4c
1898 | x 471f378eab4c
1899 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000)
1899 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000)
1900 o ea207398892e
1900 o ea207398892e
1901
1901
1902 Test templates with pruned commits
1902 Test templates with pruned commits
1903 ==================================
1903 ==================================
1904
1904
1905 Test setup
1905 Test setup
1906 ----------
1906 ----------
1907
1907
1908 $ hg init $TESTTMP/templates-local-prune
1908 $ hg init $TESTTMP/templates-local-prune
1909 $ cd $TESTTMP/templates-local-prune
1909 $ cd $TESTTMP/templates-local-prune
1910 $ mkcommit ROOT
1910 $ mkcommit ROOT
1911 $ mkcommit A0
1911 $ mkcommit A0
1912 $ hg debugobsolete --record-parent `getid "."`
1912 $ hg debugobsolete --record-parent `getid "."`
1913 obsoleted 1 changesets
1913 obsoleted 1 changesets
1914
1914
1915 Check output
1915 Check output
1916 ------------
1916 ------------
1917
1917
1918 $ hg up "desc(A0)" --hidden
1918 $ hg up "desc(A0)" --hidden
1919 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1919 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1920 $ hg tlog
1920 $ hg tlog
1921 @ 471f378eab4c
1921 @ 471f378eab4c
1922 |
1922 |
1923 o ea207398892e
1923 o ea207398892e
1924
1924
1925 $ hg fatelog
1925 $ hg fatelog
1926 @ 471f378eab4c
1926 @ 471f378eab4c
1927 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
1927 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
1928 o ea207398892e
1928 o ea207398892e
1929
1929
1930 Test templates with multiple pruned commits
1930 Test templates with multiple pruned commits
1931 ===========================================
1931 ===========================================
1932
1932
1933 Test setup
1933 Test setup
1934 ----------
1934 ----------
1935
1935
1936 $ hg init $TESTTMP/multiple-local-prune
1936 $ hg init $TESTTMP/multiple-local-prune
1937 $ cd $TESTTMP/multiple-local-prune
1937 $ cd $TESTTMP/multiple-local-prune
1938 $ mkcommit ROOT
1938 $ mkcommit ROOT
1939 $ mkcommit A0
1939 $ mkcommit A0
1940 $ hg commit --amend -m "A1"
1940 $ hg commit --amend -m "A1"
1941 $ hg debugobsolete --record-parent `getid "."`
1941 $ hg debugobsolete --record-parent `getid "."`
1942 obsoleted 1 changesets
1942 obsoleted 1 changesets
1943
1943
1944 $ hg up -r "desc(A0)" --hidden
1944 $ hg up -r "desc(A0)" --hidden
1945 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1945 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1946 $ hg commit --amend -m "A2"
1946 $ hg commit --amend -m "A2"
1947 $ hg debugobsolete --record-parent `getid "."`
1947 $ hg debugobsolete --record-parent `getid "."`
1948 obsoleted 1 changesets
1948 obsoleted 1 changesets
1949
1949
1950 Check output
1950 Check output
1951 ------------
1951 ------------
1952
1952
1953 $ hg up "desc(A0)" --hidden
1953 $ hg up "desc(A0)" --hidden
1954 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1954 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1955 $ hg tlog
1955 $ hg tlog
1956 @ 471f378eab4c
1956 @ 471f378eab4c
1957 |
1957 |
1958 o ea207398892e
1958 o ea207398892e
1959
1959
1960 # todo: the obsfate output is not ideal
1960 # todo: the obsfate output is not ideal
1961 $ hg fatelog
1961 $ hg fatelog
1962 @ 471f378eab4c
1962 @ 471f378eab4c
1963 | Obsfate: pruned;
1963 | Obsfate: pruned;
1964 o ea207398892e
1964 o ea207398892e
1965
1965
1966 $ hg fatelog --hidden
1966 $ hg fatelog --hidden
1967 x 65b757b745b9
1967 x 65b757b745b9
1968 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
1968 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
1969 | x fdf9bde5129a
1969 | x fdf9bde5129a
1970 |/ Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
1970 |/ Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
1971 | @ 471f378eab4c
1971 | @ 471f378eab4c
1972 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000); rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000);
1972 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000); rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000);
1973 o ea207398892e
1973 o ea207398892e
1974
1974
1975 Check other fatelog implementations
1975 Check other fatelog implementations
1976 -----------------------------------
1976 -----------------------------------
1977
1977
1978 $ hg fatelogkw --hidden -q
1978 $ hg fatelogkw --hidden -q
1979 x 65b757b745b9
1979 x 65b757b745b9
1980 | Obsfate: pruned (at 1970-01-01 00:00 +0000)
1980 | Obsfate: pruned
1981 | x fdf9bde5129a
1981 | x fdf9bde5129a
1982 |/ Obsfate: pruned (at 1970-01-01 00:00 +0000)
1982 |/ Obsfate: pruned
1983 | @ 471f378eab4c
1983 | @ 471f378eab4c
1984 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a (at 1970-01-01 00:00 +0000)
1984 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a
1985 | Obsfate: rewritten using amend as 3:65b757b745b9 (at 1970-01-01 00:00 +0000)
1985 | Obsfate: rewritten using amend as 3:65b757b745b9
1986 o ea207398892e
1986 o ea207398892e
1987
1987
1988 $ hg fatelogkw --hidden
1988 $ hg fatelogkw --hidden
1989 x 65b757b745b9
1989 x 65b757b745b9
1990 | Obsfate: pruned (at 1970-01-01 00:00 +0000)
1990 | Obsfate: pruned
1991 | x fdf9bde5129a
1991 | x fdf9bde5129a
1992 |/ Obsfate: pruned (at 1970-01-01 00:00 +0000)
1992 |/ Obsfate: pruned
1993 | @ 471f378eab4c
1993 | @ 471f378eab4c
1994 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a (at 1970-01-01 00:00 +0000)
1994 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a
1995 | Obsfate: rewritten using amend as 3:65b757b745b9 (at 1970-01-01 00:00 +0000)
1995 | Obsfate: rewritten using amend as 3:65b757b745b9
1996 o ea207398892e
1996 o ea207398892e
1997
1997
1998 $ hg fatelogkw --hidden -v
1998 $ hg fatelogkw --hidden -v
1999 x 65b757b745b9
1999 x 65b757b745b9
2000 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000)
2000 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000)
2001 | x fdf9bde5129a
2001 | x fdf9bde5129a
2002 |/ Obsfate: pruned by test (at 1970-01-01 00:00 +0000)
2002 |/ Obsfate: pruned by test (at 1970-01-01 00:00 +0000)
2003 | @ 471f378eab4c
2003 | @ 471f378eab4c
2004 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000)
2004 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000)
2005 | Obsfate: rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000)
2005 | Obsfate: rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000)
2006 o ea207398892e
2006 o ea207398892e
2007
2007
2008
2008
2009 Test templates with splitted and pruned commit
2009 Test templates with splitted and pruned commit
2010 ==============================================
2010 ==============================================
2011
2011
2012 $ hg init $TESTTMP/templates-local-split-prune
2012 $ hg init $TESTTMP/templates-local-split-prune
2013 $ cd $TESTTMP/templates-local-split-prune
2013 $ cd $TESTTMP/templates-local-split-prune
2014 $ mkcommit ROOT
2014 $ mkcommit ROOT
2015 $ echo 42 >> a
2015 $ echo 42 >> a
2016 $ echo 43 >> b
2016 $ echo 43 >> b
2017 $ hg commit -A -m "A0"
2017 $ hg commit -A -m "A0"
2018 adding a
2018 adding a
2019 adding b
2019 adding b
2020 $ hg log --hidden -G
2020 $ hg log --hidden -G
2021 @ changeset: 1:471597cad322
2021 @ changeset: 1:471597cad322
2022 | tag: tip
2022 | tag: tip
2023 | user: test
2023 | user: test
2024 | date: Thu Jan 01 00:00:00 1970 +0000
2024 | date: Thu Jan 01 00:00:00 1970 +0000
2025 | summary: A0
2025 | summary: A0
2026 |
2026 |
2027 o changeset: 0:ea207398892e
2027 o changeset: 0:ea207398892e
2028 user: test
2028 user: test
2029 date: Thu Jan 01 00:00:00 1970 +0000
2029 date: Thu Jan 01 00:00:00 1970 +0000
2030 summary: ROOT
2030 summary: ROOT
2031
2031
2032 # Simulate split
2032 # Simulate split
2033 $ hg up -r "desc(ROOT)"
2033 $ hg up -r "desc(ROOT)"
2034 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
2034 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
2035 $ echo 42 >> a
2035 $ echo 42 >> a
2036 $ hg commit -A -m "A1"
2036 $ hg commit -A -m "A1"
2037 adding a
2037 adding a
2038 created new head
2038 created new head
2039 $ echo 43 >> b
2039 $ echo 43 >> b
2040 $ hg commit -A -m "A2"
2040 $ hg commit -A -m "A2"
2041 adding b
2041 adding b
2042 $ hg debugobsolete `getid "1"` `getid "2"` `getid "3"`
2042 $ hg debugobsolete `getid "1"` `getid "2"` `getid "3"`
2043 obsoleted 1 changesets
2043 obsoleted 1 changesets
2044
2044
2045 # Simulate prune
2045 # Simulate prune
2046 $ hg debugobsolete --record-parent `getid "."`
2046 $ hg debugobsolete --record-parent `getid "."`
2047 obsoleted 1 changesets
2047 obsoleted 1 changesets
2048
2048
2049 $ hg log --hidden -G
2049 $ hg log --hidden -G
2050 @ changeset: 3:0d0ef4bdf70e
2050 @ changeset: 3:0d0ef4bdf70e
2051 | tag: tip
2051 | tag: tip
2052 | user: test
2052 | user: test
2053 | date: Thu Jan 01 00:00:00 1970 +0000
2053 | date: Thu Jan 01 00:00:00 1970 +0000
2054 | summary: A2
2054 | summary: A2
2055 |
2055 |
2056 o changeset: 2:617adc3a144c
2056 o changeset: 2:617adc3a144c
2057 | parent: 0:ea207398892e
2057 | parent: 0:ea207398892e
2058 | user: test
2058 | user: test
2059 | date: Thu Jan 01 00:00:00 1970 +0000
2059 | date: Thu Jan 01 00:00:00 1970 +0000
2060 | summary: A1
2060 | summary: A1
2061 |
2061 |
2062 | x changeset: 1:471597cad322
2062 | x changeset: 1:471597cad322
2063 |/ user: test
2063 |/ user: test
2064 | date: Thu Jan 01 00:00:00 1970 +0000
2064 | date: Thu Jan 01 00:00:00 1970 +0000
2065 | summary: A0
2065 | summary: A0
2066 |
2066 |
2067 o changeset: 0:ea207398892e
2067 o changeset: 0:ea207398892e
2068 user: test
2068 user: test
2069 date: Thu Jan 01 00:00:00 1970 +0000
2069 date: Thu Jan 01 00:00:00 1970 +0000
2070 summary: ROOT
2070 summary: ROOT
2071
2071
2072 Check templates
2072 Check templates
2073 ---------------
2073 ---------------
2074
2074
2075 $ hg up 'desc("A0")' --hidden
2075 $ hg up 'desc("A0")' --hidden
2076 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2076 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2077
2077
2078 # todo: the obsfate output is not ideal
2078 # todo: the obsfate output is not ideal
2079 $ hg fatelog
2079 $ hg fatelog
2080 o 617adc3a144c
2080 o 617adc3a144c
2081 |
2081 |
2082 | @ 471597cad322
2082 | @ 471597cad322
2083 |/ Obsfate: pruned;
2083 |/ Obsfate: pruned;
2084 o ea207398892e
2084 o ea207398892e
2085
2085
2086 $ hg up -r 'desc("A2")' --hidden
2086 $ hg up -r 'desc("A2")' --hidden
2087 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2087 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2088
2088
2089 $ hg fatelog --hidden
2089 $ hg fatelog --hidden
2090 @ 0d0ef4bdf70e
2090 @ 0d0ef4bdf70e
2091 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
2091 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
2092 o 617adc3a144c
2092 o 617adc3a144c
2093 |
2093 |
2094 | x 471597cad322
2094 | x 471597cad322
2095 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e by test (at 1970-01-01 00:00 +0000);
2095 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e by test (at 1970-01-01 00:00 +0000);
2096 o ea207398892e
2096 o ea207398892e
2097
2097
2098
2098
2099 Check other fatelog implementations
2099 Check other fatelog implementations
2100 -----------------------------------
2100 -----------------------------------
2101
2101
2102 $ hg fatelogkw --hidden -q
2102 $ hg fatelogkw --hidden -q
2103 @ 0d0ef4bdf70e
2103 @ 0d0ef4bdf70e
2104 | Obsfate: pruned (at 1970-01-01 00:00 +0000)
2104 | Obsfate: pruned
2105 o 617adc3a144c
2105 o 617adc3a144c
2106 |
2106 |
2107 | x 471597cad322
2107 | x 471597cad322
2108 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e (at 1970-01-01 00:00 +0000)
2108 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e
2109 o ea207398892e
2109 o ea207398892e
2110
2110
2111 $ hg fatelogkw --hidden
2111 $ hg fatelogkw --hidden
2112 @ 0d0ef4bdf70e
2112 @ 0d0ef4bdf70e
2113 | Obsfate: pruned (at 1970-01-01 00:00 +0000)
2113 | Obsfate: pruned
2114 o 617adc3a144c
2114 o 617adc3a144c
2115 |
2115 |
2116 | x 471597cad322
2116 | x 471597cad322
2117 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e (at 1970-01-01 00:00 +0000)
2117 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e
2118 o ea207398892e
2118 o ea207398892e
2119
2119
2120 $ hg fatelogkw --hidden -v
2120 $ hg fatelogkw --hidden -v
2121 @ 0d0ef4bdf70e
2121 @ 0d0ef4bdf70e
2122 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000)
2122 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000)
2123 o 617adc3a144c
2123 o 617adc3a144c
2124 |
2124 |
2125 | x 471597cad322
2125 | x 471597cad322
2126 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e by test (at 1970-01-01 00:00 +0000)
2126 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e by test (at 1970-01-01 00:00 +0000)
2127 o ea207398892e
2127 o ea207398892e
2128
2128
@@ -1,685 +1,685 b''
1 Test file dedicated to testing the divergent troubles from obsolete changeset.
1 Test file dedicated to testing the divergent troubles from obsolete changeset.
2
2
3 This is the most complex troubles from far so we isolate it in a dedicated
3 This is the most complex troubles from far so we isolate it in a dedicated
4 file.
4 file.
5
5
6 Enable obsolete
6 Enable obsolete
7
7
8 $ cat >> $HGRCPATH << EOF
8 $ cat >> $HGRCPATH << EOF
9 > [ui]
9 > [ui]
10 > logtemplate = {rev}:{node|short} {desc}{if(obsfate, " [{join(obsfate, "; ")}]")}\n
10 > logtemplate = {rev}:{node|short} {desc}{if(obsfate, " [{join(obsfate, "; ")}]")}\n
11 > [experimental]
11 > [experimental]
12 > stabilization=createmarkers
12 > stabilization=createmarkers
13 > [extensions]
13 > [extensions]
14 > drawdag=$TESTDIR/drawdag.py
14 > drawdag=$TESTDIR/drawdag.py
15 > [alias]
15 > [alias]
16 > debugobsolete = debugobsolete -d '0 0'
16 > debugobsolete = debugobsolete -d '0 0'
17 > [phases]
17 > [phases]
18 > publish=False
18 > publish=False
19 > EOF
19 > EOF
20
20
21
21
22 $ mkcommit() {
22 $ mkcommit() {
23 > echo "$1" > "$1"
23 > echo "$1" > "$1"
24 > hg add "$1"
24 > hg add "$1"
25 > hg ci -m "$1"
25 > hg ci -m "$1"
26 > }
26 > }
27 $ getid() {
27 $ getid() {
28 > hg log --hidden -r "desc('$1')" -T '{node}\n'
28 > hg log --hidden -r "desc('$1')" -T '{node}\n'
29 > }
29 > }
30
30
31 setup repo
31 setup repo
32
32
33 $ hg init reference
33 $ hg init reference
34 $ cd reference
34 $ cd reference
35 $ mkcommit base
35 $ mkcommit base
36 $ mkcommit A_0
36 $ mkcommit A_0
37 $ hg up 0
37 $ hg up 0
38 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
38 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
39 $ mkcommit A_1
39 $ mkcommit A_1
40 created new head
40 created new head
41 $ hg up 0
41 $ hg up 0
42 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
42 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
43 $ mkcommit A_2
43 $ mkcommit A_2
44 created new head
44 created new head
45 $ hg up 0
45 $ hg up 0
46 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
46 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
47 $ cd ..
47 $ cd ..
48
48
49
49
50 $ newcase() {
50 $ newcase() {
51 > hg clone -u 0 -q reference $1
51 > hg clone -u 0 -q reference $1
52 > cd $1
52 > cd $1
53 > }
53 > }
54
54
55 direct divergence
55 direct divergence
56 -----------------
56 -----------------
57
57
58 A_1 have two direct and divergent successors A_1 and A_1
58 A_1 have two direct and divergent successors A_1 and A_1
59
59
60 $ newcase direct
60 $ newcase direct
61 $ hg debugobsolete `getid A_0` `getid A_1`
61 $ hg debugobsolete `getid A_0` `getid A_1`
62 obsoleted 1 changesets
62 obsoleted 1 changesets
63 $ hg debugobsolete `getid A_0` `getid A_2`
63 $ hg debugobsolete `getid A_0` `getid A_2`
64 $ hg log -G --hidden
64 $ hg log -G --hidden
65 o 3:392fd25390da A_2
65 o 3:392fd25390da A_2
66 |
66 |
67 | o 2:82623d38b9ba A_1
67 | o 2:82623d38b9ba A_1
68 |/
68 |/
69 | x 1:007dc284c1f8 A_0 [rewritten as 2:82623d38b9ba (at 1970-01-01 00:00 +0000); rewritten as 3:392fd25390da (at 1970-01-01 00:00 +0000)]
69 | x 1:007dc284c1f8 A_0 [rewritten as 2:82623d38b9ba; rewritten as 3:392fd25390da]
70 |/
70 |/
71 @ 0:d20a80d4def3 base
71 @ 0:d20a80d4def3 base
72
72
73 $ hg debugsuccessorssets --hidden 'all()'
73 $ hg debugsuccessorssets --hidden 'all()'
74 d20a80d4def3
74 d20a80d4def3
75 d20a80d4def3
75 d20a80d4def3
76 007dc284c1f8
76 007dc284c1f8
77 82623d38b9ba
77 82623d38b9ba
78 392fd25390da
78 392fd25390da
79 82623d38b9ba
79 82623d38b9ba
80 82623d38b9ba
80 82623d38b9ba
81 392fd25390da
81 392fd25390da
82 392fd25390da
82 392fd25390da
83 $ hg log -r 'contentdivergent()'
83 $ hg log -r 'contentdivergent()'
84 2:82623d38b9ba A_1
84 2:82623d38b9ba A_1
85 3:392fd25390da A_2
85 3:392fd25390da A_2
86 $ hg debugsuccessorssets 'all()' --closest
86 $ hg debugsuccessorssets 'all()' --closest
87 d20a80d4def3
87 d20a80d4def3
88 d20a80d4def3
88 d20a80d4def3
89 82623d38b9ba
89 82623d38b9ba
90 82623d38b9ba
90 82623d38b9ba
91 392fd25390da
91 392fd25390da
92 392fd25390da
92 392fd25390da
93 $ hg debugsuccessorssets 'all()' --closest --hidden
93 $ hg debugsuccessorssets 'all()' --closest --hidden
94 d20a80d4def3
94 d20a80d4def3
95 d20a80d4def3
95 d20a80d4def3
96 007dc284c1f8
96 007dc284c1f8
97 82623d38b9ba
97 82623d38b9ba
98 392fd25390da
98 392fd25390da
99 82623d38b9ba
99 82623d38b9ba
100 82623d38b9ba
100 82623d38b9ba
101 392fd25390da
101 392fd25390da
102 392fd25390da
102 392fd25390da
103
103
104 check that mercurial refuse to push
104 check that mercurial refuse to push
105
105
106 $ hg init ../other
106 $ hg init ../other
107 $ hg push ../other
107 $ hg push ../other
108 pushing to ../other
108 pushing to ../other
109 searching for changes
109 searching for changes
110 abort: push includes content-divergent changeset: 392fd25390da!
110 abort: push includes content-divergent changeset: 392fd25390da!
111 [255]
111 [255]
112
112
113 $ cd ..
113 $ cd ..
114
114
115
115
116 indirect divergence with known changeset
116 indirect divergence with known changeset
117 -------------------------------------------
117 -------------------------------------------
118
118
119 $ newcase indirect_known
119 $ newcase indirect_known
120 $ hg debugobsolete `getid A_0` `getid A_1`
120 $ hg debugobsolete `getid A_0` `getid A_1`
121 obsoleted 1 changesets
121 obsoleted 1 changesets
122 $ hg debugobsolete `getid A_0` `getid A_2`
122 $ hg debugobsolete `getid A_0` `getid A_2`
123 $ mkcommit A_3
123 $ mkcommit A_3
124 created new head
124 created new head
125 $ hg debugobsolete `getid A_2` `getid A_3`
125 $ hg debugobsolete `getid A_2` `getid A_3`
126 obsoleted 1 changesets
126 obsoleted 1 changesets
127 $ hg log -G --hidden
127 $ hg log -G --hidden
128 @ 4:01f36c5a8fda A_3
128 @ 4:01f36c5a8fda A_3
129 |
129 |
130 | x 3:392fd25390da A_2 [rewritten as 4:01f36c5a8fda (at 1970-01-01 00:00 +0000)]
130 | x 3:392fd25390da A_2 [rewritten as 4:01f36c5a8fda]
131 |/
131 |/
132 | o 2:82623d38b9ba A_1
132 | o 2:82623d38b9ba A_1
133 |/
133 |/
134 | x 1:007dc284c1f8 A_0 [rewritten as 2:82623d38b9ba (at 1970-01-01 00:00 +0000); rewritten as 3:392fd25390da (at 1970-01-01 00:00 +0000)]
134 | x 1:007dc284c1f8 A_0 [rewritten as 2:82623d38b9ba; rewritten as 3:392fd25390da]
135 |/
135 |/
136 o 0:d20a80d4def3 base
136 o 0:d20a80d4def3 base
137
137
138 $ hg debugsuccessorssets --hidden 'all()'
138 $ hg debugsuccessorssets --hidden 'all()'
139 d20a80d4def3
139 d20a80d4def3
140 d20a80d4def3
140 d20a80d4def3
141 007dc284c1f8
141 007dc284c1f8
142 82623d38b9ba
142 82623d38b9ba
143 01f36c5a8fda
143 01f36c5a8fda
144 82623d38b9ba
144 82623d38b9ba
145 82623d38b9ba
145 82623d38b9ba
146 392fd25390da
146 392fd25390da
147 01f36c5a8fda
147 01f36c5a8fda
148 01f36c5a8fda
148 01f36c5a8fda
149 01f36c5a8fda
149 01f36c5a8fda
150 $ hg log -r 'contentdivergent()'
150 $ hg log -r 'contentdivergent()'
151 2:82623d38b9ba A_1
151 2:82623d38b9ba A_1
152 4:01f36c5a8fda A_3
152 4:01f36c5a8fda A_3
153 $ hg debugsuccessorssets 'all()' --closest
153 $ hg debugsuccessorssets 'all()' --closest
154 d20a80d4def3
154 d20a80d4def3
155 d20a80d4def3
155 d20a80d4def3
156 82623d38b9ba
156 82623d38b9ba
157 82623d38b9ba
157 82623d38b9ba
158 01f36c5a8fda
158 01f36c5a8fda
159 01f36c5a8fda
159 01f36c5a8fda
160 $ hg debugsuccessorssets 'all()' --closest --hidden
160 $ hg debugsuccessorssets 'all()' --closest --hidden
161 d20a80d4def3
161 d20a80d4def3
162 d20a80d4def3
162 d20a80d4def3
163 007dc284c1f8
163 007dc284c1f8
164 82623d38b9ba
164 82623d38b9ba
165 392fd25390da
165 392fd25390da
166 82623d38b9ba
166 82623d38b9ba
167 82623d38b9ba
167 82623d38b9ba
168 392fd25390da
168 392fd25390da
169 392fd25390da
169 392fd25390da
170 01f36c5a8fda
170 01f36c5a8fda
171 01f36c5a8fda
171 01f36c5a8fda
172 $ cd ..
172 $ cd ..
173
173
174
174
175 indirect divergence with known changeset
175 indirect divergence with known changeset
176 -------------------------------------------
176 -------------------------------------------
177
177
178 $ newcase indirect_unknown
178 $ newcase indirect_unknown
179 $ hg debugobsolete `getid A_0` aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
179 $ hg debugobsolete `getid A_0` aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
180 obsoleted 1 changesets
180 obsoleted 1 changesets
181 $ hg debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa `getid A_1`
181 $ hg debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa `getid A_1`
182 $ hg debugobsolete `getid A_0` `getid A_2`
182 $ hg debugobsolete `getid A_0` `getid A_2`
183 $ hg log -G --hidden
183 $ hg log -G --hidden
184 o 3:392fd25390da A_2
184 o 3:392fd25390da A_2
185 |
185 |
186 | o 2:82623d38b9ba A_1
186 | o 2:82623d38b9ba A_1
187 |/
187 |/
188 | x 1:007dc284c1f8 A_0 [rewritten as 2:82623d38b9ba (at 1970-01-01 00:00 +0000); rewritten as 3:392fd25390da (at 1970-01-01 00:00 +0000)]
188 | x 1:007dc284c1f8 A_0 [rewritten as 2:82623d38b9ba; rewritten as 3:392fd25390da]
189 |/
189 |/
190 @ 0:d20a80d4def3 base
190 @ 0:d20a80d4def3 base
191
191
192 $ hg debugsuccessorssets --hidden 'all()'
192 $ hg debugsuccessorssets --hidden 'all()'
193 d20a80d4def3
193 d20a80d4def3
194 d20a80d4def3
194 d20a80d4def3
195 007dc284c1f8
195 007dc284c1f8
196 82623d38b9ba
196 82623d38b9ba
197 392fd25390da
197 392fd25390da
198 82623d38b9ba
198 82623d38b9ba
199 82623d38b9ba
199 82623d38b9ba
200 392fd25390da
200 392fd25390da
201 392fd25390da
201 392fd25390da
202 $ hg log -r 'contentdivergent()'
202 $ hg log -r 'contentdivergent()'
203 2:82623d38b9ba A_1
203 2:82623d38b9ba A_1
204 3:392fd25390da A_2
204 3:392fd25390da A_2
205 $ hg debugsuccessorssets 'all()' --closest
205 $ hg debugsuccessorssets 'all()' --closest
206 d20a80d4def3
206 d20a80d4def3
207 d20a80d4def3
207 d20a80d4def3
208 82623d38b9ba
208 82623d38b9ba
209 82623d38b9ba
209 82623d38b9ba
210 392fd25390da
210 392fd25390da
211 392fd25390da
211 392fd25390da
212 $ hg debugsuccessorssets 'all()' --closest --hidden
212 $ hg debugsuccessorssets 'all()' --closest --hidden
213 d20a80d4def3
213 d20a80d4def3
214 d20a80d4def3
214 d20a80d4def3
215 007dc284c1f8
215 007dc284c1f8
216 82623d38b9ba
216 82623d38b9ba
217 392fd25390da
217 392fd25390da
218 82623d38b9ba
218 82623d38b9ba
219 82623d38b9ba
219 82623d38b9ba
220 392fd25390da
220 392fd25390da
221 392fd25390da
221 392fd25390da
222 $ cd ..
222 $ cd ..
223
223
224 do not take unknown node in account if they are final
224 do not take unknown node in account if they are final
225 -----------------------------------------------------
225 -----------------------------------------------------
226
226
227 $ newcase final-unknown
227 $ newcase final-unknown
228 $ hg debugobsolete `getid A_0` `getid A_1`
228 $ hg debugobsolete `getid A_0` `getid A_1`
229 obsoleted 1 changesets
229 obsoleted 1 changesets
230 $ hg debugobsolete `getid A_1` `getid A_2`
230 $ hg debugobsolete `getid A_1` `getid A_2`
231 obsoleted 1 changesets
231 obsoleted 1 changesets
232 $ hg debugobsolete `getid A_0` bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
232 $ hg debugobsolete `getid A_0` bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
233 $ hg debugobsolete bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccc
233 $ hg debugobsolete bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccc
234 $ hg debugobsolete `getid A_1` dddddddddddddddddddddddddddddddddddddddd
234 $ hg debugobsolete `getid A_1` dddddddddddddddddddddddddddddddddddddddd
235
235
236 $ hg debugsuccessorssets --hidden 'desc('A_0')'
236 $ hg debugsuccessorssets --hidden 'desc('A_0')'
237 007dc284c1f8
237 007dc284c1f8
238 392fd25390da
238 392fd25390da
239 $ hg debugsuccessorssets 'desc('A_0')' --closest
239 $ hg debugsuccessorssets 'desc('A_0')' --closest
240 $ hg debugsuccessorssets 'desc('A_0')' --closest --hidden
240 $ hg debugsuccessorssets 'desc('A_0')' --closest --hidden
241 007dc284c1f8
241 007dc284c1f8
242 82623d38b9ba
242 82623d38b9ba
243
243
244 $ cd ..
244 $ cd ..
245
245
246 divergence that converge again is not divergence anymore
246 divergence that converge again is not divergence anymore
247 -----------------------------------------------------
247 -----------------------------------------------------
248
248
249 $ newcase converged_divergence
249 $ newcase converged_divergence
250 $ hg debugobsolete `getid A_0` `getid A_1`
250 $ hg debugobsolete `getid A_0` `getid A_1`
251 obsoleted 1 changesets
251 obsoleted 1 changesets
252 $ hg debugobsolete `getid A_0` `getid A_2`
252 $ hg debugobsolete `getid A_0` `getid A_2`
253 $ mkcommit A_3
253 $ mkcommit A_3
254 created new head
254 created new head
255 $ hg debugobsolete `getid A_1` `getid A_3`
255 $ hg debugobsolete `getid A_1` `getid A_3`
256 obsoleted 1 changesets
256 obsoleted 1 changesets
257 $ hg debugobsolete `getid A_2` `getid A_3`
257 $ hg debugobsolete `getid A_2` `getid A_3`
258 obsoleted 1 changesets
258 obsoleted 1 changesets
259 $ hg log -G --hidden
259 $ hg log -G --hidden
260 @ 4:01f36c5a8fda A_3
260 @ 4:01f36c5a8fda A_3
261 |
261 |
262 | x 3:392fd25390da A_2 [rewritten as 4:01f36c5a8fda (at 1970-01-01 00:00 +0000)]
262 | x 3:392fd25390da A_2 [rewritten as 4:01f36c5a8fda]
263 |/
263 |/
264 | x 2:82623d38b9ba A_1 [rewritten as 4:01f36c5a8fda (at 1970-01-01 00:00 +0000)]
264 | x 2:82623d38b9ba A_1 [rewritten as 4:01f36c5a8fda]
265 |/
265 |/
266 | x 1:007dc284c1f8 A_0 [rewritten as 2:82623d38b9ba (at 1970-01-01 00:00 +0000); rewritten as 3:392fd25390da (at 1970-01-01 00:00 +0000)]
266 | x 1:007dc284c1f8 A_0 [rewritten as 2:82623d38b9ba; rewritten as 3:392fd25390da]
267 |/
267 |/
268 o 0:d20a80d4def3 base
268 o 0:d20a80d4def3 base
269
269
270 $ hg debugsuccessorssets --hidden 'all()'
270 $ hg debugsuccessorssets --hidden 'all()'
271 d20a80d4def3
271 d20a80d4def3
272 d20a80d4def3
272 d20a80d4def3
273 007dc284c1f8
273 007dc284c1f8
274 01f36c5a8fda
274 01f36c5a8fda
275 82623d38b9ba
275 82623d38b9ba
276 01f36c5a8fda
276 01f36c5a8fda
277 392fd25390da
277 392fd25390da
278 01f36c5a8fda
278 01f36c5a8fda
279 01f36c5a8fda
279 01f36c5a8fda
280 01f36c5a8fda
280 01f36c5a8fda
281 $ hg log -r 'contentdivergent()'
281 $ hg log -r 'contentdivergent()'
282 $ hg debugsuccessorssets 'all()' --closest
282 $ hg debugsuccessorssets 'all()' --closest
283 d20a80d4def3
283 d20a80d4def3
284 d20a80d4def3
284 d20a80d4def3
285 01f36c5a8fda
285 01f36c5a8fda
286 01f36c5a8fda
286 01f36c5a8fda
287 $ hg debugsuccessorssets 'all()' --closest --hidden
287 $ hg debugsuccessorssets 'all()' --closest --hidden
288 d20a80d4def3
288 d20a80d4def3
289 d20a80d4def3
289 d20a80d4def3
290 007dc284c1f8
290 007dc284c1f8
291 82623d38b9ba
291 82623d38b9ba
292 392fd25390da
292 392fd25390da
293 82623d38b9ba
293 82623d38b9ba
294 82623d38b9ba
294 82623d38b9ba
295 392fd25390da
295 392fd25390da
296 392fd25390da
296 392fd25390da
297 01f36c5a8fda
297 01f36c5a8fda
298 01f36c5a8fda
298 01f36c5a8fda
299 $ cd ..
299 $ cd ..
300
300
301 split is not divergences
301 split is not divergences
302 -----------------------------
302 -----------------------------
303
303
304 $ newcase split
304 $ newcase split
305 $ hg debugobsolete `getid A_0` `getid A_1` `getid A_2`
305 $ hg debugobsolete `getid A_0` `getid A_1` `getid A_2`
306 obsoleted 1 changesets
306 obsoleted 1 changesets
307 $ hg log -G --hidden
307 $ hg log -G --hidden
308 o 3:392fd25390da A_2
308 o 3:392fd25390da A_2
309 |
309 |
310 | o 2:82623d38b9ba A_1
310 | o 2:82623d38b9ba A_1
311 |/
311 |/
312 | x 1:007dc284c1f8 A_0 [split as 2:82623d38b9ba, 3:392fd25390da (at 1970-01-01 00:00 +0000)]
312 | x 1:007dc284c1f8 A_0 [split as 2:82623d38b9ba, 3:392fd25390da]
313 |/
313 |/
314 @ 0:d20a80d4def3 base
314 @ 0:d20a80d4def3 base
315
315
316 $ hg debugsuccessorssets --hidden 'all()'
316 $ hg debugsuccessorssets --hidden 'all()'
317 d20a80d4def3
317 d20a80d4def3
318 d20a80d4def3
318 d20a80d4def3
319 007dc284c1f8
319 007dc284c1f8
320 82623d38b9ba 392fd25390da
320 82623d38b9ba 392fd25390da
321 82623d38b9ba
321 82623d38b9ba
322 82623d38b9ba
322 82623d38b9ba
323 392fd25390da
323 392fd25390da
324 392fd25390da
324 392fd25390da
325 $ hg log -r 'contentdivergent()'
325 $ hg log -r 'contentdivergent()'
326 $ hg debugsuccessorssets 'all()' --closest
326 $ hg debugsuccessorssets 'all()' --closest
327 d20a80d4def3
327 d20a80d4def3
328 d20a80d4def3
328 d20a80d4def3
329 82623d38b9ba
329 82623d38b9ba
330 82623d38b9ba
330 82623d38b9ba
331 392fd25390da
331 392fd25390da
332 392fd25390da
332 392fd25390da
333 $ hg debugsuccessorssets 'all()' --closest --hidden
333 $ hg debugsuccessorssets 'all()' --closest --hidden
334 d20a80d4def3
334 d20a80d4def3
335 d20a80d4def3
335 d20a80d4def3
336 007dc284c1f8
336 007dc284c1f8
337 82623d38b9ba 392fd25390da
337 82623d38b9ba 392fd25390da
338 82623d38b9ba
338 82623d38b9ba
339 82623d38b9ba
339 82623d38b9ba
340 392fd25390da
340 392fd25390da
341 392fd25390da
341 392fd25390da
342
342
343 Even when subsequent rewriting happen
343 Even when subsequent rewriting happen
344
344
345 $ mkcommit A_3
345 $ mkcommit A_3
346 created new head
346 created new head
347 $ hg debugobsolete `getid A_1` `getid A_3`
347 $ hg debugobsolete `getid A_1` `getid A_3`
348 obsoleted 1 changesets
348 obsoleted 1 changesets
349 $ hg up 0
349 $ hg up 0
350 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
350 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
351 $ mkcommit A_4
351 $ mkcommit A_4
352 created new head
352 created new head
353 $ hg debugobsolete `getid A_2` `getid A_4`
353 $ hg debugobsolete `getid A_2` `getid A_4`
354 obsoleted 1 changesets
354 obsoleted 1 changesets
355 $ hg up 0
355 $ hg up 0
356 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
356 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
357 $ mkcommit A_5
357 $ mkcommit A_5
358 created new head
358 created new head
359 $ hg debugobsolete `getid A_4` `getid A_5`
359 $ hg debugobsolete `getid A_4` `getid A_5`
360 obsoleted 1 changesets
360 obsoleted 1 changesets
361 $ hg log -G --hidden
361 $ hg log -G --hidden
362 @ 6:e442cfc57690 A_5
362 @ 6:e442cfc57690 A_5
363 |
363 |
364 | x 5:6a411f0d7a0a A_4 [rewritten as 6:e442cfc57690 (at 1970-01-01 00:00 +0000)]
364 | x 5:6a411f0d7a0a A_4 [rewritten as 6:e442cfc57690]
365 |/
365 |/
366 | o 4:01f36c5a8fda A_3
366 | o 4:01f36c5a8fda A_3
367 |/
367 |/
368 | x 3:392fd25390da A_2 [rewritten as 5:6a411f0d7a0a (at 1970-01-01 00:00 +0000)]
368 | x 3:392fd25390da A_2 [rewritten as 5:6a411f0d7a0a]
369 |/
369 |/
370 | x 2:82623d38b9ba A_1 [rewritten as 4:01f36c5a8fda (at 1970-01-01 00:00 +0000)]
370 | x 2:82623d38b9ba A_1 [rewritten as 4:01f36c5a8fda]
371 |/
371 |/
372 | x 1:007dc284c1f8 A_0 [split as 2:82623d38b9ba, 3:392fd25390da (at 1970-01-01 00:00 +0000)]
372 | x 1:007dc284c1f8 A_0 [split as 2:82623d38b9ba, 3:392fd25390da]
373 |/
373 |/
374 o 0:d20a80d4def3 base
374 o 0:d20a80d4def3 base
375
375
376 $ hg debugsuccessorssets --hidden 'all()'
376 $ hg debugsuccessorssets --hidden 'all()'
377 d20a80d4def3
377 d20a80d4def3
378 d20a80d4def3
378 d20a80d4def3
379 007dc284c1f8
379 007dc284c1f8
380 01f36c5a8fda e442cfc57690
380 01f36c5a8fda e442cfc57690
381 82623d38b9ba
381 82623d38b9ba
382 01f36c5a8fda
382 01f36c5a8fda
383 392fd25390da
383 392fd25390da
384 e442cfc57690
384 e442cfc57690
385 01f36c5a8fda
385 01f36c5a8fda
386 01f36c5a8fda
386 01f36c5a8fda
387 6a411f0d7a0a
387 6a411f0d7a0a
388 e442cfc57690
388 e442cfc57690
389 e442cfc57690
389 e442cfc57690
390 e442cfc57690
390 e442cfc57690
391 $ hg debugsuccessorssets 'all()' --closest
391 $ hg debugsuccessorssets 'all()' --closest
392 d20a80d4def3
392 d20a80d4def3
393 d20a80d4def3
393 d20a80d4def3
394 01f36c5a8fda
394 01f36c5a8fda
395 01f36c5a8fda
395 01f36c5a8fda
396 e442cfc57690
396 e442cfc57690
397 e442cfc57690
397 e442cfc57690
398 $ hg debugsuccessorssets 'all()' --closest --hidden
398 $ hg debugsuccessorssets 'all()' --closest --hidden
399 d20a80d4def3
399 d20a80d4def3
400 d20a80d4def3
400 d20a80d4def3
401 007dc284c1f8
401 007dc284c1f8
402 82623d38b9ba 392fd25390da
402 82623d38b9ba 392fd25390da
403 82623d38b9ba
403 82623d38b9ba
404 82623d38b9ba
404 82623d38b9ba
405 392fd25390da
405 392fd25390da
406 392fd25390da
406 392fd25390da
407 01f36c5a8fda
407 01f36c5a8fda
408 01f36c5a8fda
408 01f36c5a8fda
409 6a411f0d7a0a
409 6a411f0d7a0a
410 e442cfc57690
410 e442cfc57690
411 e442cfc57690
411 e442cfc57690
412 e442cfc57690
412 e442cfc57690
413 $ hg log -r 'contentdivergent()'
413 $ hg log -r 'contentdivergent()'
414
414
415 Check more complex obsolescence graft (with divergence)
415 Check more complex obsolescence graft (with divergence)
416
416
417 $ mkcommit B_0; hg up 0
417 $ mkcommit B_0; hg up 0
418 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
418 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
419 $ hg debugobsolete `getid B_0` `getid A_2`
419 $ hg debugobsolete `getid B_0` `getid A_2`
420 obsoleted 1 changesets
420 obsoleted 1 changesets
421 $ mkcommit A_7; hg up 0
421 $ mkcommit A_7; hg up 0
422 created new head
422 created new head
423 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
423 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
424 $ mkcommit A_8; hg up 0
424 $ mkcommit A_8; hg up 0
425 created new head
425 created new head
426 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
426 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
427 $ hg debugobsolete `getid A_5` `getid A_7` `getid A_8`
427 $ hg debugobsolete `getid A_5` `getid A_7` `getid A_8`
428 obsoleted 1 changesets
428 obsoleted 1 changesets
429 $ mkcommit A_9; hg up 0
429 $ mkcommit A_9; hg up 0
430 created new head
430 created new head
431 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
431 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
432 $ hg debugobsolete `getid A_5` `getid A_9`
432 $ hg debugobsolete `getid A_5` `getid A_9`
433 $ hg log -G --hidden
433 $ hg log -G --hidden
434 o 10:bed64f5d2f5a A_9
434 o 10:bed64f5d2f5a A_9
435 |
435 |
436 | o 9:14608b260df8 A_8
436 | o 9:14608b260df8 A_8
437 |/
437 |/
438 | o 8:7ae126973a96 A_7
438 | o 8:7ae126973a96 A_7
439 |/
439 |/
440 | x 7:3750ebee865d B_0 [rewritten as 3:392fd25390da (at 1970-01-01 00:00 +0000)]
440 | x 7:3750ebee865d B_0 [rewritten as 3:392fd25390da]
441 | |
441 | |
442 | x 6:e442cfc57690 A_5 [rewritten as 10:bed64f5d2f5a (at 1970-01-01 00:00 +0000); split as 8:7ae126973a96, 9:14608b260df8 (at 1970-01-01 00:00 +0000)]
442 | x 6:e442cfc57690 A_5 [rewritten as 10:bed64f5d2f5a; split as 8:7ae126973a96, 9:14608b260df8]
443 |/
443 |/
444 | x 5:6a411f0d7a0a A_4 [rewritten as 6:e442cfc57690 (at 1970-01-01 00:00 +0000)]
444 | x 5:6a411f0d7a0a A_4 [rewritten as 6:e442cfc57690]
445 |/
445 |/
446 | o 4:01f36c5a8fda A_3
446 | o 4:01f36c5a8fda A_3
447 |/
447 |/
448 | x 3:392fd25390da A_2 [rewritten as 5:6a411f0d7a0a (at 1970-01-01 00:00 +0000)]
448 | x 3:392fd25390da A_2 [rewritten as 5:6a411f0d7a0a]
449 |/
449 |/
450 | x 2:82623d38b9ba A_1 [rewritten as 4:01f36c5a8fda (at 1970-01-01 00:00 +0000)]
450 | x 2:82623d38b9ba A_1 [rewritten as 4:01f36c5a8fda]
451 |/
451 |/
452 | x 1:007dc284c1f8 A_0 [split as 2:82623d38b9ba, 3:392fd25390da (at 1970-01-01 00:00 +0000)]
452 | x 1:007dc284c1f8 A_0 [split as 2:82623d38b9ba, 3:392fd25390da]
453 |/
453 |/
454 @ 0:d20a80d4def3 base
454 @ 0:d20a80d4def3 base
455
455
456 $ hg debugsuccessorssets --hidden 'all()'
456 $ hg debugsuccessorssets --hidden 'all()'
457 d20a80d4def3
457 d20a80d4def3
458 d20a80d4def3
458 d20a80d4def3
459 007dc284c1f8
459 007dc284c1f8
460 01f36c5a8fda bed64f5d2f5a
460 01f36c5a8fda bed64f5d2f5a
461 01f36c5a8fda 7ae126973a96 14608b260df8
461 01f36c5a8fda 7ae126973a96 14608b260df8
462 82623d38b9ba
462 82623d38b9ba
463 01f36c5a8fda
463 01f36c5a8fda
464 392fd25390da
464 392fd25390da
465 bed64f5d2f5a
465 bed64f5d2f5a
466 7ae126973a96 14608b260df8
466 7ae126973a96 14608b260df8
467 01f36c5a8fda
467 01f36c5a8fda
468 01f36c5a8fda
468 01f36c5a8fda
469 6a411f0d7a0a
469 6a411f0d7a0a
470 bed64f5d2f5a
470 bed64f5d2f5a
471 7ae126973a96 14608b260df8
471 7ae126973a96 14608b260df8
472 e442cfc57690
472 e442cfc57690
473 bed64f5d2f5a
473 bed64f5d2f5a
474 7ae126973a96 14608b260df8
474 7ae126973a96 14608b260df8
475 3750ebee865d
475 3750ebee865d
476 bed64f5d2f5a
476 bed64f5d2f5a
477 7ae126973a96 14608b260df8
477 7ae126973a96 14608b260df8
478 7ae126973a96
478 7ae126973a96
479 7ae126973a96
479 7ae126973a96
480 14608b260df8
480 14608b260df8
481 14608b260df8
481 14608b260df8
482 bed64f5d2f5a
482 bed64f5d2f5a
483 bed64f5d2f5a
483 bed64f5d2f5a
484 $ hg debugsuccessorssets 'all()' --closest
484 $ hg debugsuccessorssets 'all()' --closest
485 d20a80d4def3
485 d20a80d4def3
486 d20a80d4def3
486 d20a80d4def3
487 01f36c5a8fda
487 01f36c5a8fda
488 01f36c5a8fda
488 01f36c5a8fda
489 7ae126973a96
489 7ae126973a96
490 7ae126973a96
490 7ae126973a96
491 14608b260df8
491 14608b260df8
492 14608b260df8
492 14608b260df8
493 bed64f5d2f5a
493 bed64f5d2f5a
494 bed64f5d2f5a
494 bed64f5d2f5a
495 $ hg debugsuccessorssets 'all()' --closest --hidden
495 $ hg debugsuccessorssets 'all()' --closest --hidden
496 d20a80d4def3
496 d20a80d4def3
497 d20a80d4def3
497 d20a80d4def3
498 007dc284c1f8
498 007dc284c1f8
499 82623d38b9ba 392fd25390da
499 82623d38b9ba 392fd25390da
500 82623d38b9ba
500 82623d38b9ba
501 82623d38b9ba
501 82623d38b9ba
502 392fd25390da
502 392fd25390da
503 392fd25390da
503 392fd25390da
504 01f36c5a8fda
504 01f36c5a8fda
505 01f36c5a8fda
505 01f36c5a8fda
506 6a411f0d7a0a
506 6a411f0d7a0a
507 e442cfc57690
507 e442cfc57690
508 e442cfc57690
508 e442cfc57690
509 e442cfc57690
509 e442cfc57690
510 3750ebee865d
510 3750ebee865d
511 392fd25390da
511 392fd25390da
512 7ae126973a96
512 7ae126973a96
513 7ae126973a96
513 7ae126973a96
514 14608b260df8
514 14608b260df8
515 14608b260df8
515 14608b260df8
516 bed64f5d2f5a
516 bed64f5d2f5a
517 bed64f5d2f5a
517 bed64f5d2f5a
518 $ hg log -r 'contentdivergent()'
518 $ hg log -r 'contentdivergent()'
519 4:01f36c5a8fda A_3
519 4:01f36c5a8fda A_3
520 8:7ae126973a96 A_7
520 8:7ae126973a96 A_7
521 9:14608b260df8 A_8
521 9:14608b260df8 A_8
522 10:bed64f5d2f5a A_9
522 10:bed64f5d2f5a A_9
523
523
524 fix the divergence
524 fix the divergence
525
525
526 $ mkcommit A_A; hg up 0
526 $ mkcommit A_A; hg up 0
527 created new head
527 created new head
528 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
528 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
529 $ hg debugobsolete `getid A_9` `getid A_A`
529 $ hg debugobsolete `getid A_9` `getid A_A`
530 obsoleted 1 changesets
530 obsoleted 1 changesets
531 $ hg debugobsolete `getid A_7` `getid A_A`
531 $ hg debugobsolete `getid A_7` `getid A_A`
532 obsoleted 1 changesets
532 obsoleted 1 changesets
533 $ hg debugobsolete `getid A_8` `getid A_A`
533 $ hg debugobsolete `getid A_8` `getid A_A`
534 obsoleted 1 changesets
534 obsoleted 1 changesets
535 $ hg log -G --hidden
535 $ hg log -G --hidden
536 o 11:a139f71be9da A_A
536 o 11:a139f71be9da A_A
537 |
537 |
538 | x 10:bed64f5d2f5a A_9 [rewritten as 11:a139f71be9da (at 1970-01-01 00:00 +0000)]
538 | x 10:bed64f5d2f5a A_9 [rewritten as 11:a139f71be9da]
539 |/
539 |/
540 | x 9:14608b260df8 A_8 [rewritten as 11:a139f71be9da (at 1970-01-01 00:00 +0000)]
540 | x 9:14608b260df8 A_8 [rewritten as 11:a139f71be9da]
541 |/
541 |/
542 | x 8:7ae126973a96 A_7 [rewritten as 11:a139f71be9da (at 1970-01-01 00:00 +0000)]
542 | x 8:7ae126973a96 A_7 [rewritten as 11:a139f71be9da]
543 |/
543 |/
544 | x 7:3750ebee865d B_0 [rewritten as 3:392fd25390da (at 1970-01-01 00:00 +0000)]
544 | x 7:3750ebee865d B_0 [rewritten as 3:392fd25390da]
545 | |
545 | |
546 | x 6:e442cfc57690 A_5 [rewritten as 10:bed64f5d2f5a (at 1970-01-01 00:00 +0000); split as 8:7ae126973a96, 9:14608b260df8 (at 1970-01-01 00:00 +0000)]
546 | x 6:e442cfc57690 A_5 [rewritten as 10:bed64f5d2f5a; split as 8:7ae126973a96, 9:14608b260df8]
547 |/
547 |/
548 | x 5:6a411f0d7a0a A_4 [rewritten as 6:e442cfc57690 (at 1970-01-01 00:00 +0000)]
548 | x 5:6a411f0d7a0a A_4 [rewritten as 6:e442cfc57690]
549 |/
549 |/
550 | o 4:01f36c5a8fda A_3
550 | o 4:01f36c5a8fda A_3
551 |/
551 |/
552 | x 3:392fd25390da A_2 [rewritten as 5:6a411f0d7a0a (at 1970-01-01 00:00 +0000)]
552 | x 3:392fd25390da A_2 [rewritten as 5:6a411f0d7a0a]
553 |/
553 |/
554 | x 2:82623d38b9ba A_1 [rewritten as 4:01f36c5a8fda (at 1970-01-01 00:00 +0000)]
554 | x 2:82623d38b9ba A_1 [rewritten as 4:01f36c5a8fda]
555 |/
555 |/
556 | x 1:007dc284c1f8 A_0 [split as 2:82623d38b9ba, 3:392fd25390da (at 1970-01-01 00:00 +0000)]
556 | x 1:007dc284c1f8 A_0 [split as 2:82623d38b9ba, 3:392fd25390da]
557 |/
557 |/
558 @ 0:d20a80d4def3 base
558 @ 0:d20a80d4def3 base
559
559
560 $ hg debugsuccessorssets --hidden 'all()'
560 $ hg debugsuccessorssets --hidden 'all()'
561 d20a80d4def3
561 d20a80d4def3
562 d20a80d4def3
562 d20a80d4def3
563 007dc284c1f8
563 007dc284c1f8
564 01f36c5a8fda a139f71be9da
564 01f36c5a8fda a139f71be9da
565 82623d38b9ba
565 82623d38b9ba
566 01f36c5a8fda
566 01f36c5a8fda
567 392fd25390da
567 392fd25390da
568 a139f71be9da
568 a139f71be9da
569 01f36c5a8fda
569 01f36c5a8fda
570 01f36c5a8fda
570 01f36c5a8fda
571 6a411f0d7a0a
571 6a411f0d7a0a
572 a139f71be9da
572 a139f71be9da
573 e442cfc57690
573 e442cfc57690
574 a139f71be9da
574 a139f71be9da
575 3750ebee865d
575 3750ebee865d
576 a139f71be9da
576 a139f71be9da
577 7ae126973a96
577 7ae126973a96
578 a139f71be9da
578 a139f71be9da
579 14608b260df8
579 14608b260df8
580 a139f71be9da
580 a139f71be9da
581 bed64f5d2f5a
581 bed64f5d2f5a
582 a139f71be9da
582 a139f71be9da
583 a139f71be9da
583 a139f71be9da
584 a139f71be9da
584 a139f71be9da
585 $ hg debugsuccessorssets 'all()' --closest
585 $ hg debugsuccessorssets 'all()' --closest
586 d20a80d4def3
586 d20a80d4def3
587 d20a80d4def3
587 d20a80d4def3
588 01f36c5a8fda
588 01f36c5a8fda
589 01f36c5a8fda
589 01f36c5a8fda
590 a139f71be9da
590 a139f71be9da
591 a139f71be9da
591 a139f71be9da
592 $ hg debugsuccessorssets 'all()' --closest --hidden
592 $ hg debugsuccessorssets 'all()' --closest --hidden
593 d20a80d4def3
593 d20a80d4def3
594 d20a80d4def3
594 d20a80d4def3
595 007dc284c1f8
595 007dc284c1f8
596 82623d38b9ba 392fd25390da
596 82623d38b9ba 392fd25390da
597 82623d38b9ba
597 82623d38b9ba
598 82623d38b9ba
598 82623d38b9ba
599 392fd25390da
599 392fd25390da
600 392fd25390da
600 392fd25390da
601 01f36c5a8fda
601 01f36c5a8fda
602 01f36c5a8fda
602 01f36c5a8fda
603 6a411f0d7a0a
603 6a411f0d7a0a
604 e442cfc57690
604 e442cfc57690
605 e442cfc57690
605 e442cfc57690
606 e442cfc57690
606 e442cfc57690
607 3750ebee865d
607 3750ebee865d
608 392fd25390da
608 392fd25390da
609 7ae126973a96
609 7ae126973a96
610 a139f71be9da
610 a139f71be9da
611 14608b260df8
611 14608b260df8
612 a139f71be9da
612 a139f71be9da
613 bed64f5d2f5a
613 bed64f5d2f5a
614 a139f71be9da
614 a139f71be9da
615 a139f71be9da
615 a139f71be9da
616 a139f71be9da
616 a139f71be9da
617 $ hg log -r 'contentdivergent()'
617 $ hg log -r 'contentdivergent()'
618
618
619 $ cd ..
619 $ cd ..
620
620
621
621
622 Subset does not diverge
622 Subset does not diverge
623 ------------------------------
623 ------------------------------
624
624
625 Do not report divergent successors-set if it is a subset of another
625 Do not report divergent successors-set if it is a subset of another
626 successors-set. (report [A,B] not [A] + [A,B])
626 successors-set. (report [A,B] not [A] + [A,B])
627
627
628 $ newcase subset
628 $ newcase subset
629 $ hg debugobsolete `getid A_0` `getid A_2`
629 $ hg debugobsolete `getid A_0` `getid A_2`
630 obsoleted 1 changesets
630 obsoleted 1 changesets
631 $ hg debugobsolete `getid A_0` `getid A_1` `getid A_2`
631 $ hg debugobsolete `getid A_0` `getid A_1` `getid A_2`
632 $ hg debugsuccessorssets --hidden 'desc('A_0')'
632 $ hg debugsuccessorssets --hidden 'desc('A_0')'
633 007dc284c1f8
633 007dc284c1f8
634 82623d38b9ba 392fd25390da
634 82623d38b9ba 392fd25390da
635 $ hg debugsuccessorssets 'desc('A_0')' --closest
635 $ hg debugsuccessorssets 'desc('A_0')' --closest
636 $ hg debugsuccessorssets 'desc('A_0')' --closest --hidden
636 $ hg debugsuccessorssets 'desc('A_0')' --closest --hidden
637 007dc284c1f8
637 007dc284c1f8
638 82623d38b9ba 392fd25390da
638 82623d38b9ba 392fd25390da
639
639
640 $ cd ..
640 $ cd ..
641
641
642 Use scmutil.cleanupnodes API to create divergence
642 Use scmutil.cleanupnodes API to create divergence
643
643
644 $ hg init cleanupnodes
644 $ hg init cleanupnodes
645 $ cd cleanupnodes
645 $ cd cleanupnodes
646 $ hg debugdrawdag <<'EOS'
646 $ hg debugdrawdag <<'EOS'
647 > B1 B3 B4
647 > B1 B3 B4
648 > | \|
648 > | \|
649 > A Z
649 > A Z
650 > EOS
650 > EOS
651
651
652 $ hg update -q B1
652 $ hg update -q B1
653 $ echo 3 >> B
653 $ echo 3 >> B
654 $ hg commit --amend -m B2
654 $ hg commit --amend -m B2
655 $ cat > $TESTTMP/scmutilcleanup.py <<EOF
655 $ cat > $TESTTMP/scmutilcleanup.py <<EOF
656 > from mercurial import registrar, scmutil
656 > from mercurial import registrar, scmutil
657 > cmdtable = {}
657 > cmdtable = {}
658 > command = registrar.command(cmdtable)
658 > command = registrar.command(cmdtable)
659 > @command('cleanup')
659 > @command('cleanup')
660 > def cleanup(ui, repo):
660 > def cleanup(ui, repo):
661 > def node(expr):
661 > def node(expr):
662 > unfi = repo.unfiltered()
662 > unfi = repo.unfiltered()
663 > rev = unfi.revs(expr).first()
663 > rev = unfi.revs(expr).first()
664 > return unfi.changelog.node(rev)
664 > return unfi.changelog.node(rev)
665 > with repo.wlock(), repo.lock(), repo.transaction('delayedstrip'):
665 > with repo.wlock(), repo.lock(), repo.transaction('delayedstrip'):
666 > mapping = {node('desc(B1)'): [node('desc(B3)')],
666 > mapping = {node('desc(B1)'): [node('desc(B3)')],
667 > node('desc(B3)'): [node('desc(B4)')]}
667 > node('desc(B3)'): [node('desc(B4)')]}
668 > scmutil.cleanupnodes(repo, mapping, 'test')
668 > scmutil.cleanupnodes(repo, mapping, 'test')
669 > EOF
669 > EOF
670
670
671 $ rm .hg/localtags
671 $ rm .hg/localtags
672 $ hg cleanup --config extensions.t=$TESTTMP/scmutilcleanup.py
672 $ hg cleanup --config extensions.t=$TESTTMP/scmutilcleanup.py
673 $ hg log -G -T '{rev}:{node|short} {desc} {instabilities}' -r 'sort(all(), topo)'
673 $ hg log -G -T '{rev}:{node|short} {desc} {instabilities}' -r 'sort(all(), topo)'
674 @ 5:1a2a9b5b0030 B2 content-divergent
674 @ 5:1a2a9b5b0030 B2 content-divergent
675 |
675 |
676 | o 4:70d5a63ca112 B4 content-divergent
676 | o 4:70d5a63ca112 B4 content-divergent
677 | |
677 | |
678 | o 1:48b9aae0607f Z
678 | o 1:48b9aae0607f Z
679 |
679 |
680 o 0:426bada5c675 A
680 o 0:426bada5c675 A
681
681
682 $ hg debugobsolete
682 $ hg debugobsolete
683 a178212c3433c4e77b573f6011e29affb8aefa33 1a2a9b5b0030632400aa78e00388c20f99d3ec44 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
683 a178212c3433c4e77b573f6011e29affb8aefa33 1a2a9b5b0030632400aa78e00388c20f99d3ec44 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
684 a178212c3433c4e77b573f6011e29affb8aefa33 ad6478fb94ecec98b86daae98722865d494ac561 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'test', 'user': 'test'}
684 a178212c3433c4e77b573f6011e29affb8aefa33 ad6478fb94ecec98b86daae98722865d494ac561 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'test', 'user': 'test'}
685 ad6478fb94ecec98b86daae98722865d494ac561 70d5a63ca112acb3764bc1d7320ca90ea688d671 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'test', 'user': 'test'}
685 ad6478fb94ecec98b86daae98722865d494ac561 70d5a63ca112acb3764bc1d7320ca90ea688d671 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'test', 'user': 'test'}
@@ -1,1508 +1,1508 b''
1 $ cat >> $HGRCPATH << EOF
1 $ cat >> $HGRCPATH << EOF
2 > [phases]
2 > [phases]
3 > # public changeset are not obsolete
3 > # public changeset are not obsolete
4 > publish=false
4 > publish=false
5 > [ui]
5 > [ui]
6 > logtemplate="{rev}:{node|short} ({phase}{if(obsolete, ' *{obsolete}*')}{if(instabilities, ' {instabilities}')}) [{tags} {bookmarks}] {desc|firstline}{if(obsfate, " [{join(obsfate, "; ")}]")}\n"
6 > logtemplate="{rev}:{node|short} ({phase}{if(obsolete, ' *{obsolete}*')}{if(instabilities, ' {instabilities}')}) [{tags} {bookmarks}] {desc|firstline}{if(obsfate, " [{join(obsfate, "; ")}]")}\n"
7 > EOF
7 > EOF
8 $ mkcommit() {
8 $ mkcommit() {
9 > echo "$1" > "$1"
9 > echo "$1" > "$1"
10 > hg add "$1"
10 > hg add "$1"
11 > hg ci -m "add $1"
11 > hg ci -m "add $1"
12 > }
12 > }
13 $ getid() {
13 $ getid() {
14 > hg log -T "{node}\n" --hidden -r "desc('$1')"
14 > hg log -T "{node}\n" --hidden -r "desc('$1')"
15 > }
15 > }
16
16
17 $ cat > debugkeys.py <<EOF
17 $ cat > debugkeys.py <<EOF
18 > def reposetup(ui, repo):
18 > def reposetup(ui, repo):
19 > class debugkeysrepo(repo.__class__):
19 > class debugkeysrepo(repo.__class__):
20 > def listkeys(self, namespace):
20 > def listkeys(self, namespace):
21 > ui.write('listkeys %s\n' % (namespace,))
21 > ui.write('listkeys %s\n' % (namespace,))
22 > return super(debugkeysrepo, self).listkeys(namespace)
22 > return super(debugkeysrepo, self).listkeys(namespace)
23 >
23 >
24 > if repo.local():
24 > if repo.local():
25 > repo.__class__ = debugkeysrepo
25 > repo.__class__ = debugkeysrepo
26 > EOF
26 > EOF
27
27
28 $ hg init tmpa
28 $ hg init tmpa
29 $ cd tmpa
29 $ cd tmpa
30 $ mkcommit kill_me
30 $ mkcommit kill_me
31
31
32 Checking that the feature is properly disabled
32 Checking that the feature is properly disabled
33
33
34 $ hg debugobsolete -d '0 0' `getid kill_me` -u babar
34 $ hg debugobsolete -d '0 0' `getid kill_me` -u babar
35 abort: creating obsolete markers is not enabled on this repo
35 abort: creating obsolete markers is not enabled on this repo
36 [255]
36 [255]
37
37
38 Enabling it
38 Enabling it
39
39
40 $ cat >> $HGRCPATH << EOF
40 $ cat >> $HGRCPATH << EOF
41 > [experimental]
41 > [experimental]
42 > stabilization=createmarkers,exchange
42 > stabilization=createmarkers,exchange
43 > EOF
43 > EOF
44
44
45 Killing a single changeset without replacement
45 Killing a single changeset without replacement
46
46
47 $ hg debugobsolete 0
47 $ hg debugobsolete 0
48 abort: changeset references must be full hexadecimal node identifiers
48 abort: changeset references must be full hexadecimal node identifiers
49 [255]
49 [255]
50 $ hg debugobsolete '00'
50 $ hg debugobsolete '00'
51 abort: changeset references must be full hexadecimal node identifiers
51 abort: changeset references must be full hexadecimal node identifiers
52 [255]
52 [255]
53 $ hg debugobsolete -d '0 0' `getid kill_me` -u babar
53 $ hg debugobsolete -d '0 0' `getid kill_me` -u babar
54 obsoleted 1 changesets
54 obsoleted 1 changesets
55 $ hg debugobsolete
55 $ hg debugobsolete
56 97b7c2d76b1845ed3eb988cd612611e72406cef0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'babar'}
56 97b7c2d76b1845ed3eb988cd612611e72406cef0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'babar'}
57
57
58 (test that mercurial is not confused)
58 (test that mercurial is not confused)
59
59
60 $ hg up null --quiet # having 0 as parent prevents it to be hidden
60 $ hg up null --quiet # having 0 as parent prevents it to be hidden
61 $ hg tip
61 $ hg tip
62 -1:000000000000 (public) [tip ]
62 -1:000000000000 (public) [tip ]
63 $ hg up --hidden tip --quiet
63 $ hg up --hidden tip --quiet
64
64
65 Killing a single changeset with itself should fail
65 Killing a single changeset with itself should fail
66 (simple local safeguard)
66 (simple local safeguard)
67
67
68 $ hg debugobsolete `getid kill_me` `getid kill_me`
68 $ hg debugobsolete `getid kill_me` `getid kill_me`
69 abort: bad obsmarker input: in-marker cycle with 97b7c2d76b1845ed3eb988cd612611e72406cef0
69 abort: bad obsmarker input: in-marker cycle with 97b7c2d76b1845ed3eb988cd612611e72406cef0
70 [255]
70 [255]
71
71
72 $ cd ..
72 $ cd ..
73
73
74 Killing a single changeset with replacement
74 Killing a single changeset with replacement
75 (and testing the format option)
75 (and testing the format option)
76
76
77 $ hg init tmpb
77 $ hg init tmpb
78 $ cd tmpb
78 $ cd tmpb
79 $ mkcommit a
79 $ mkcommit a
80 $ mkcommit b
80 $ mkcommit b
81 $ mkcommit original_c
81 $ mkcommit original_c
82 $ hg up "desc('b')"
82 $ hg up "desc('b')"
83 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
83 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
84 $ mkcommit new_c
84 $ mkcommit new_c
85 created new head
85 created new head
86 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
86 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
87 $ hg debugobsolete --config format.obsstore-version=0 --flag 12 `getid original_c` `getid new_c` -d '121 120'
87 $ hg debugobsolete --config format.obsstore-version=0 --flag 12 `getid original_c` `getid new_c` -d '121 120'
88 obsoleted 1 changesets
88 obsoleted 1 changesets
89 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
89 $ hg log -r 'hidden()' --template '{rev}:{node|short} {desc}\n' --hidden
90 2:245bde4270cd add original_c
90 2:245bde4270cd add original_c
91 $ hg debugrevlog -cd
91 $ hg debugrevlog -cd
92 # rev p1rev p2rev start end deltastart base p1 p2 rawsize totalsize compression heads chainlen
92 # rev p1rev p2rev start end deltastart base p1 p2 rawsize totalsize compression heads chainlen
93 0 -1 -1 0 59 0 0 0 0 58 58 0 1 0
93 0 -1 -1 0 59 0 0 0 0 58 58 0 1 0
94 1 0 -1 59 118 59 59 0 0 58 116 0 1 0
94 1 0 -1 59 118 59 59 0 0 58 116 0 1 0
95 2 1 -1 118 193 118 118 59 0 76 192 0 1 0
95 2 1 -1 118 193 118 118 59 0 76 192 0 1 0
96 3 1 -1 193 260 193 193 59 0 66 258 0 2 0
96 3 1 -1 193 260 193 193 59 0 66 258 0 2 0
97 $ hg debugobsolete
97 $ hg debugobsolete
98 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
98 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
99
99
100 (check for version number of the obsstore)
100 (check for version number of the obsstore)
101
101
102 $ dd bs=1 count=1 if=.hg/store/obsstore 2>/dev/null
102 $ dd bs=1 count=1 if=.hg/store/obsstore 2>/dev/null
103 \x00 (no-eol) (esc)
103 \x00 (no-eol) (esc)
104
104
105 do it again (it read the obsstore before adding new changeset)
105 do it again (it read the obsstore before adding new changeset)
106
106
107 $ hg up '.^'
107 $ hg up '.^'
108 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
108 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
109 $ mkcommit new_2_c
109 $ mkcommit new_2_c
110 created new head
110 created new head
111 $ hg debugobsolete -d '1337 0' `getid new_c` `getid new_2_c`
111 $ hg debugobsolete -d '1337 0' `getid new_c` `getid new_2_c`
112 obsoleted 1 changesets
112 obsoleted 1 changesets
113 $ hg debugobsolete
113 $ hg debugobsolete
114 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
114 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
115 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
115 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
116
116
117 Register two markers with a missing node
117 Register two markers with a missing node
118
118
119 $ hg up '.^'
119 $ hg up '.^'
120 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
120 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
121 $ mkcommit new_3_c
121 $ mkcommit new_3_c
122 created new head
122 created new head
123 $ hg debugobsolete -d '1338 0' `getid new_2_c` 1337133713371337133713371337133713371337
123 $ hg debugobsolete -d '1338 0' `getid new_2_c` 1337133713371337133713371337133713371337
124 obsoleted 1 changesets
124 obsoleted 1 changesets
125 $ hg debugobsolete -d '1339 0' 1337133713371337133713371337133713371337 `getid new_3_c`
125 $ hg debugobsolete -d '1339 0' 1337133713371337133713371337133713371337 `getid new_3_c`
126 $ hg debugobsolete
126 $ hg debugobsolete
127 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
127 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
128 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
128 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
129 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
129 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
130 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
130 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
131
131
132 Test the --index option of debugobsolete command
132 Test the --index option of debugobsolete command
133 $ hg debugobsolete --index
133 $ hg debugobsolete --index
134 0 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
134 0 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
135 1 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
135 1 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
136 2 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
136 2 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
137 3 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
137 3 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
138
138
139 Refuse pathological nullid successors
139 Refuse pathological nullid successors
140 $ hg debugobsolete -d '9001 0' 1337133713371337133713371337133713371337 0000000000000000000000000000000000000000
140 $ hg debugobsolete -d '9001 0' 1337133713371337133713371337133713371337 0000000000000000000000000000000000000000
141 transaction abort!
141 transaction abort!
142 rollback completed
142 rollback completed
143 abort: bad obsolescence marker detected: invalid successors nullid
143 abort: bad obsolescence marker detected: invalid successors nullid
144 [255]
144 [255]
145
145
146 Check that graphlog detect that a changeset is obsolete:
146 Check that graphlog detect that a changeset is obsolete:
147
147
148 $ hg log -G
148 $ hg log -G
149 @ 5:5601fb93a350 (draft) [tip ] add new_3_c
149 @ 5:5601fb93a350 (draft) [tip ] add new_3_c
150 |
150 |
151 o 1:7c3bad9141dc (draft) [ ] add b
151 o 1:7c3bad9141dc (draft) [ ] add b
152 |
152 |
153 o 0:1f0dee641bb7 (draft) [ ] add a
153 o 0:1f0dee641bb7 (draft) [ ] add a
154
154
155
155
156 check that heads does not report them
156 check that heads does not report them
157
157
158 $ hg heads
158 $ hg heads
159 5:5601fb93a350 (draft) [tip ] add new_3_c
159 5:5601fb93a350 (draft) [tip ] add new_3_c
160 $ hg heads --hidden
160 $ hg heads --hidden
161 5:5601fb93a350 (draft) [tip ] add new_3_c
161 5:5601fb93a350 (draft) [tip ] add new_3_c
162 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350 (between 1970-01-01 00:22 +0000 and 1970-01-01 00:22 +0000)]
162 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350]
163 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9 (at 1970-01-01 00:22 +0000)]
163 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9]
164 2:245bde4270cd (draft *obsolete*) [ ] add original_c [rewritten as 3:cdbce2fbb163 (at 1970-01-01 00:00 -0002)]
164 2:245bde4270cd (draft *obsolete*) [ ] add original_c [rewritten as 3:cdbce2fbb163]
165
165
166
166
167 check that summary does not report them
167 check that summary does not report them
168
168
169 $ hg init ../sink
169 $ hg init ../sink
170 $ echo '[paths]' >> .hg/hgrc
170 $ echo '[paths]' >> .hg/hgrc
171 $ echo 'default=../sink' >> .hg/hgrc
171 $ echo 'default=../sink' >> .hg/hgrc
172 $ hg summary --remote
172 $ hg summary --remote
173 parent: 5:5601fb93a350 tip
173 parent: 5:5601fb93a350 tip
174 add new_3_c
174 add new_3_c
175 branch: default
175 branch: default
176 commit: (clean)
176 commit: (clean)
177 update: (current)
177 update: (current)
178 phases: 3 draft
178 phases: 3 draft
179 remote: 3 outgoing
179 remote: 3 outgoing
180
180
181 $ hg summary --remote --hidden
181 $ hg summary --remote --hidden
182 parent: 5:5601fb93a350 tip
182 parent: 5:5601fb93a350 tip
183 add new_3_c
183 add new_3_c
184 branch: default
184 branch: default
185 commit: (clean)
185 commit: (clean)
186 update: 3 new changesets, 4 branch heads (merge)
186 update: 3 new changesets, 4 branch heads (merge)
187 phases: 6 draft
187 phases: 6 draft
188 remote: 3 outgoing
188 remote: 3 outgoing
189
189
190 check that various commands work well with filtering
190 check that various commands work well with filtering
191
191
192 $ hg tip
192 $ hg tip
193 5:5601fb93a350 (draft) [tip ] add new_3_c
193 5:5601fb93a350 (draft) [tip ] add new_3_c
194 $ hg log -r 6
194 $ hg log -r 6
195 abort: unknown revision '6'!
195 abort: unknown revision '6'!
196 [255]
196 [255]
197 $ hg log -r 4
197 $ hg log -r 4
198 abort: hidden revision '4'!
198 abort: hidden revision '4'!
199 (use --hidden to access hidden revisions)
199 (use --hidden to access hidden revisions)
200 [255]
200 [255]
201 $ hg debugrevspec 'rev(6)'
201 $ hg debugrevspec 'rev(6)'
202 $ hg debugrevspec 'rev(4)'
202 $ hg debugrevspec 'rev(4)'
203 $ hg debugrevspec 'null'
203 $ hg debugrevspec 'null'
204 -1
204 -1
205
205
206 Check that public changeset are not accounted as obsolete:
206 Check that public changeset are not accounted as obsolete:
207
207
208 $ hg --hidden phase --public 2
208 $ hg --hidden phase --public 2
209 $ hg log -G
209 $ hg log -G
210 @ 5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c
210 @ 5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c
211 |
211 |
212 | o 2:245bde4270cd (public) [ ] add original_c
212 | o 2:245bde4270cd (public) [ ] add original_c
213 |/
213 |/
214 o 1:7c3bad9141dc (public) [ ] add b
214 o 1:7c3bad9141dc (public) [ ] add b
215 |
215 |
216 o 0:1f0dee641bb7 (public) [ ] add a
216 o 0:1f0dee641bb7 (public) [ ] add a
217
217
218
218
219 And that bumped changeset are detected
219 And that bumped changeset are detected
220 --------------------------------------
220 --------------------------------------
221
221
222 If we didn't filtered obsolete changesets out, 3 and 4 would show up too. Also
222 If we didn't filtered obsolete changesets out, 3 and 4 would show up too. Also
223 note that the bumped changeset (5:5601fb93a350) is not a direct successor of
223 note that the bumped changeset (5:5601fb93a350) is not a direct successor of
224 the public changeset
224 the public changeset
225
225
226 $ hg log --hidden -r 'phasedivergent()'
226 $ hg log --hidden -r 'phasedivergent()'
227 5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c
227 5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c
228
228
229 And that we can't push bumped changeset
229 And that we can't push bumped changeset
230
230
231 $ hg push ../tmpa -r 0 --force #(make repo related)
231 $ hg push ../tmpa -r 0 --force #(make repo related)
232 pushing to ../tmpa
232 pushing to ../tmpa
233 searching for changes
233 searching for changes
234 warning: repository is unrelated
234 warning: repository is unrelated
235 adding changesets
235 adding changesets
236 adding manifests
236 adding manifests
237 adding file changes
237 adding file changes
238 added 1 changesets with 1 changes to 1 files (+1 heads)
238 added 1 changesets with 1 changes to 1 files (+1 heads)
239 $ hg push ../tmpa
239 $ hg push ../tmpa
240 pushing to ../tmpa
240 pushing to ../tmpa
241 searching for changes
241 searching for changes
242 abort: push includes phase-divergent changeset: 5601fb93a350!
242 abort: push includes phase-divergent changeset: 5601fb93a350!
243 [255]
243 [255]
244
244
245 Fixing "bumped" situation
245 Fixing "bumped" situation
246 We need to create a clone of 5 and add a special marker with a flag
246 We need to create a clone of 5 and add a special marker with a flag
247
247
248 $ hg summary
248 $ hg summary
249 parent: 5:5601fb93a350 tip (phase-divergent)
249 parent: 5:5601fb93a350 tip (phase-divergent)
250 add new_3_c
250 add new_3_c
251 branch: default
251 branch: default
252 commit: (clean)
252 commit: (clean)
253 update: 1 new changesets, 2 branch heads (merge)
253 update: 1 new changesets, 2 branch heads (merge)
254 phases: 1 draft
254 phases: 1 draft
255 phase-divergent: 1 changesets
255 phase-divergent: 1 changesets
256 $ hg up '5^'
256 $ hg up '5^'
257 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
257 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
258 $ hg revert -ar 5
258 $ hg revert -ar 5
259 adding new_3_c
259 adding new_3_c
260 $ hg ci -m 'add n3w_3_c'
260 $ hg ci -m 'add n3w_3_c'
261 created new head
261 created new head
262 $ hg debugobsolete -d '1338 0' --flags 1 `getid new_3_c` `getid n3w_3_c`
262 $ hg debugobsolete -d '1338 0' --flags 1 `getid new_3_c` `getid n3w_3_c`
263 obsoleted 1 changesets
263 obsoleted 1 changesets
264 $ hg log -r 'phasedivergent()'
264 $ hg log -r 'phasedivergent()'
265 $ hg log -G
265 $ hg log -G
266 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
266 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
267 |
267 |
268 | o 2:245bde4270cd (public) [ ] add original_c
268 | o 2:245bde4270cd (public) [ ] add original_c
269 |/
269 |/
270 o 1:7c3bad9141dc (public) [ ] add b
270 o 1:7c3bad9141dc (public) [ ] add b
271 |
271 |
272 o 0:1f0dee641bb7 (public) [ ] add a
272 o 0:1f0dee641bb7 (public) [ ] add a
273
273
274
274
275 Basic exclusive testing
275 Basic exclusive testing
276
276
277 $ hg log -G --hidden
277 $ hg log -G --hidden
278 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
278 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
279 |
279 |
280 | x 5:5601fb93a350 (draft *obsolete*) [ ] add new_3_c [rewritten as 6:6f9641995072 (at 1970-01-01 00:22 +0000)]
280 | x 5:5601fb93a350 (draft *obsolete*) [ ] add new_3_c [rewritten as 6:6f9641995072]
281 |/
281 |/
282 | x 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350 (between 1970-01-01 00:22 +0000 and 1970-01-01 00:22 +0000)]
282 | x 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350]
283 |/
283 |/
284 | x 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9 (at 1970-01-01 00:22 +0000)]
284 | x 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9]
285 |/
285 |/
286 | o 2:245bde4270cd (public) [ ] add original_c
286 | o 2:245bde4270cd (public) [ ] add original_c
287 |/
287 |/
288 o 1:7c3bad9141dc (public) [ ] add b
288 o 1:7c3bad9141dc (public) [ ] add b
289 |
289 |
290 o 0:1f0dee641bb7 (public) [ ] add a
290 o 0:1f0dee641bb7 (public) [ ] add a
291
291
292 $ hg debugobsolete --rev 6f9641995072
292 $ hg debugobsolete --rev 6f9641995072
293 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
293 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
294 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
294 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
295 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
295 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
296 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
296 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
297 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
297 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
298 $ hg debugobsolete --rev 6f9641995072 --exclusive
298 $ hg debugobsolete --rev 6f9641995072 --exclusive
299 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
299 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
300 $ hg debugobsolete --rev 5601fb93a350 --hidden
300 $ hg debugobsolete --rev 5601fb93a350 --hidden
301 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
301 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
302 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
302 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
303 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
303 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
304 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
304 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
305 $ hg debugobsolete --rev 5601fb93a350 --hidden --exclusive
305 $ hg debugobsolete --rev 5601fb93a350 --hidden --exclusive
306 $ hg debugobsolete --rev 5601fb93a350+6f9641995072 --hidden --exclusive
306 $ hg debugobsolete --rev 5601fb93a350+6f9641995072 --hidden --exclusive
307 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
307 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
308 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
308 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
309 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
309 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
310
310
311 $ cd ..
311 $ cd ..
312
312
313 Revision 0 is hidden
313 Revision 0 is hidden
314 --------------------
314 --------------------
315
315
316 $ hg init rev0hidden
316 $ hg init rev0hidden
317 $ cd rev0hidden
317 $ cd rev0hidden
318
318
319 $ mkcommit kill0
319 $ mkcommit kill0
320 $ hg up -q null
320 $ hg up -q null
321 $ hg debugobsolete `getid kill0`
321 $ hg debugobsolete `getid kill0`
322 obsoleted 1 changesets
322 obsoleted 1 changesets
323 $ mkcommit a
323 $ mkcommit a
324 $ mkcommit b
324 $ mkcommit b
325
325
326 Should pick the first visible revision as "repo" node
326 Should pick the first visible revision as "repo" node
327
327
328 $ hg archive ../archive-null
328 $ hg archive ../archive-null
329 $ cat ../archive-null/.hg_archival.txt
329 $ cat ../archive-null/.hg_archival.txt
330 repo: 1f0dee641bb7258c56bd60e93edfa2405381c41e
330 repo: 1f0dee641bb7258c56bd60e93edfa2405381c41e
331 node: 7c3bad9141dcb46ff89abf5f61856facd56e476c
331 node: 7c3bad9141dcb46ff89abf5f61856facd56e476c
332 branch: default
332 branch: default
333 latesttag: null
333 latesttag: null
334 latesttagdistance: 2
334 latesttagdistance: 2
335 changessincelatesttag: 2
335 changessincelatesttag: 2
336
336
337
337
338 $ cd ..
338 $ cd ..
339
339
340 Exchange Test
340 Exchange Test
341 ============================
341 ============================
342
342
343 Destination repo does not have any data
343 Destination repo does not have any data
344 ---------------------------------------
344 ---------------------------------------
345
345
346 Simple incoming test
346 Simple incoming test
347
347
348 $ hg init tmpc
348 $ hg init tmpc
349 $ cd tmpc
349 $ cd tmpc
350 $ hg incoming ../tmpb
350 $ hg incoming ../tmpb
351 comparing with ../tmpb
351 comparing with ../tmpb
352 0:1f0dee641bb7 (public) [ ] add a
352 0:1f0dee641bb7 (public) [ ] add a
353 1:7c3bad9141dc (public) [ ] add b
353 1:7c3bad9141dc (public) [ ] add b
354 2:245bde4270cd (public) [ ] add original_c
354 2:245bde4270cd (public) [ ] add original_c
355 6:6f9641995072 (draft) [tip ] add n3w_3_c
355 6:6f9641995072 (draft) [tip ] add n3w_3_c
356
356
357 Try to pull markers
357 Try to pull markers
358 (extinct changeset are excluded but marker are pushed)
358 (extinct changeset are excluded but marker are pushed)
359
359
360 $ hg pull ../tmpb
360 $ hg pull ../tmpb
361 pulling from ../tmpb
361 pulling from ../tmpb
362 requesting all changes
362 requesting all changes
363 adding changesets
363 adding changesets
364 adding manifests
364 adding manifests
365 adding file changes
365 adding file changes
366 added 4 changesets with 4 changes to 4 files (+1 heads)
366 added 4 changesets with 4 changes to 4 files (+1 heads)
367 5 new obsolescence markers
367 5 new obsolescence markers
368 new changesets 1f0dee641bb7:6f9641995072
368 new changesets 1f0dee641bb7:6f9641995072
369 (run 'hg heads' to see heads, 'hg merge' to merge)
369 (run 'hg heads' to see heads, 'hg merge' to merge)
370 $ hg debugobsolete
370 $ hg debugobsolete
371 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
371 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
372 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
372 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
373 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
373 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
374 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
374 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
375 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
375 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
376
376
377 Rollback//Transaction support
377 Rollback//Transaction support
378
378
379 $ hg debugobsolete -d '1340 0' aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
379 $ hg debugobsolete -d '1340 0' aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
380 $ hg debugobsolete
380 $ hg debugobsolete
381 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
381 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
382 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
382 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
383 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
383 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
384 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
384 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
385 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
385 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
386 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 0 (Thu Jan 01 00:22:20 1970 +0000) {'user': 'test'}
386 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 0 (Thu Jan 01 00:22:20 1970 +0000) {'user': 'test'}
387 $ hg rollback -n
387 $ hg rollback -n
388 repository tip rolled back to revision 3 (undo debugobsolete)
388 repository tip rolled back to revision 3 (undo debugobsolete)
389 $ hg rollback
389 $ hg rollback
390 repository tip rolled back to revision 3 (undo debugobsolete)
390 repository tip rolled back to revision 3 (undo debugobsolete)
391 $ hg debugobsolete
391 $ hg debugobsolete
392 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
392 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
393 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
393 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
394 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
394 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
395 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
395 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
396 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
396 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
397
397
398 $ cd ..
398 $ cd ..
399
399
400 Try to push markers
400 Try to push markers
401
401
402 $ hg init tmpd
402 $ hg init tmpd
403 $ hg -R tmpb push tmpd
403 $ hg -R tmpb push tmpd
404 pushing to tmpd
404 pushing to tmpd
405 searching for changes
405 searching for changes
406 adding changesets
406 adding changesets
407 adding manifests
407 adding manifests
408 adding file changes
408 adding file changes
409 added 4 changesets with 4 changes to 4 files (+1 heads)
409 added 4 changesets with 4 changes to 4 files (+1 heads)
410 5 new obsolescence markers
410 5 new obsolescence markers
411 $ hg -R tmpd debugobsolete | sort
411 $ hg -R tmpd debugobsolete | sort
412 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
412 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
413 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
413 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
414 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
414 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
415 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
415 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
416 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
416 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
417
417
418 Check obsolete keys are exchanged only if source has an obsolete store
418 Check obsolete keys are exchanged only if source has an obsolete store
419
419
420 $ hg init empty
420 $ hg init empty
421 $ hg --config extensions.debugkeys=debugkeys.py -R empty push tmpd
421 $ hg --config extensions.debugkeys=debugkeys.py -R empty push tmpd
422 pushing to tmpd
422 pushing to tmpd
423 listkeys phases
423 listkeys phases
424 listkeys bookmarks
424 listkeys bookmarks
425 no changes found
425 no changes found
426 listkeys phases
426 listkeys phases
427 [1]
427 [1]
428
428
429 clone support
429 clone support
430 (markers are copied and extinct changesets are included to allow hardlinks)
430 (markers are copied and extinct changesets are included to allow hardlinks)
431
431
432 $ hg clone tmpb clone-dest
432 $ hg clone tmpb clone-dest
433 updating to branch default
433 updating to branch default
434 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
434 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
435 $ hg -R clone-dest log -G --hidden
435 $ hg -R clone-dest log -G --hidden
436 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
436 @ 6:6f9641995072 (draft) [tip ] add n3w_3_c
437 |
437 |
438 | x 5:5601fb93a350 (draft *obsolete*) [ ] add new_3_c [rewritten as 6:6f9641995072 (at 1970-01-01 00:22 +0000)]
438 | x 5:5601fb93a350 (draft *obsolete*) [ ] add new_3_c [rewritten as 6:6f9641995072]
439 |/
439 |/
440 | x 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350 (between 1970-01-01 00:22 +0000 and 1970-01-01 00:22 +0000)]
440 | x 4:ca819180edb9 (draft *obsolete*) [ ] add new_2_c [rewritten as 5:5601fb93a350]
441 |/
441 |/
442 | x 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9 (at 1970-01-01 00:22 +0000)]
442 | x 3:cdbce2fbb163 (draft *obsolete*) [ ] add new_c [rewritten as 4:ca819180edb9]
443 |/
443 |/
444 | o 2:245bde4270cd (public) [ ] add original_c
444 | o 2:245bde4270cd (public) [ ] add original_c
445 |/
445 |/
446 o 1:7c3bad9141dc (public) [ ] add b
446 o 1:7c3bad9141dc (public) [ ] add b
447 |
447 |
448 o 0:1f0dee641bb7 (public) [ ] add a
448 o 0:1f0dee641bb7 (public) [ ] add a
449
449
450 $ hg -R clone-dest debugobsolete
450 $ hg -R clone-dest debugobsolete
451 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
451 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
452 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
452 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
453 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
453 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
454 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
454 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
455 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
455 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
456
456
457
457
458 Destination repo have existing data
458 Destination repo have existing data
459 ---------------------------------------
459 ---------------------------------------
460
460
461 On pull
461 On pull
462
462
463 $ hg init tmpe
463 $ hg init tmpe
464 $ cd tmpe
464 $ cd tmpe
465 $ hg debugobsolete -d '1339 0' 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00
465 $ hg debugobsolete -d '1339 0' 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00
466 $ hg pull ../tmpb
466 $ hg pull ../tmpb
467 pulling from ../tmpb
467 pulling from ../tmpb
468 requesting all changes
468 requesting all changes
469 adding changesets
469 adding changesets
470 adding manifests
470 adding manifests
471 adding file changes
471 adding file changes
472 added 4 changesets with 4 changes to 4 files (+1 heads)
472 added 4 changesets with 4 changes to 4 files (+1 heads)
473 5 new obsolescence markers
473 5 new obsolescence markers
474 new changesets 1f0dee641bb7:6f9641995072
474 new changesets 1f0dee641bb7:6f9641995072
475 (run 'hg heads' to see heads, 'hg merge' to merge)
475 (run 'hg heads' to see heads, 'hg merge' to merge)
476 $ hg debugobsolete
476 $ hg debugobsolete
477 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
477 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
478 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
478 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
479 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
479 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
480 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
480 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
481 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
481 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
482 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
482 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
483
483
484
484
485 On push
485 On push
486
486
487 $ hg push ../tmpc
487 $ hg push ../tmpc
488 pushing to ../tmpc
488 pushing to ../tmpc
489 searching for changes
489 searching for changes
490 no changes found
490 no changes found
491 1 new obsolescence markers
491 1 new obsolescence markers
492 [1]
492 [1]
493 $ hg -R ../tmpc debugobsolete
493 $ hg -R ../tmpc debugobsolete
494 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
494 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
495 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
495 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
496 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
496 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
497 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
497 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
498 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
498 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
499 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
499 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
500
500
501 detect outgoing obsolete and unstable
501 detect outgoing obsolete and unstable
502 ---------------------------------------
502 ---------------------------------------
503
503
504
504
505 $ hg log -G
505 $ hg log -G
506 o 3:6f9641995072 (draft) [tip ] add n3w_3_c
506 o 3:6f9641995072 (draft) [tip ] add n3w_3_c
507 |
507 |
508 | o 2:245bde4270cd (public) [ ] add original_c
508 | o 2:245bde4270cd (public) [ ] add original_c
509 |/
509 |/
510 o 1:7c3bad9141dc (public) [ ] add b
510 o 1:7c3bad9141dc (public) [ ] add b
511 |
511 |
512 o 0:1f0dee641bb7 (public) [ ] add a
512 o 0:1f0dee641bb7 (public) [ ] add a
513
513
514 $ hg up 'desc("n3w_3_c")'
514 $ hg up 'desc("n3w_3_c")'
515 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
515 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
516 $ mkcommit original_d
516 $ mkcommit original_d
517 $ mkcommit original_e
517 $ mkcommit original_e
518 $ hg debugobsolete --record-parents `getid original_d` -d '0 0'
518 $ hg debugobsolete --record-parents `getid original_d` -d '0 0'
519 obsoleted 1 changesets
519 obsoleted 1 changesets
520 $ hg debugobsolete | grep `getid original_d`
520 $ hg debugobsolete | grep `getid original_d`
521 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
521 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
522 $ hg log -r 'obsolete()'
522 $ hg log -r 'obsolete()'
523 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned (at 1970-01-01 00:00 +0000)]
523 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
524 $ hg summary
524 $ hg summary
525 parent: 5:cda648ca50f5 tip (orphan)
525 parent: 5:cda648ca50f5 tip (orphan)
526 add original_e
526 add original_e
527 branch: default
527 branch: default
528 commit: (clean)
528 commit: (clean)
529 update: 1 new changesets, 2 branch heads (merge)
529 update: 1 new changesets, 2 branch heads (merge)
530 phases: 3 draft
530 phases: 3 draft
531 orphan: 1 changesets
531 orphan: 1 changesets
532 $ hg log -G -r '::orphan()'
532 $ hg log -G -r '::orphan()'
533 @ 5:cda648ca50f5 (draft orphan) [tip ] add original_e
533 @ 5:cda648ca50f5 (draft orphan) [tip ] add original_e
534 |
534 |
535 x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned (at 1970-01-01 00:00 +0000)]
535 x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
536 |
536 |
537 o 3:6f9641995072 (draft) [ ] add n3w_3_c
537 o 3:6f9641995072 (draft) [ ] add n3w_3_c
538 |
538 |
539 o 1:7c3bad9141dc (public) [ ] add b
539 o 1:7c3bad9141dc (public) [ ] add b
540 |
540 |
541 o 0:1f0dee641bb7 (public) [ ] add a
541 o 0:1f0dee641bb7 (public) [ ] add a
542
542
543
543
544 refuse to push obsolete changeset
544 refuse to push obsolete changeset
545
545
546 $ hg push ../tmpc/ -r 'desc("original_d")'
546 $ hg push ../tmpc/ -r 'desc("original_d")'
547 pushing to ../tmpc/
547 pushing to ../tmpc/
548 searching for changes
548 searching for changes
549 abort: push includes obsolete changeset: 94b33453f93b!
549 abort: push includes obsolete changeset: 94b33453f93b!
550 [255]
550 [255]
551
551
552 refuse to push unstable changeset
552 refuse to push unstable changeset
553
553
554 $ hg push ../tmpc/
554 $ hg push ../tmpc/
555 pushing to ../tmpc/
555 pushing to ../tmpc/
556 searching for changes
556 searching for changes
557 abort: push includes orphan changeset: cda648ca50f5!
557 abort: push includes orphan changeset: cda648ca50f5!
558 [255]
558 [255]
559
559
560 Test that extinct changeset are properly detected
560 Test that extinct changeset are properly detected
561
561
562 $ hg log -r 'extinct()'
562 $ hg log -r 'extinct()'
563
563
564 Don't try to push extinct changeset
564 Don't try to push extinct changeset
565
565
566 $ hg init ../tmpf
566 $ hg init ../tmpf
567 $ hg out ../tmpf
567 $ hg out ../tmpf
568 comparing with ../tmpf
568 comparing with ../tmpf
569 searching for changes
569 searching for changes
570 0:1f0dee641bb7 (public) [ ] add a
570 0:1f0dee641bb7 (public) [ ] add a
571 1:7c3bad9141dc (public) [ ] add b
571 1:7c3bad9141dc (public) [ ] add b
572 2:245bde4270cd (public) [ ] add original_c
572 2:245bde4270cd (public) [ ] add original_c
573 3:6f9641995072 (draft) [ ] add n3w_3_c
573 3:6f9641995072 (draft) [ ] add n3w_3_c
574 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned (at 1970-01-01 00:00 +0000)]
574 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
575 5:cda648ca50f5 (draft orphan) [tip ] add original_e
575 5:cda648ca50f5 (draft orphan) [tip ] add original_e
576 $ hg push ../tmpf -f # -f because be push unstable too
576 $ hg push ../tmpf -f # -f because be push unstable too
577 pushing to ../tmpf
577 pushing to ../tmpf
578 searching for changes
578 searching for changes
579 adding changesets
579 adding changesets
580 adding manifests
580 adding manifests
581 adding file changes
581 adding file changes
582 added 6 changesets with 6 changes to 6 files (+1 heads)
582 added 6 changesets with 6 changes to 6 files (+1 heads)
583 7 new obsolescence markers
583 7 new obsolescence markers
584
584
585 no warning displayed
585 no warning displayed
586
586
587 $ hg push ../tmpf
587 $ hg push ../tmpf
588 pushing to ../tmpf
588 pushing to ../tmpf
589 searching for changes
589 searching for changes
590 no changes found
590 no changes found
591 [1]
591 [1]
592
592
593 Do not warn about new head when the new head is a successors of a remote one
593 Do not warn about new head when the new head is a successors of a remote one
594
594
595 $ hg log -G
595 $ hg log -G
596 @ 5:cda648ca50f5 (draft orphan) [tip ] add original_e
596 @ 5:cda648ca50f5 (draft orphan) [tip ] add original_e
597 |
597 |
598 x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned (at 1970-01-01 00:00 +0000)]
598 x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
599 |
599 |
600 o 3:6f9641995072 (draft) [ ] add n3w_3_c
600 o 3:6f9641995072 (draft) [ ] add n3w_3_c
601 |
601 |
602 | o 2:245bde4270cd (public) [ ] add original_c
602 | o 2:245bde4270cd (public) [ ] add original_c
603 |/
603 |/
604 o 1:7c3bad9141dc (public) [ ] add b
604 o 1:7c3bad9141dc (public) [ ] add b
605 |
605 |
606 o 0:1f0dee641bb7 (public) [ ] add a
606 o 0:1f0dee641bb7 (public) [ ] add a
607
607
608 $ hg up -q 'desc(n3w_3_c)'
608 $ hg up -q 'desc(n3w_3_c)'
609 $ mkcommit obsolete_e
609 $ mkcommit obsolete_e
610 created new head
610 created new head
611 $ hg debugobsolete `getid 'original_e'` `getid 'obsolete_e'` \
611 $ hg debugobsolete `getid 'original_e'` `getid 'obsolete_e'` \
612 > -u 'test <test@example.net>'
612 > -u 'test <test@example.net>'
613 obsoleted 1 changesets
613 obsoleted 1 changesets
614 $ hg outgoing ../tmpf # parasite hg outgoing testin
614 $ hg outgoing ../tmpf # parasite hg outgoing testin
615 comparing with ../tmpf
615 comparing with ../tmpf
616 searching for changes
616 searching for changes
617 6:3de5eca88c00 (draft) [tip ] add obsolete_e
617 6:3de5eca88c00 (draft) [tip ] add obsolete_e
618 $ hg push ../tmpf
618 $ hg push ../tmpf
619 pushing to ../tmpf
619 pushing to ../tmpf
620 searching for changes
620 searching for changes
621 adding changesets
621 adding changesets
622 adding manifests
622 adding manifests
623 adding file changes
623 adding file changes
624 added 1 changesets with 1 changes to 1 files (+1 heads)
624 added 1 changesets with 1 changes to 1 files (+1 heads)
625 1 new obsolescence markers
625 1 new obsolescence markers
626 obsoleted 1 changesets
626 obsoleted 1 changesets
627
627
628 test relevance computation
628 test relevance computation
629 ---------------------------------------
629 ---------------------------------------
630
630
631 Checking simple case of "marker relevance".
631 Checking simple case of "marker relevance".
632
632
633
633
634 Reminder of the repo situation
634 Reminder of the repo situation
635
635
636 $ hg log --hidden --graph
636 $ hg log --hidden --graph
637 @ 6:3de5eca88c00 (draft) [tip ] add obsolete_e
637 @ 6:3de5eca88c00 (draft) [tip ] add obsolete_e
638 |
638 |
639 | x 5:cda648ca50f5 (draft *obsolete*) [ ] add original_e [rewritten as 6:3de5eca88c00 by test <test@example.net> (at 1970-01-01 00:00 +0000)]
639 | x 5:cda648ca50f5 (draft *obsolete*) [ ] add original_e [rewritten as 6:3de5eca88c00 by test <test@example.net>]
640 | |
640 | |
641 | x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned (at 1970-01-01 00:00 +0000)]
641 | x 4:94b33453f93b (draft *obsolete*) [ ] add original_d [pruned]
642 |/
642 |/
643 o 3:6f9641995072 (draft) [ ] add n3w_3_c
643 o 3:6f9641995072 (draft) [ ] add n3w_3_c
644 |
644 |
645 | o 2:245bde4270cd (public) [ ] add original_c
645 | o 2:245bde4270cd (public) [ ] add original_c
646 |/
646 |/
647 o 1:7c3bad9141dc (public) [ ] add b
647 o 1:7c3bad9141dc (public) [ ] add b
648 |
648 |
649 o 0:1f0dee641bb7 (public) [ ] add a
649 o 0:1f0dee641bb7 (public) [ ] add a
650
650
651
651
652 List of all markers
652 List of all markers
653
653
654 $ hg debugobsolete
654 $ hg debugobsolete
655 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
655 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
656 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
656 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
657 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
657 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
658 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
658 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
659 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
659 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
660 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
660 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
661 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
661 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
662 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
662 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
663
663
664 List of changesets with no chain
664 List of changesets with no chain
665
665
666 $ hg debugobsolete --hidden --rev ::2
666 $ hg debugobsolete --hidden --rev ::2
667
667
668 List of changesets that are included on marker chain
668 List of changesets that are included on marker chain
669
669
670 $ hg debugobsolete --hidden --rev 6
670 $ hg debugobsolete --hidden --rev 6
671 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
671 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
672
672
673 List of changesets with a longer chain, (including a pruned children)
673 List of changesets with a longer chain, (including a pruned children)
674
674
675 $ hg debugobsolete --hidden --rev 3
675 $ hg debugobsolete --hidden --rev 3
676 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
676 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
677 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
677 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
678 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
678 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
679 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
679 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
680 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
680 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
681 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
681 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
682 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
682 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
683
683
684 List of both
684 List of both
685
685
686 $ hg debugobsolete --hidden --rev 3::6
686 $ hg debugobsolete --hidden --rev 3::6
687 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
687 1337133713371337133713371337133713371337 5601fb93a350734d935195fee37f4054c529ff39 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
688 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
688 1339133913391339133913391339133913391339 ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:19 1970 +0000) {'user': 'test'}
689 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
689 245bde4270cd1072a27757984f9cda8ba26f08ca cdbce2fbb16313928851e97e0d85413f3f7eb77f C (Thu Jan 01 00:00:01 1970 -0002) {'user': 'test'}
690 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
690 5601fb93a350734d935195fee37f4054c529ff39 6f96419950729f3671185b847352890f074f7557 1 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
691 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
691 94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
692 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
692 ca819180edb99ed25ceafb3e9584ac287e240b00 1337133713371337133713371337133713371337 0 (Thu Jan 01 00:22:18 1970 +0000) {'user': 'test'}
693 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
693 cda648ca50f50482b7055c0b0c4c117bba6733d9 3de5eca88c00aa039da7399a220f4a5221faa585 0 (*) {'user': 'test <test@example.net>'} (glob)
694 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
694 cdbce2fbb16313928851e97e0d85413f3f7eb77f ca819180edb99ed25ceafb3e9584ac287e240b00 0 (Thu Jan 01 00:22:17 1970 +0000) {'user': 'test'}
695
695
696 List of all markers in JSON
696 List of all markers in JSON
697
697
698 $ hg debugobsolete -Tjson
698 $ hg debugobsolete -Tjson
699 [
699 [
700 {
700 {
701 "date": [1339.0, 0],
701 "date": [1339.0, 0],
702 "flag": 0,
702 "flag": 0,
703 "metadata": {"user": "test"},
703 "metadata": {"user": "test"},
704 "prednode": "1339133913391339133913391339133913391339",
704 "prednode": "1339133913391339133913391339133913391339",
705 "succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"]
705 "succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"]
706 },
706 },
707 {
707 {
708 "date": [1339.0, 0],
708 "date": [1339.0, 0],
709 "flag": 0,
709 "flag": 0,
710 "metadata": {"user": "test"},
710 "metadata": {"user": "test"},
711 "prednode": "1337133713371337133713371337133713371337",
711 "prednode": "1337133713371337133713371337133713371337",
712 "succnodes": ["5601fb93a350734d935195fee37f4054c529ff39"]
712 "succnodes": ["5601fb93a350734d935195fee37f4054c529ff39"]
713 },
713 },
714 {
714 {
715 "date": [121.0, 120],
715 "date": [121.0, 120],
716 "flag": 12,
716 "flag": 12,
717 "metadata": {"user": "test"},
717 "metadata": {"user": "test"},
718 "prednode": "245bde4270cd1072a27757984f9cda8ba26f08ca",
718 "prednode": "245bde4270cd1072a27757984f9cda8ba26f08ca",
719 "succnodes": ["cdbce2fbb16313928851e97e0d85413f3f7eb77f"]
719 "succnodes": ["cdbce2fbb16313928851e97e0d85413f3f7eb77f"]
720 },
720 },
721 {
721 {
722 "date": [1338.0, 0],
722 "date": [1338.0, 0],
723 "flag": 1,
723 "flag": 1,
724 "metadata": {"user": "test"},
724 "metadata": {"user": "test"},
725 "prednode": "5601fb93a350734d935195fee37f4054c529ff39",
725 "prednode": "5601fb93a350734d935195fee37f4054c529ff39",
726 "succnodes": ["6f96419950729f3671185b847352890f074f7557"]
726 "succnodes": ["6f96419950729f3671185b847352890f074f7557"]
727 },
727 },
728 {
728 {
729 "date": [1338.0, 0],
729 "date": [1338.0, 0],
730 "flag": 0,
730 "flag": 0,
731 "metadata": {"user": "test"},
731 "metadata": {"user": "test"},
732 "prednode": "ca819180edb99ed25ceafb3e9584ac287e240b00",
732 "prednode": "ca819180edb99ed25ceafb3e9584ac287e240b00",
733 "succnodes": ["1337133713371337133713371337133713371337"]
733 "succnodes": ["1337133713371337133713371337133713371337"]
734 },
734 },
735 {
735 {
736 "date": [1337.0, 0],
736 "date": [1337.0, 0],
737 "flag": 0,
737 "flag": 0,
738 "metadata": {"user": "test"},
738 "metadata": {"user": "test"},
739 "prednode": "cdbce2fbb16313928851e97e0d85413f3f7eb77f",
739 "prednode": "cdbce2fbb16313928851e97e0d85413f3f7eb77f",
740 "succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"]
740 "succnodes": ["ca819180edb99ed25ceafb3e9584ac287e240b00"]
741 },
741 },
742 {
742 {
743 "date": [0.0, 0],
743 "date": [0.0, 0],
744 "flag": 0,
744 "flag": 0,
745 "metadata": {"user": "test"},
745 "metadata": {"user": "test"},
746 "parentnodes": ["6f96419950729f3671185b847352890f074f7557"],
746 "parentnodes": ["6f96419950729f3671185b847352890f074f7557"],
747 "prednode": "94b33453f93bdb8d457ef9b770851a618bf413e1",
747 "prednode": "94b33453f93bdb8d457ef9b770851a618bf413e1",
748 "succnodes": []
748 "succnodes": []
749 },
749 },
750 {
750 {
751 "date": *, (glob)
751 "date": *, (glob)
752 "flag": 0,
752 "flag": 0,
753 "metadata": {"user": "test <test@example.net>"},
753 "metadata": {"user": "test <test@example.net>"},
754 "prednode": "cda648ca50f50482b7055c0b0c4c117bba6733d9",
754 "prednode": "cda648ca50f50482b7055c0b0c4c117bba6733d9",
755 "succnodes": ["3de5eca88c00aa039da7399a220f4a5221faa585"]
755 "succnodes": ["3de5eca88c00aa039da7399a220f4a5221faa585"]
756 }
756 }
757 ]
757 ]
758
758
759 Template keywords
759 Template keywords
760
760
761 $ hg debugobsolete -r6 -T '{succnodes % "{node|short}"} {date|shortdate}\n'
761 $ hg debugobsolete -r6 -T '{succnodes % "{node|short}"} {date|shortdate}\n'
762 3de5eca88c00 ????-??-?? (glob)
762 3de5eca88c00 ????-??-?? (glob)
763 $ hg debugobsolete -r6 -T '{join(metadata % "{key}={value}", " ")}\n'
763 $ hg debugobsolete -r6 -T '{join(metadata % "{key}={value}", " ")}\n'
764 user=test <test@example.net>
764 user=test <test@example.net>
765 $ hg debugobsolete -r6 -T '{metadata}\n{metadata}\n'
765 $ hg debugobsolete -r6 -T '{metadata}\n{metadata}\n'
766 'user': 'test <test@example.net>'
766 'user': 'test <test@example.net>'
767 'user': 'test <test@example.net>'
767 'user': 'test <test@example.net>'
768 $ hg debugobsolete -r6 -T '{succnodes}\n{succnodes}\n'
768 $ hg debugobsolete -r6 -T '{succnodes}\n{succnodes}\n'
769 3de5eca88c00aa039da7399a220f4a5221faa585
769 3de5eca88c00aa039da7399a220f4a5221faa585
770 3de5eca88c00aa039da7399a220f4a5221faa585
770 3de5eca88c00aa039da7399a220f4a5221faa585
771 $ hg debugobsolete -r6 -T '{flag} {get(metadata, "user")}\n'
771 $ hg debugobsolete -r6 -T '{flag} {get(metadata, "user")}\n'
772 0 test <test@example.net>
772 0 test <test@example.net>
773
773
774 Test the debug output for exchange
774 Test the debug output for exchange
775 ----------------------------------
775 ----------------------------------
776
776
777 $ hg pull ../tmpb --config 'experimental.obsmarkers-exchange-debug=True' # bundle2
777 $ hg pull ../tmpb --config 'experimental.obsmarkers-exchange-debug=True' # bundle2
778 pulling from ../tmpb
778 pulling from ../tmpb
779 searching for changes
779 searching for changes
780 no changes found
780 no changes found
781 obsmarker-exchange: 346 bytes received
781 obsmarker-exchange: 346 bytes received
782
782
783 check hgweb does not explode
783 check hgweb does not explode
784 ====================================
784 ====================================
785
785
786 $ hg unbundle $TESTDIR/bundles/hgweb+obs.hg
786 $ hg unbundle $TESTDIR/bundles/hgweb+obs.hg
787 adding changesets
787 adding changesets
788 adding manifests
788 adding manifests
789 adding file changes
789 adding file changes
790 added 62 changesets with 63 changes to 9 files (+60 heads)
790 added 62 changesets with 63 changes to 9 files (+60 heads)
791 new changesets 50c51b361e60:c15e9edfca13
791 new changesets 50c51b361e60:c15e9edfca13
792 (run 'hg heads .' to see heads, 'hg merge' to merge)
792 (run 'hg heads .' to see heads, 'hg merge' to merge)
793 $ for node in `hg log -r 'desc(babar_)' --template '{node}\n'`;
793 $ for node in `hg log -r 'desc(babar_)' --template '{node}\n'`;
794 > do
794 > do
795 > hg debugobsolete $node
795 > hg debugobsolete $node
796 > done
796 > done
797 obsoleted 1 changesets
797 obsoleted 1 changesets
798 obsoleted 1 changesets
798 obsoleted 1 changesets
799 obsoleted 1 changesets
799 obsoleted 1 changesets
800 obsoleted 1 changesets
800 obsoleted 1 changesets
801 obsoleted 1 changesets
801 obsoleted 1 changesets
802 obsoleted 1 changesets
802 obsoleted 1 changesets
803 obsoleted 1 changesets
803 obsoleted 1 changesets
804 obsoleted 1 changesets
804 obsoleted 1 changesets
805 obsoleted 1 changesets
805 obsoleted 1 changesets
806 obsoleted 1 changesets
806 obsoleted 1 changesets
807 obsoleted 1 changesets
807 obsoleted 1 changesets
808 obsoleted 1 changesets
808 obsoleted 1 changesets
809 obsoleted 1 changesets
809 obsoleted 1 changesets
810 obsoleted 1 changesets
810 obsoleted 1 changesets
811 obsoleted 1 changesets
811 obsoleted 1 changesets
812 obsoleted 1 changesets
812 obsoleted 1 changesets
813 obsoleted 1 changesets
813 obsoleted 1 changesets
814 obsoleted 1 changesets
814 obsoleted 1 changesets
815 obsoleted 1 changesets
815 obsoleted 1 changesets
816 obsoleted 1 changesets
816 obsoleted 1 changesets
817 obsoleted 1 changesets
817 obsoleted 1 changesets
818 obsoleted 1 changesets
818 obsoleted 1 changesets
819 obsoleted 1 changesets
819 obsoleted 1 changesets
820 obsoleted 1 changesets
820 obsoleted 1 changesets
821 obsoleted 1 changesets
821 obsoleted 1 changesets
822 obsoleted 1 changesets
822 obsoleted 1 changesets
823 obsoleted 1 changesets
823 obsoleted 1 changesets
824 obsoleted 1 changesets
824 obsoleted 1 changesets
825 obsoleted 1 changesets
825 obsoleted 1 changesets
826 obsoleted 1 changesets
826 obsoleted 1 changesets
827 obsoleted 1 changesets
827 obsoleted 1 changesets
828 obsoleted 1 changesets
828 obsoleted 1 changesets
829 obsoleted 1 changesets
829 obsoleted 1 changesets
830 obsoleted 1 changesets
830 obsoleted 1 changesets
831 obsoleted 1 changesets
831 obsoleted 1 changesets
832 obsoleted 1 changesets
832 obsoleted 1 changesets
833 obsoleted 1 changesets
833 obsoleted 1 changesets
834 obsoleted 1 changesets
834 obsoleted 1 changesets
835 obsoleted 1 changesets
835 obsoleted 1 changesets
836 obsoleted 1 changesets
836 obsoleted 1 changesets
837 obsoleted 1 changesets
837 obsoleted 1 changesets
838 obsoleted 1 changesets
838 obsoleted 1 changesets
839 obsoleted 1 changesets
839 obsoleted 1 changesets
840 obsoleted 1 changesets
840 obsoleted 1 changesets
841 obsoleted 1 changesets
841 obsoleted 1 changesets
842 obsoleted 1 changesets
842 obsoleted 1 changesets
843 obsoleted 1 changesets
843 obsoleted 1 changesets
844 obsoleted 1 changesets
844 obsoleted 1 changesets
845 obsoleted 1 changesets
845 obsoleted 1 changesets
846 obsoleted 1 changesets
846 obsoleted 1 changesets
847 obsoleted 1 changesets
847 obsoleted 1 changesets
848 obsoleted 1 changesets
848 obsoleted 1 changesets
849 obsoleted 1 changesets
849 obsoleted 1 changesets
850 obsoleted 1 changesets
850 obsoleted 1 changesets
851 obsoleted 1 changesets
851 obsoleted 1 changesets
852 obsoleted 1 changesets
852 obsoleted 1 changesets
853 obsoleted 1 changesets
853 obsoleted 1 changesets
854 obsoleted 1 changesets
854 obsoleted 1 changesets
855 obsoleted 1 changesets
855 obsoleted 1 changesets
856 obsoleted 1 changesets
856 obsoleted 1 changesets
857 $ hg up tip
857 $ hg up tip
858 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
858 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
859
859
860 #if serve
860 #if serve
861
861
862 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
862 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
863 $ cat hg.pid >> $DAEMON_PIDS
863 $ cat hg.pid >> $DAEMON_PIDS
864
864
865 check changelog view
865 check changelog view
866
866
867 $ get-with-headers.py --headeronly localhost:$HGPORT 'shortlog/'
867 $ get-with-headers.py --headeronly localhost:$HGPORT 'shortlog/'
868 200 Script output follows
868 200 Script output follows
869
869
870 check graph view
870 check graph view
871
871
872 $ get-with-headers.py --headeronly localhost:$HGPORT 'graph'
872 $ get-with-headers.py --headeronly localhost:$HGPORT 'graph'
873 200 Script output follows
873 200 Script output follows
874
874
875 check filelog view
875 check filelog view
876
876
877 $ get-with-headers.py --headeronly localhost:$HGPORT 'log/'`hg log -r . -T "{node}"`/'babar'
877 $ get-with-headers.py --headeronly localhost:$HGPORT 'log/'`hg log -r . -T "{node}"`/'babar'
878 200 Script output follows
878 200 Script output follows
879
879
880 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/68'
880 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/68'
881 200 Script output follows
881 200 Script output follows
882 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
882 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
883 404 Not Found
883 404 Not Found
884 [1]
884 [1]
885
885
886 check that web.view config option:
886 check that web.view config option:
887
887
888 $ killdaemons.py hg.pid
888 $ killdaemons.py hg.pid
889 $ cat >> .hg/hgrc << EOF
889 $ cat >> .hg/hgrc << EOF
890 > [web]
890 > [web]
891 > view=all
891 > view=all
892 > EOF
892 > EOF
893 $ wait
893 $ wait
894 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
894 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
895 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
895 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
896 200 Script output follows
896 200 Script output follows
897 $ killdaemons.py hg.pid
897 $ killdaemons.py hg.pid
898
898
899 Checking _enable=False warning if obsolete marker exists
899 Checking _enable=False warning if obsolete marker exists
900
900
901 $ echo '[experimental]' >> $HGRCPATH
901 $ echo '[experimental]' >> $HGRCPATH
902 $ echo "stabilization=" >> $HGRCPATH
902 $ echo "stabilization=" >> $HGRCPATH
903 $ hg log -r tip
903 $ hg log -r tip
904 obsolete feature not enabled but 68 markers found!
904 obsolete feature not enabled but 68 markers found!
905 68:c15e9edfca13 (draft) [tip ] add celestine
905 68:c15e9edfca13 (draft) [tip ] add celestine
906
906
907 reenable for later test
907 reenable for later test
908
908
909 $ echo '[experimental]' >> $HGRCPATH
909 $ echo '[experimental]' >> $HGRCPATH
910 $ echo "stabilization=createmarkers,exchange" >> $HGRCPATH
910 $ echo "stabilization=createmarkers,exchange" >> $HGRCPATH
911
911
912 $ rm hg.pid access.log errors.log
912 $ rm hg.pid access.log errors.log
913 #endif
913 #endif
914
914
915 Several troubles on the same changeset (create an unstable and bumped changeset)
915 Several troubles on the same changeset (create an unstable and bumped changeset)
916
916
917 $ hg debugobsolete `getid obsolete_e`
917 $ hg debugobsolete `getid obsolete_e`
918 obsoleted 1 changesets
918 obsoleted 1 changesets
919 $ hg debugobsolete `getid original_c` `getid babar`
919 $ hg debugobsolete `getid original_c` `getid babar`
920 $ hg log --config ui.logtemplate= -r 'phasedivergent() and orphan()'
920 $ hg log --config ui.logtemplate= -r 'phasedivergent() and orphan()'
921 changeset: 7:50c51b361e60
921 changeset: 7:50c51b361e60
922 user: test
922 user: test
923 date: Thu Jan 01 00:00:00 1970 +0000
923 date: Thu Jan 01 00:00:00 1970 +0000
924 instability: orphan, phase-divergent
924 instability: orphan, phase-divergent
925 summary: add babar
925 summary: add babar
926
926
927
927
928 test the "obsolete" templatekw
928 test the "obsolete" templatekw
929
929
930 $ hg log -r 'obsolete()'
930 $ hg log -r 'obsolete()'
931 6:3de5eca88c00 (draft *obsolete*) [ ] add obsolete_e [pruned (at 1970-01-01 00:00 +0000)]
931 6:3de5eca88c00 (draft *obsolete*) [ ] add obsolete_e [pruned]
932
932
933 test the "troubles" templatekw
933 test the "troubles" templatekw
934
934
935 $ hg log -r 'phasedivergent() and orphan()'
935 $ hg log -r 'phasedivergent() and orphan()'
936 7:50c51b361e60 (draft orphan phase-divergent) [ ] add babar
936 7:50c51b361e60 (draft orphan phase-divergent) [ ] add babar
937
937
938 test the default cmdline template
938 test the default cmdline template
939
939
940 $ hg log -T default -r 'phasedivergent()'
940 $ hg log -T default -r 'phasedivergent()'
941 changeset: 7:50c51b361e60
941 changeset: 7:50c51b361e60
942 user: test
942 user: test
943 date: Thu Jan 01 00:00:00 1970 +0000
943 date: Thu Jan 01 00:00:00 1970 +0000
944 instability: orphan, phase-divergent
944 instability: orphan, phase-divergent
945 summary: add babar
945 summary: add babar
946
946
947 $ hg log -T default -r 'obsolete()'
947 $ hg log -T default -r 'obsolete()'
948 changeset: 6:3de5eca88c00
948 changeset: 6:3de5eca88c00
949 parent: 3:6f9641995072
949 parent: 3:6f9641995072
950 user: test
950 user: test
951 date: Thu Jan 01 00:00:00 1970 +0000
951 date: Thu Jan 01 00:00:00 1970 +0000
952 summary: add obsolete_e
952 summary: add obsolete_e
953
953
954
954
955 test the obsolete labels
955 test the obsolete labels
956
956
957 $ hg log --config ui.logtemplate= --color=debug -r 'phasedivergent()'
957 $ hg log --config ui.logtemplate= --color=debug -r 'phasedivergent()'
958 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
958 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
959 [log.user|user: test]
959 [log.user|user: test]
960 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
960 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
961 [log.instability|instability: orphan, phase-divergent]
961 [log.instability|instability: orphan, phase-divergent]
962 [log.summary|summary: add babar]
962 [log.summary|summary: add babar]
963
963
964
964
965 $ hg log -T default -r 'phasedivergent()' --color=debug
965 $ hg log -T default -r 'phasedivergent()' --color=debug
966 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
966 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
967 [log.user|user: test]
967 [log.user|user: test]
968 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
968 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
969 [log.instability|instability: orphan, phase-divergent]
969 [log.instability|instability: orphan, phase-divergent]
970 [log.summary|summary: add babar]
970 [log.summary|summary: add babar]
971
971
972
972
973 $ hg log --config ui.logtemplate= --color=debug -r "obsolete()"
973 $ hg log --config ui.logtemplate= --color=debug -r "obsolete()"
974 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
974 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
975 [log.parent changeset.draft|parent: 3:6f9641995072]
975 [log.parent changeset.draft|parent: 3:6f9641995072]
976 [log.user|user: test]
976 [log.user|user: test]
977 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
977 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
978 [log.summary|summary: add obsolete_e]
978 [log.summary|summary: add obsolete_e]
979
979
980
980
981 $ hg log -T default -r 'obsolete()' --color=debug
981 $ hg log -T default -r 'obsolete()' --color=debug
982 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
982 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
983 [log.parent changeset.draft|parent: 3:6f9641995072]
983 [log.parent changeset.draft|parent: 3:6f9641995072]
984 [log.user|user: test]
984 [log.user|user: test]
985 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
985 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
986 [log.summary|summary: add obsolete_e]
986 [log.summary|summary: add obsolete_e]
987
987
988
988
989 test summary output
989 test summary output
990
990
991 $ hg up -r 'phasedivergent() and orphan()'
991 $ hg up -r 'phasedivergent() and orphan()'
992 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
992 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
993 $ hg summary
993 $ hg summary
994 parent: 7:50c51b361e60 (orphan, phase-divergent)
994 parent: 7:50c51b361e60 (orphan, phase-divergent)
995 add babar
995 add babar
996 branch: default
996 branch: default
997 commit: (clean)
997 commit: (clean)
998 update: 2 new changesets (update)
998 update: 2 new changesets (update)
999 phases: 4 draft
999 phases: 4 draft
1000 orphan: 2 changesets
1000 orphan: 2 changesets
1001 phase-divergent: 1 changesets
1001 phase-divergent: 1 changesets
1002 $ hg up -r 'obsolete()'
1002 $ hg up -r 'obsolete()'
1003 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1003 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1004 $ hg summary
1004 $ hg summary
1005 parent: 6:3de5eca88c00 (obsolete)
1005 parent: 6:3de5eca88c00 (obsolete)
1006 add obsolete_e
1006 add obsolete_e
1007 branch: default
1007 branch: default
1008 commit: (clean)
1008 commit: (clean)
1009 update: 3 new changesets (update)
1009 update: 3 new changesets (update)
1010 phases: 4 draft
1010 phases: 4 draft
1011 orphan: 2 changesets
1011 orphan: 2 changesets
1012 phase-divergent: 1 changesets
1012 phase-divergent: 1 changesets
1013
1013
1014 Test incoming/outcoming with changesets obsoleted remotely, known locally
1014 Test incoming/outcoming with changesets obsoleted remotely, known locally
1015 ===============================================================================
1015 ===============================================================================
1016
1016
1017 This test issue 3805
1017 This test issue 3805
1018
1018
1019 $ hg init repo-issue3805
1019 $ hg init repo-issue3805
1020 $ cd repo-issue3805
1020 $ cd repo-issue3805
1021 $ echo "base" > base
1021 $ echo "base" > base
1022 $ hg ci -Am "base"
1022 $ hg ci -Am "base"
1023 adding base
1023 adding base
1024 $ echo "foo" > foo
1024 $ echo "foo" > foo
1025 $ hg ci -Am "A"
1025 $ hg ci -Am "A"
1026 adding foo
1026 adding foo
1027 $ hg clone . ../other-issue3805
1027 $ hg clone . ../other-issue3805
1028 updating to branch default
1028 updating to branch default
1029 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1029 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1030 $ echo "bar" >> foo
1030 $ echo "bar" >> foo
1031 $ hg ci --amend
1031 $ hg ci --amend
1032 $ cd ../other-issue3805
1032 $ cd ../other-issue3805
1033 $ hg log -G
1033 $ hg log -G
1034 @ 1:29f0c6921ddd (draft) [tip ] A
1034 @ 1:29f0c6921ddd (draft) [tip ] A
1035 |
1035 |
1036 o 0:d20a80d4def3 (draft) [ ] base
1036 o 0:d20a80d4def3 (draft) [ ] base
1037
1037
1038 $ hg log -G -R ../repo-issue3805
1038 $ hg log -G -R ../repo-issue3805
1039 @ 2:323a9c3ddd91 (draft) [tip ] A
1039 @ 2:323a9c3ddd91 (draft) [tip ] A
1040 |
1040 |
1041 o 0:d20a80d4def3 (draft) [ ] base
1041 o 0:d20a80d4def3 (draft) [ ] base
1042
1042
1043 $ hg incoming
1043 $ hg incoming
1044 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
1044 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
1045 searching for changes
1045 searching for changes
1046 2:323a9c3ddd91 (draft) [tip ] A
1046 2:323a9c3ddd91 (draft) [tip ] A
1047 $ hg incoming --bundle ../issue3805.hg
1047 $ hg incoming --bundle ../issue3805.hg
1048 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
1048 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
1049 searching for changes
1049 searching for changes
1050 2:323a9c3ddd91 (draft) [tip ] A
1050 2:323a9c3ddd91 (draft) [tip ] A
1051 $ hg outgoing
1051 $ hg outgoing
1052 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
1052 comparing with $TESTTMP/tmpe/repo-issue3805 (glob)
1053 searching for changes
1053 searching for changes
1054 1:29f0c6921ddd (draft) [tip ] A
1054 1:29f0c6921ddd (draft) [tip ] A
1055
1055
1056 #if serve
1056 #if serve
1057
1057
1058 $ hg serve -R ../repo-issue3805 -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1058 $ hg serve -R ../repo-issue3805 -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1059 $ cat hg.pid >> $DAEMON_PIDS
1059 $ cat hg.pid >> $DAEMON_PIDS
1060
1060
1061 $ hg incoming http://localhost:$HGPORT
1061 $ hg incoming http://localhost:$HGPORT
1062 comparing with http://localhost:$HGPORT/
1062 comparing with http://localhost:$HGPORT/
1063 searching for changes
1063 searching for changes
1064 2:323a9c3ddd91 (draft) [tip ] A
1064 2:323a9c3ddd91 (draft) [tip ] A
1065 $ hg outgoing http://localhost:$HGPORT
1065 $ hg outgoing http://localhost:$HGPORT
1066 comparing with http://localhost:$HGPORT/
1066 comparing with http://localhost:$HGPORT/
1067 searching for changes
1067 searching for changes
1068 1:29f0c6921ddd (draft) [tip ] A
1068 1:29f0c6921ddd (draft) [tip ] A
1069
1069
1070 $ killdaemons.py
1070 $ killdaemons.py
1071
1071
1072 #endif
1072 #endif
1073
1073
1074 This test issue 3814
1074 This test issue 3814
1075
1075
1076 (nothing to push but locally hidden changeset)
1076 (nothing to push but locally hidden changeset)
1077
1077
1078 $ cd ..
1078 $ cd ..
1079 $ hg init repo-issue3814
1079 $ hg init repo-issue3814
1080 $ cd repo-issue3805
1080 $ cd repo-issue3805
1081 $ hg push -r 323a9c3ddd91 ../repo-issue3814
1081 $ hg push -r 323a9c3ddd91 ../repo-issue3814
1082 pushing to ../repo-issue3814
1082 pushing to ../repo-issue3814
1083 searching for changes
1083 searching for changes
1084 adding changesets
1084 adding changesets
1085 adding manifests
1085 adding manifests
1086 adding file changes
1086 adding file changes
1087 added 2 changesets with 2 changes to 2 files
1087 added 2 changesets with 2 changes to 2 files
1088 1 new obsolescence markers
1088 1 new obsolescence markers
1089 $ hg out ../repo-issue3814
1089 $ hg out ../repo-issue3814
1090 comparing with ../repo-issue3814
1090 comparing with ../repo-issue3814
1091 searching for changes
1091 searching for changes
1092 no changes found
1092 no changes found
1093 [1]
1093 [1]
1094
1094
1095 Test that a local tag blocks a changeset from being hidden
1095 Test that a local tag blocks a changeset from being hidden
1096
1096
1097 $ hg tag -l visible -r 1 --hidden
1097 $ hg tag -l visible -r 1 --hidden
1098 $ hg log -G
1098 $ hg log -G
1099 @ 2:323a9c3ddd91 (draft) [tip ] A
1099 @ 2:323a9c3ddd91 (draft) [tip ] A
1100 |
1100 |
1101 | x 1:29f0c6921ddd (draft *obsolete*) [visible ] A [rewritten using amend as 2:323a9c3ddd91 (at 1970-01-01 00:00 +0000)]
1101 | x 1:29f0c6921ddd (draft *obsolete*) [visible ] A [rewritten using amend as 2:323a9c3ddd91]
1102 |/
1102 |/
1103 o 0:d20a80d4def3 (draft) [ ] base
1103 o 0:d20a80d4def3 (draft) [ ] base
1104
1104
1105 Test that removing a local tag does not cause some commands to fail
1105 Test that removing a local tag does not cause some commands to fail
1106
1106
1107 $ hg tag -l -r tip tiptag
1107 $ hg tag -l -r tip tiptag
1108 $ hg tags
1108 $ hg tags
1109 tiptag 2:323a9c3ddd91
1109 tiptag 2:323a9c3ddd91
1110 tip 2:323a9c3ddd91
1110 tip 2:323a9c3ddd91
1111 visible 1:29f0c6921ddd
1111 visible 1:29f0c6921ddd
1112 $ hg --config extensions.strip= strip -r tip --no-backup
1112 $ hg --config extensions.strip= strip -r tip --no-backup
1113 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1113 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1114 $ hg tags
1114 $ hg tags
1115 visible 1:29f0c6921ddd
1115 visible 1:29f0c6921ddd
1116 tip 1:29f0c6921ddd
1116 tip 1:29f0c6921ddd
1117
1117
1118 Test bundle overlay onto hidden revision
1118 Test bundle overlay onto hidden revision
1119
1119
1120 $ cd ..
1120 $ cd ..
1121 $ hg init repo-bundleoverlay
1121 $ hg init repo-bundleoverlay
1122 $ cd repo-bundleoverlay
1122 $ cd repo-bundleoverlay
1123 $ echo "A" > foo
1123 $ echo "A" > foo
1124 $ hg ci -Am "A"
1124 $ hg ci -Am "A"
1125 adding foo
1125 adding foo
1126 $ echo "B" >> foo
1126 $ echo "B" >> foo
1127 $ hg ci -m "B"
1127 $ hg ci -m "B"
1128 $ hg up 0
1128 $ hg up 0
1129 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1129 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1130 $ echo "C" >> foo
1130 $ echo "C" >> foo
1131 $ hg ci -m "C"
1131 $ hg ci -m "C"
1132 created new head
1132 created new head
1133 $ hg log -G
1133 $ hg log -G
1134 @ 2:c186d7714947 (draft) [tip ] C
1134 @ 2:c186d7714947 (draft) [tip ] C
1135 |
1135 |
1136 | o 1:44526ebb0f98 (draft) [ ] B
1136 | o 1:44526ebb0f98 (draft) [ ] B
1137 |/
1137 |/
1138 o 0:4b34ecfb0d56 (draft) [ ] A
1138 o 0:4b34ecfb0d56 (draft) [ ] A
1139
1139
1140
1140
1141 $ hg clone -r1 . ../other-bundleoverlay
1141 $ hg clone -r1 . ../other-bundleoverlay
1142 adding changesets
1142 adding changesets
1143 adding manifests
1143 adding manifests
1144 adding file changes
1144 adding file changes
1145 added 2 changesets with 2 changes to 1 files
1145 added 2 changesets with 2 changes to 1 files
1146 new changesets 4b34ecfb0d56:44526ebb0f98
1146 new changesets 4b34ecfb0d56:44526ebb0f98
1147 updating to branch default
1147 updating to branch default
1148 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1148 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1149 $ cd ../other-bundleoverlay
1149 $ cd ../other-bundleoverlay
1150 $ echo "B+" >> foo
1150 $ echo "B+" >> foo
1151 $ hg ci --amend -m "B+"
1151 $ hg ci --amend -m "B+"
1152 $ hg log -G --hidden
1152 $ hg log -G --hidden
1153 @ 2:b7d587542d40 (draft) [tip ] B+
1153 @ 2:b7d587542d40 (draft) [tip ] B+
1154 |
1154 |
1155 | x 1:44526ebb0f98 (draft *obsolete*) [ ] B [rewritten using amend as 2:b7d587542d40 (at 1970-01-01 00:00 +0000)]
1155 | x 1:44526ebb0f98 (draft *obsolete*) [ ] B [rewritten using amend as 2:b7d587542d40]
1156 |/
1156 |/
1157 o 0:4b34ecfb0d56 (draft) [ ] A
1157 o 0:4b34ecfb0d56 (draft) [ ] A
1158
1158
1159
1159
1160 $ hg incoming ../repo-bundleoverlay --bundle ../bundleoverlay.hg
1160 $ hg incoming ../repo-bundleoverlay --bundle ../bundleoverlay.hg
1161 comparing with ../repo-bundleoverlay
1161 comparing with ../repo-bundleoverlay
1162 searching for changes
1162 searching for changes
1163 1:44526ebb0f98 (draft) [ ] B
1163 1:44526ebb0f98 (draft) [ ] B
1164 2:c186d7714947 (draft) [tip ] C
1164 2:c186d7714947 (draft) [tip ] C
1165 $ hg log -G -R ../bundleoverlay.hg
1165 $ hg log -G -R ../bundleoverlay.hg
1166 o 3:c186d7714947 (draft) [tip ] C
1166 o 3:c186d7714947 (draft) [tip ] C
1167 |
1167 |
1168 | @ 2:b7d587542d40 (draft) [ ] B+
1168 | @ 2:b7d587542d40 (draft) [ ] B+
1169 |/
1169 |/
1170 o 0:4b34ecfb0d56 (draft) [ ] A
1170 o 0:4b34ecfb0d56 (draft) [ ] A
1171
1171
1172
1172
1173 #if serve
1173 #if serve
1174
1174
1175 Test issue 4506
1175 Test issue 4506
1176
1176
1177 $ cd ..
1177 $ cd ..
1178 $ hg init repo-issue4506
1178 $ hg init repo-issue4506
1179 $ cd repo-issue4506
1179 $ cd repo-issue4506
1180 $ echo "0" > foo
1180 $ echo "0" > foo
1181 $ hg add foo
1181 $ hg add foo
1182 $ hg ci -m "content-0"
1182 $ hg ci -m "content-0"
1183
1183
1184 $ hg up null
1184 $ hg up null
1185 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1185 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1186 $ echo "1" > bar
1186 $ echo "1" > bar
1187 $ hg add bar
1187 $ hg add bar
1188 $ hg ci -m "content-1"
1188 $ hg ci -m "content-1"
1189 created new head
1189 created new head
1190 $ hg up 0
1190 $ hg up 0
1191 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1191 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1192 $ hg graft 1
1192 $ hg graft 1
1193 grafting 1:1c9eddb02162 "content-1" (tip)
1193 grafting 1:1c9eddb02162 "content-1" (tip)
1194
1194
1195 $ hg debugobsolete `hg log -r1 -T'{node}'` `hg log -r2 -T'{node}'`
1195 $ hg debugobsolete `hg log -r1 -T'{node}'` `hg log -r2 -T'{node}'`
1196 obsoleted 1 changesets
1196 obsoleted 1 changesets
1197
1197
1198 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1198 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1199 $ cat hg.pid >> $DAEMON_PIDS
1199 $ cat hg.pid >> $DAEMON_PIDS
1200
1200
1201 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/1'
1201 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/1'
1202 404 Not Found
1202 404 Not Found
1203 [1]
1203 [1]
1204 $ get-with-headers.py --headeronly localhost:$HGPORT 'file/tip/bar'
1204 $ get-with-headers.py --headeronly localhost:$HGPORT 'file/tip/bar'
1205 200 Script output follows
1205 200 Script output follows
1206 $ get-with-headers.py --headeronly localhost:$HGPORT 'annotate/tip/bar'
1206 $ get-with-headers.py --headeronly localhost:$HGPORT 'annotate/tip/bar'
1207 200 Script output follows
1207 200 Script output follows
1208
1208
1209 $ killdaemons.py
1209 $ killdaemons.py
1210
1210
1211 #endif
1211 #endif
1212
1212
1213 Test heads computation on pending index changes with obsolescence markers
1213 Test heads computation on pending index changes with obsolescence markers
1214 $ cd ..
1214 $ cd ..
1215 $ cat >$TESTTMP/test_extension.py << EOF
1215 $ cat >$TESTTMP/test_extension.py << EOF
1216 > from __future__ import absolute_import
1216 > from __future__ import absolute_import
1217 > from mercurial.i18n import _
1217 > from mercurial.i18n import _
1218 > from mercurial import cmdutil, registrar
1218 > from mercurial import cmdutil, registrar
1219 >
1219 >
1220 > cmdtable = {}
1220 > cmdtable = {}
1221 > command = registrar.command(cmdtable)
1221 > command = registrar.command(cmdtable)
1222 > @command(b"amendtransient",[], _('hg amendtransient [rev]'))
1222 > @command(b"amendtransient",[], _('hg amendtransient [rev]'))
1223 > def amend(ui, repo, *pats, **opts):
1223 > def amend(ui, repo, *pats, **opts):
1224 > opts['message'] = 'Test'
1224 > opts['message'] = 'Test'
1225 > opts['logfile'] = None
1225 > opts['logfile'] = None
1226 > cmdutil.amend(ui, repo, repo['.'], {}, pats, opts)
1226 > cmdutil.amend(ui, repo, repo['.'], {}, pats, opts)
1227 > ui.write('%s\n' % repo.changelog.headrevs())
1227 > ui.write('%s\n' % repo.changelog.headrevs())
1228 > EOF
1228 > EOF
1229 $ cat >> $HGRCPATH << EOF
1229 $ cat >> $HGRCPATH << EOF
1230 > [extensions]
1230 > [extensions]
1231 > testextension=$TESTTMP/test_extension.py
1231 > testextension=$TESTTMP/test_extension.py
1232 > EOF
1232 > EOF
1233 $ hg init repo-issue-nativerevs-pending-changes
1233 $ hg init repo-issue-nativerevs-pending-changes
1234 $ cd repo-issue-nativerevs-pending-changes
1234 $ cd repo-issue-nativerevs-pending-changes
1235 $ mkcommit a
1235 $ mkcommit a
1236 $ mkcommit b
1236 $ mkcommit b
1237 $ hg up ".^"
1237 $ hg up ".^"
1238 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1238 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1239 $ echo aa > a
1239 $ echo aa > a
1240 $ hg amendtransient
1240 $ hg amendtransient
1241 [1, 2]
1241 [1, 2]
1242
1242
1243 Test cache consistency for the visible filter
1243 Test cache consistency for the visible filter
1244 1) We want to make sure that the cached filtered revs are invalidated when
1244 1) We want to make sure that the cached filtered revs are invalidated when
1245 bookmarks change
1245 bookmarks change
1246 $ cd ..
1246 $ cd ..
1247 $ cat >$TESTTMP/test_extension.py << EOF
1247 $ cat >$TESTTMP/test_extension.py << EOF
1248 > from __future__ import absolute_import, print_function
1248 > from __future__ import absolute_import, print_function
1249 > import weakref
1249 > import weakref
1250 > from mercurial import (
1250 > from mercurial import (
1251 > bookmarks,
1251 > bookmarks,
1252 > cmdutil,
1252 > cmdutil,
1253 > extensions,
1253 > extensions,
1254 > repoview,
1254 > repoview,
1255 > )
1255 > )
1256 > def _bookmarkchanged(orig, bkmstoreinst, *args, **kwargs):
1256 > def _bookmarkchanged(orig, bkmstoreinst, *args, **kwargs):
1257 > reporef = weakref.ref(bkmstoreinst._repo)
1257 > reporef = weakref.ref(bkmstoreinst._repo)
1258 > def trhook(tr):
1258 > def trhook(tr):
1259 > repo = reporef()
1259 > repo = reporef()
1260 > hidden1 = repoview.computehidden(repo)
1260 > hidden1 = repoview.computehidden(repo)
1261 > hidden = repoview.filterrevs(repo, 'visible')
1261 > hidden = repoview.filterrevs(repo, 'visible')
1262 > if sorted(hidden1) != sorted(hidden):
1262 > if sorted(hidden1) != sorted(hidden):
1263 > print("cache inconsistency")
1263 > print("cache inconsistency")
1264 > bkmstoreinst._repo.currenttransaction().addpostclose('test_extension', trhook)
1264 > bkmstoreinst._repo.currenttransaction().addpostclose('test_extension', trhook)
1265 > orig(bkmstoreinst, *args, **kwargs)
1265 > orig(bkmstoreinst, *args, **kwargs)
1266 > def extsetup(ui):
1266 > def extsetup(ui):
1267 > extensions.wrapfunction(bookmarks.bmstore, '_recordchange',
1267 > extensions.wrapfunction(bookmarks.bmstore, '_recordchange',
1268 > _bookmarkchanged)
1268 > _bookmarkchanged)
1269 > EOF
1269 > EOF
1270
1270
1271 $ hg init repo-cache-inconsistency
1271 $ hg init repo-cache-inconsistency
1272 $ cd repo-issue-nativerevs-pending-changes
1272 $ cd repo-issue-nativerevs-pending-changes
1273 $ mkcommit a
1273 $ mkcommit a
1274 a already tracked!
1274 a already tracked!
1275 $ mkcommit b
1275 $ mkcommit b
1276 $ hg id
1276 $ hg id
1277 13bedc178fce tip
1277 13bedc178fce tip
1278 $ echo "hello" > b
1278 $ echo "hello" > b
1279 $ hg commit --amend -m "message"
1279 $ hg commit --amend -m "message"
1280 $ hg book bookb -r 13bedc178fce --hidden
1280 $ hg book bookb -r 13bedc178fce --hidden
1281 $ hg log -r 13bedc178fce
1281 $ hg log -r 13bedc178fce
1282 4:13bedc178fce (draft *obsolete*) [ bookb] add b [rewritten using amend as 5:a9b1f8652753 (at 1970-01-01 00:00 +0000)]
1282 4:13bedc178fce (draft *obsolete*) [ bookb] add b [rewritten using amend as 5:a9b1f8652753]
1283 $ hg book -d bookb
1283 $ hg book -d bookb
1284 $ hg log -r 13bedc178fce
1284 $ hg log -r 13bedc178fce
1285 abort: hidden revision '13bedc178fce'!
1285 abort: hidden revision '13bedc178fce'!
1286 (use --hidden to access hidden revisions)
1286 (use --hidden to access hidden revisions)
1287 [255]
1287 [255]
1288
1288
1289 Empty out the test extension, as it isn't compatible with later parts
1289 Empty out the test extension, as it isn't compatible with later parts
1290 of the test.
1290 of the test.
1291 $ echo > $TESTTMP/test_extension.py
1291 $ echo > $TESTTMP/test_extension.py
1292
1292
1293 Test ability to pull changeset with locally applying obsolescence markers
1293 Test ability to pull changeset with locally applying obsolescence markers
1294 (issue4945)
1294 (issue4945)
1295
1295
1296 $ cd ..
1296 $ cd ..
1297 $ hg init issue4845
1297 $ hg init issue4845
1298 $ cd issue4845
1298 $ cd issue4845
1299
1299
1300 $ echo foo > f0
1300 $ echo foo > f0
1301 $ hg add f0
1301 $ hg add f0
1302 $ hg ci -m '0'
1302 $ hg ci -m '0'
1303 $ echo foo > f1
1303 $ echo foo > f1
1304 $ hg add f1
1304 $ hg add f1
1305 $ hg ci -m '1'
1305 $ hg ci -m '1'
1306 $ echo foo > f2
1306 $ echo foo > f2
1307 $ hg add f2
1307 $ hg add f2
1308 $ hg ci -m '2'
1308 $ hg ci -m '2'
1309
1309
1310 $ echo bar > f2
1310 $ echo bar > f2
1311 $ hg commit --amend --config experimetnal.stabilization=createmarkers
1311 $ hg commit --amend --config experimetnal.stabilization=createmarkers
1312 $ hg log -G
1312 $ hg log -G
1313 @ 3:b0551702f918 (draft) [tip ] 2
1313 @ 3:b0551702f918 (draft) [tip ] 2
1314 |
1314 |
1315 o 1:e016b03fd86f (draft) [ ] 1
1315 o 1:e016b03fd86f (draft) [ ] 1
1316 |
1316 |
1317 o 0:a78f55e5508c (draft) [ ] 0
1317 o 0:a78f55e5508c (draft) [ ] 0
1318
1318
1319 $ hg log -G --hidden
1319 $ hg log -G --hidden
1320 @ 3:b0551702f918 (draft) [tip ] 2
1320 @ 3:b0551702f918 (draft) [tip ] 2
1321 |
1321 |
1322 | x 2:e008cf283490 (draft *obsolete*) [ ] 2 [rewritten using amend as 3:b0551702f918 (at 1970-01-01 00:00 +0000)]
1322 | x 2:e008cf283490 (draft *obsolete*) [ ] 2 [rewritten using amend as 3:b0551702f918]
1323 |/
1323 |/
1324 o 1:e016b03fd86f (draft) [ ] 1
1324 o 1:e016b03fd86f (draft) [ ] 1
1325 |
1325 |
1326 o 0:a78f55e5508c (draft) [ ] 0
1326 o 0:a78f55e5508c (draft) [ ] 0
1327
1327
1328
1328
1329 $ hg strip --hidden -r 2 --config extensions.strip= --config devel.strip-obsmarkers=no
1329 $ hg strip --hidden -r 2 --config extensions.strip= --config devel.strip-obsmarkers=no
1330 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e008cf283490-ede36964-backup.hg (glob)
1330 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e008cf283490-ede36964-backup.hg (glob)
1331 $ hg debugobsolete
1331 $ hg debugobsolete
1332 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1332 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1333 $ hg log -G
1333 $ hg log -G
1334 @ 2:b0551702f918 (draft) [tip ] 2
1334 @ 2:b0551702f918 (draft) [tip ] 2
1335 |
1335 |
1336 o 1:e016b03fd86f (draft) [ ] 1
1336 o 1:e016b03fd86f (draft) [ ] 1
1337 |
1337 |
1338 o 0:a78f55e5508c (draft) [ ] 0
1338 o 0:a78f55e5508c (draft) [ ] 0
1339
1339
1340 $ hg log -G --hidden
1340 $ hg log -G --hidden
1341 @ 2:b0551702f918 (draft) [tip ] 2
1341 @ 2:b0551702f918 (draft) [tip ] 2
1342 |
1342 |
1343 o 1:e016b03fd86f (draft) [ ] 1
1343 o 1:e016b03fd86f (draft) [ ] 1
1344 |
1344 |
1345 o 0:a78f55e5508c (draft) [ ] 0
1345 o 0:a78f55e5508c (draft) [ ] 0
1346
1346
1347 $ hg debugbundle .hg/strip-backup/e008cf283490-*-backup.hg
1347 $ hg debugbundle .hg/strip-backup/e008cf283490-*-backup.hg
1348 Stream params: {Compression: BZ}
1348 Stream params: {Compression: BZ}
1349 changegroup -- {nbchanges: 1, version: 02}
1349 changegroup -- {nbchanges: 1, version: 02}
1350 e008cf2834908e5d6b0f792a9d4b0e2272260fb8
1350 e008cf2834908e5d6b0f792a9d4b0e2272260fb8
1351 phase-heads -- {}
1351 phase-heads -- {}
1352 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 draft
1352 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 draft
1353
1353
1354 $ hg pull .hg/strip-backup/e008cf283490-*-backup.hg
1354 $ hg pull .hg/strip-backup/e008cf283490-*-backup.hg
1355 pulling from .hg/strip-backup/e008cf283490-ede36964-backup.hg
1355 pulling from .hg/strip-backup/e008cf283490-ede36964-backup.hg
1356 searching for changes
1356 searching for changes
1357 no changes found
1357 no changes found
1358 $ hg debugobsolete
1358 $ hg debugobsolete
1359 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1359 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1360 $ hg log -G
1360 $ hg log -G
1361 @ 2:b0551702f918 (draft) [tip ] 2
1361 @ 2:b0551702f918 (draft) [tip ] 2
1362 |
1362 |
1363 o 1:e016b03fd86f (draft) [ ] 1
1363 o 1:e016b03fd86f (draft) [ ] 1
1364 |
1364 |
1365 o 0:a78f55e5508c (draft) [ ] 0
1365 o 0:a78f55e5508c (draft) [ ] 0
1366
1366
1367 $ hg log -G --hidden
1367 $ hg log -G --hidden
1368 @ 2:b0551702f918 (draft) [tip ] 2
1368 @ 2:b0551702f918 (draft) [tip ] 2
1369 |
1369 |
1370 o 1:e016b03fd86f (draft) [ ] 1
1370 o 1:e016b03fd86f (draft) [ ] 1
1371 |
1371 |
1372 o 0:a78f55e5508c (draft) [ ] 0
1372 o 0:a78f55e5508c (draft) [ ] 0
1373
1373
1374
1374
1375 Testing that strip remove markers:
1375 Testing that strip remove markers:
1376
1376
1377 $ hg strip -r 1 --config extensions.strip=
1377 $ hg strip -r 1 --config extensions.strip=
1378 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1378 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1379 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e016b03fd86f-65ede734-backup.hg (glob)
1379 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e016b03fd86f-65ede734-backup.hg (glob)
1380 $ hg debugobsolete
1380 $ hg debugobsolete
1381 $ hg log -G
1381 $ hg log -G
1382 @ 0:a78f55e5508c (draft) [tip ] 0
1382 @ 0:a78f55e5508c (draft) [tip ] 0
1383
1383
1384 $ hg log -G --hidden
1384 $ hg log -G --hidden
1385 @ 0:a78f55e5508c (draft) [tip ] 0
1385 @ 0:a78f55e5508c (draft) [tip ] 0
1386
1386
1387 $ hg debugbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1387 $ hg debugbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1388 Stream params: {Compression: BZ}
1388 Stream params: {Compression: BZ}
1389 changegroup -- {nbchanges: 2, version: 02}
1389 changegroup -- {nbchanges: 2, version: 02}
1390 e016b03fd86fcccc54817d120b90b751aaf367d6
1390 e016b03fd86fcccc54817d120b90b751aaf367d6
1391 b0551702f918510f01ae838ab03a463054c67b46
1391 b0551702f918510f01ae838ab03a463054c67b46
1392 obsmarkers -- {}
1392 obsmarkers -- {}
1393 version: 1 (86 bytes)
1393 version: 1 (86 bytes)
1394 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1394 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1395 phase-heads -- {}
1395 phase-heads -- {}
1396 b0551702f918510f01ae838ab03a463054c67b46 draft
1396 b0551702f918510f01ae838ab03a463054c67b46 draft
1397
1397
1398 $ hg unbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1398 $ hg unbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1399 adding changesets
1399 adding changesets
1400 adding manifests
1400 adding manifests
1401 adding file changes
1401 adding file changes
1402 added 2 changesets with 2 changes to 2 files
1402 added 2 changesets with 2 changes to 2 files
1403 1 new obsolescence markers
1403 1 new obsolescence markers
1404 new changesets e016b03fd86f:b0551702f918
1404 new changesets e016b03fd86f:b0551702f918
1405 (run 'hg update' to get a working copy)
1405 (run 'hg update' to get a working copy)
1406 $ hg debugobsolete | sort
1406 $ hg debugobsolete | sort
1407 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1407 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1408 $ hg log -G
1408 $ hg log -G
1409 o 2:b0551702f918 (draft) [tip ] 2
1409 o 2:b0551702f918 (draft) [tip ] 2
1410 |
1410 |
1411 o 1:e016b03fd86f (draft) [ ] 1
1411 o 1:e016b03fd86f (draft) [ ] 1
1412 |
1412 |
1413 @ 0:a78f55e5508c (draft) [ ] 0
1413 @ 0:a78f55e5508c (draft) [ ] 0
1414
1414
1415 $ hg log -G --hidden
1415 $ hg log -G --hidden
1416 o 2:b0551702f918 (draft) [tip ] 2
1416 o 2:b0551702f918 (draft) [tip ] 2
1417 |
1417 |
1418 o 1:e016b03fd86f (draft) [ ] 1
1418 o 1:e016b03fd86f (draft) [ ] 1
1419 |
1419 |
1420 @ 0:a78f55e5508c (draft) [ ] 0
1420 @ 0:a78f55e5508c (draft) [ ] 0
1421
1421
1422 Test that 'hg debugobsolete --index --rev' can show indices of obsmarkers when
1422 Test that 'hg debugobsolete --index --rev' can show indices of obsmarkers when
1423 only a subset of those are displayed (because of --rev option)
1423 only a subset of those are displayed (because of --rev option)
1424 $ hg init doindexrev
1424 $ hg init doindexrev
1425 $ cd doindexrev
1425 $ cd doindexrev
1426 $ echo a > a
1426 $ echo a > a
1427 $ hg ci -Am a
1427 $ hg ci -Am a
1428 adding a
1428 adding a
1429 $ hg ci --amend -m aa
1429 $ hg ci --amend -m aa
1430 $ echo b > b
1430 $ echo b > b
1431 $ hg ci -Am b
1431 $ hg ci -Am b
1432 adding b
1432 adding b
1433 $ hg ci --amend -m bb
1433 $ hg ci --amend -m bb
1434 $ echo c > c
1434 $ echo c > c
1435 $ hg ci -Am c
1435 $ hg ci -Am c
1436 adding c
1436 adding c
1437 $ hg ci --amend -m cc
1437 $ hg ci --amend -m cc
1438 $ echo d > d
1438 $ echo d > d
1439 $ hg ci -Am d
1439 $ hg ci -Am d
1440 adding d
1440 adding d
1441 $ hg ci --amend -m dd --config experimental.stabilization.track-operation=1
1441 $ hg ci --amend -m dd --config experimental.stabilization.track-operation=1
1442 $ hg debugobsolete --index --rev "3+7"
1442 $ hg debugobsolete --index --rev "3+7"
1443 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1443 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1444 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 \(.*\) {'operation': 'amend', 'user': 'test'} (re)
1444 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 \(.*\) {'operation': 'amend', 'user': 'test'} (re)
1445 $ hg debugobsolete --index --rev "3+7" -Tjson
1445 $ hg debugobsolete --index --rev "3+7" -Tjson
1446 [
1446 [
1447 {
1447 {
1448 "date": [0.0, 0],
1448 "date": [0.0, 0],
1449 "flag": 0,
1449 "flag": 0,
1450 "index": 1,
1450 "index": 1,
1451 "metadata": {"operation": "amend", "user": "test"},
1451 "metadata": {"operation": "amend", "user": "test"},
1452 "prednode": "6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1",
1452 "prednode": "6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1",
1453 "succnodes": ["d27fb9b066076fd921277a4b9e8b9cb48c95bc6a"]
1453 "succnodes": ["d27fb9b066076fd921277a4b9e8b9cb48c95bc6a"]
1454 },
1454 },
1455 {
1455 {
1456 "date": [0.0, 0],
1456 "date": [0.0, 0],
1457 "flag": 0,
1457 "flag": 0,
1458 "index": 3,
1458 "index": 3,
1459 "metadata": {"operation": "amend", "user": "test"},
1459 "metadata": {"operation": "amend", "user": "test"},
1460 "prednode": "4715cf767440ed891755448016c2b8cf70760c30",
1460 "prednode": "4715cf767440ed891755448016c2b8cf70760c30",
1461 "succnodes": ["7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d"]
1461 "succnodes": ["7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d"]
1462 }
1462 }
1463 ]
1463 ]
1464
1464
1465 Test the --delete option of debugobsolete command
1465 Test the --delete option of debugobsolete command
1466 $ hg debugobsolete --index
1466 $ hg debugobsolete --index
1467 0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1467 0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1468 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1468 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1469 2 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1469 2 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1470 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1470 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1471 $ hg debugobsolete --delete 1 --delete 3
1471 $ hg debugobsolete --delete 1 --delete 3
1472 deleted 2 obsolescence markers
1472 deleted 2 obsolescence markers
1473 $ hg debugobsolete
1473 $ hg debugobsolete
1474 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1474 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1475 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1475 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'operation': 'amend', 'user': 'test'}
1476
1476
1477 Test adding changeset after obsmarkers affecting it
1477 Test adding changeset after obsmarkers affecting it
1478 (eg: during pull, or unbundle)
1478 (eg: during pull, or unbundle)
1479
1479
1480 $ mkcommit e
1480 $ mkcommit e
1481 $ hg bundle -r . --base .~1 ../bundle-2.hg
1481 $ hg bundle -r . --base .~1 ../bundle-2.hg
1482 1 changesets found
1482 1 changesets found
1483 $ getid .
1483 $ getid .
1484 $ hg --config extensions.strip= strip -r .
1484 $ hg --config extensions.strip= strip -r .
1485 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1485 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1486 saved backup bundle to $TESTTMP/tmpe/issue4845/doindexrev/.hg/strip-backup/9bc153528424-ee80edd4-backup.hg (glob)
1486 saved backup bundle to $TESTTMP/tmpe/issue4845/doindexrev/.hg/strip-backup/9bc153528424-ee80edd4-backup.hg (glob)
1487 $ hg debugobsolete 9bc153528424ea266d13e57f9ff0d799dfe61e4b
1487 $ hg debugobsolete 9bc153528424ea266d13e57f9ff0d799dfe61e4b
1488 $ hg unbundle ../bundle-2.hg
1488 $ hg unbundle ../bundle-2.hg
1489 adding changesets
1489 adding changesets
1490 adding manifests
1490 adding manifests
1491 adding file changes
1491 adding file changes
1492 added 1 changesets with 1 changes to 1 files
1492 added 1 changesets with 1 changes to 1 files
1493 (run 'hg update' to get a working copy)
1493 (run 'hg update' to get a working copy)
1494 $ hg log -G
1494 $ hg log -G
1495 @ 7:7ae79c5d60f0 (draft) [tip ] dd
1495 @ 7:7ae79c5d60f0 (draft) [tip ] dd
1496 |
1496 |
1497 | o 6:4715cf767440 (draft) [ ] d
1497 | o 6:4715cf767440 (draft) [ ] d
1498 |/
1498 |/
1499 o 5:29346082e4a9 (draft) [ ] cc
1499 o 5:29346082e4a9 (draft) [ ] cc
1500 |
1500 |
1501 o 3:d27fb9b06607 (draft) [ ] bb
1501 o 3:d27fb9b06607 (draft) [ ] bb
1502 |
1502 |
1503 | o 2:6fdef60fcbab (draft) [ ] b
1503 | o 2:6fdef60fcbab (draft) [ ] b
1504 |/
1504 |/
1505 o 1:f9bd49731b0b (draft) [ ] aa
1505 o 1:f9bd49731b0b (draft) [ ] aa
1506
1506
1507
1507
1508 $ cd ..
1508 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now