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