##// END OF EJS Templates
pullreport: issue a message about "extinct" pulled changesets...
Boris Feld -
r39935:f9232b03 default
parent child Browse files
Show More
@@ -1,1791 +1,1802 b''
1 # scmutil.py - Mercurial core utility functions
1 # scmutil.py - Mercurial core utility functions
2 #
2 #
3 # Copyright Matt Mackall <mpm@selenic.com>
3 # Copyright Matt Mackall <mpm@selenic.com>
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 errno
10 import errno
11 import glob
11 import glob
12 import hashlib
12 import hashlib
13 import os
13 import os
14 import re
14 import re
15 import socket
15 import socket
16 import subprocess
16 import subprocess
17 import weakref
17 import weakref
18
18
19 from .i18n import _
19 from .i18n import _
20 from .node import (
20 from .node import (
21 bin,
21 bin,
22 hex,
22 hex,
23 nullid,
23 nullid,
24 nullrev,
24 nullrev,
25 short,
25 short,
26 wdirid,
26 wdirid,
27 wdirrev,
27 wdirrev,
28 )
28 )
29
29
30 from . import (
30 from . import (
31 encoding,
31 encoding,
32 error,
32 error,
33 match as matchmod,
33 match as matchmod,
34 obsolete,
34 obsolete,
35 obsutil,
35 obsutil,
36 pathutil,
36 pathutil,
37 phases,
37 phases,
38 policy,
38 policy,
39 pycompat,
39 pycompat,
40 revsetlang,
40 revsetlang,
41 similar,
41 similar,
42 smartset,
42 smartset,
43 url,
43 url,
44 util,
44 util,
45 vfs,
45 vfs,
46 )
46 )
47
47
48 from .utils import (
48 from .utils import (
49 procutil,
49 procutil,
50 stringutil,
50 stringutil,
51 )
51 )
52
52
53 if pycompat.iswindows:
53 if pycompat.iswindows:
54 from . import scmwindows as scmplatform
54 from . import scmwindows as scmplatform
55 else:
55 else:
56 from . import scmposix as scmplatform
56 from . import scmposix as scmplatform
57
57
58 parsers = policy.importmod(r'parsers')
58 parsers = policy.importmod(r'parsers')
59
59
60 termsize = scmplatform.termsize
60 termsize = scmplatform.termsize
61
61
62 class status(tuple):
62 class status(tuple):
63 '''Named tuple with a list of files per status. The 'deleted', 'unknown'
63 '''Named tuple with a list of files per status. The 'deleted', 'unknown'
64 and 'ignored' properties are only relevant to the working copy.
64 and 'ignored' properties are only relevant to the working copy.
65 '''
65 '''
66
66
67 __slots__ = ()
67 __slots__ = ()
68
68
69 def __new__(cls, modified, added, removed, deleted, unknown, ignored,
69 def __new__(cls, modified, added, removed, deleted, unknown, ignored,
70 clean):
70 clean):
71 return tuple.__new__(cls, (modified, added, removed, deleted, unknown,
71 return tuple.__new__(cls, (modified, added, removed, deleted, unknown,
72 ignored, clean))
72 ignored, clean))
73
73
74 @property
74 @property
75 def modified(self):
75 def modified(self):
76 '''files that have been modified'''
76 '''files that have been modified'''
77 return self[0]
77 return self[0]
78
78
79 @property
79 @property
80 def added(self):
80 def added(self):
81 '''files that have been added'''
81 '''files that have been added'''
82 return self[1]
82 return self[1]
83
83
84 @property
84 @property
85 def removed(self):
85 def removed(self):
86 '''files that have been removed'''
86 '''files that have been removed'''
87 return self[2]
87 return self[2]
88
88
89 @property
89 @property
90 def deleted(self):
90 def deleted(self):
91 '''files that are in the dirstate, but have been deleted from the
91 '''files that are in the dirstate, but have been deleted from the
92 working copy (aka "missing")
92 working copy (aka "missing")
93 '''
93 '''
94 return self[3]
94 return self[3]
95
95
96 @property
96 @property
97 def unknown(self):
97 def unknown(self):
98 '''files not in the dirstate that are not ignored'''
98 '''files not in the dirstate that are not ignored'''
99 return self[4]
99 return self[4]
100
100
101 @property
101 @property
102 def ignored(self):
102 def ignored(self):
103 '''files not in the dirstate that are ignored (by _dirignore())'''
103 '''files not in the dirstate that are ignored (by _dirignore())'''
104 return self[5]
104 return self[5]
105
105
106 @property
106 @property
107 def clean(self):
107 def clean(self):
108 '''files that have not been modified'''
108 '''files that have not been modified'''
109 return self[6]
109 return self[6]
110
110
111 def __repr__(self, *args, **kwargs):
111 def __repr__(self, *args, **kwargs):
112 return ((r'<status modified=%s, added=%s, removed=%s, deleted=%s, '
112 return ((r'<status modified=%s, added=%s, removed=%s, deleted=%s, '
113 r'unknown=%s, ignored=%s, clean=%s>') %
113 r'unknown=%s, ignored=%s, clean=%s>') %
114 tuple(pycompat.sysstr(stringutil.pprint(v)) for v in self))
114 tuple(pycompat.sysstr(stringutil.pprint(v)) for v in self))
115
115
116 def itersubrepos(ctx1, ctx2):
116 def itersubrepos(ctx1, ctx2):
117 """find subrepos in ctx1 or ctx2"""
117 """find subrepos in ctx1 or ctx2"""
118 # Create a (subpath, ctx) mapping where we prefer subpaths from
118 # Create a (subpath, ctx) mapping where we prefer subpaths from
119 # ctx1. The subpaths from ctx2 are important when the .hgsub file
119 # ctx1. The subpaths from ctx2 are important when the .hgsub file
120 # has been modified (in ctx2) but not yet committed (in ctx1).
120 # has been modified (in ctx2) but not yet committed (in ctx1).
121 subpaths = dict.fromkeys(ctx2.substate, ctx2)
121 subpaths = dict.fromkeys(ctx2.substate, ctx2)
122 subpaths.update(dict.fromkeys(ctx1.substate, ctx1))
122 subpaths.update(dict.fromkeys(ctx1.substate, ctx1))
123
123
124 missing = set()
124 missing = set()
125
125
126 for subpath in ctx2.substate:
126 for subpath in ctx2.substate:
127 if subpath not in ctx1.substate:
127 if subpath not in ctx1.substate:
128 del subpaths[subpath]
128 del subpaths[subpath]
129 missing.add(subpath)
129 missing.add(subpath)
130
130
131 for subpath, ctx in sorted(subpaths.iteritems()):
131 for subpath, ctx in sorted(subpaths.iteritems()):
132 yield subpath, ctx.sub(subpath)
132 yield subpath, ctx.sub(subpath)
133
133
134 # Yield an empty subrepo based on ctx1 for anything only in ctx2. That way,
134 # Yield an empty subrepo based on ctx1 for anything only in ctx2. That way,
135 # status and diff will have an accurate result when it does
135 # status and diff will have an accurate result when it does
136 # 'sub.{status|diff}(rev2)'. Otherwise, the ctx2 subrepo is compared
136 # 'sub.{status|diff}(rev2)'. Otherwise, the ctx2 subrepo is compared
137 # against itself.
137 # against itself.
138 for subpath in missing:
138 for subpath in missing:
139 yield subpath, ctx2.nullsub(subpath, ctx1)
139 yield subpath, ctx2.nullsub(subpath, ctx1)
140
140
141 def nochangesfound(ui, repo, excluded=None):
141 def nochangesfound(ui, repo, excluded=None):
142 '''Report no changes for push/pull, excluded is None or a list of
142 '''Report no changes for push/pull, excluded is None or a list of
143 nodes excluded from the push/pull.
143 nodes excluded from the push/pull.
144 '''
144 '''
145 secretlist = []
145 secretlist = []
146 if excluded:
146 if excluded:
147 for n in excluded:
147 for n in excluded:
148 ctx = repo[n]
148 ctx = repo[n]
149 if ctx.phase() >= phases.secret and not ctx.extinct():
149 if ctx.phase() >= phases.secret and not ctx.extinct():
150 secretlist.append(n)
150 secretlist.append(n)
151
151
152 if secretlist:
152 if secretlist:
153 ui.status(_("no changes found (ignored %d secret changesets)\n")
153 ui.status(_("no changes found (ignored %d secret changesets)\n")
154 % len(secretlist))
154 % len(secretlist))
155 else:
155 else:
156 ui.status(_("no changes found\n"))
156 ui.status(_("no changes found\n"))
157
157
158 def callcatch(ui, func):
158 def callcatch(ui, func):
159 """call func() with global exception handling
159 """call func() with global exception handling
160
160
161 return func() if no exception happens. otherwise do some error handling
161 return func() if no exception happens. otherwise do some error handling
162 and return an exit code accordingly. does not handle all exceptions.
162 and return an exit code accordingly. does not handle all exceptions.
163 """
163 """
164 try:
164 try:
165 try:
165 try:
166 return func()
166 return func()
167 except: # re-raises
167 except: # re-raises
168 ui.traceback()
168 ui.traceback()
169 raise
169 raise
170 # Global exception handling, alphabetically
170 # Global exception handling, alphabetically
171 # Mercurial-specific first, followed by built-in and library exceptions
171 # Mercurial-specific first, followed by built-in and library exceptions
172 except error.LockHeld as inst:
172 except error.LockHeld as inst:
173 if inst.errno == errno.ETIMEDOUT:
173 if inst.errno == errno.ETIMEDOUT:
174 reason = _('timed out waiting for lock held by %r') % inst.locker
174 reason = _('timed out waiting for lock held by %r') % inst.locker
175 else:
175 else:
176 reason = _('lock held by %r') % inst.locker
176 reason = _('lock held by %r') % inst.locker
177 ui.error(_("abort: %s: %s\n") % (
177 ui.error(_("abort: %s: %s\n") % (
178 inst.desc or stringutil.forcebytestr(inst.filename), reason))
178 inst.desc or stringutil.forcebytestr(inst.filename), reason))
179 if not inst.locker:
179 if not inst.locker:
180 ui.error(_("(lock might be very busy)\n"))
180 ui.error(_("(lock might be very busy)\n"))
181 except error.LockUnavailable as inst:
181 except error.LockUnavailable as inst:
182 ui.error(_("abort: could not lock %s: %s\n") %
182 ui.error(_("abort: could not lock %s: %s\n") %
183 (inst.desc or stringutil.forcebytestr(inst.filename),
183 (inst.desc or stringutil.forcebytestr(inst.filename),
184 encoding.strtolocal(inst.strerror)))
184 encoding.strtolocal(inst.strerror)))
185 except error.OutOfBandError as inst:
185 except error.OutOfBandError as inst:
186 if inst.args:
186 if inst.args:
187 msg = _("abort: remote error:\n")
187 msg = _("abort: remote error:\n")
188 else:
188 else:
189 msg = _("abort: remote error\n")
189 msg = _("abort: remote error\n")
190 ui.error(msg)
190 ui.error(msg)
191 if inst.args:
191 if inst.args:
192 ui.error(''.join(inst.args))
192 ui.error(''.join(inst.args))
193 if inst.hint:
193 if inst.hint:
194 ui.error('(%s)\n' % inst.hint)
194 ui.error('(%s)\n' % inst.hint)
195 except error.RepoError as inst:
195 except error.RepoError as inst:
196 ui.error(_("abort: %s!\n") % inst)
196 ui.error(_("abort: %s!\n") % inst)
197 if inst.hint:
197 if inst.hint:
198 ui.error(_("(%s)\n") % inst.hint)
198 ui.error(_("(%s)\n") % inst.hint)
199 except error.ResponseError as inst:
199 except error.ResponseError as inst:
200 ui.error(_("abort: %s") % inst.args[0])
200 ui.error(_("abort: %s") % inst.args[0])
201 msg = inst.args[1]
201 msg = inst.args[1]
202 if isinstance(msg, type(u'')):
202 if isinstance(msg, type(u'')):
203 msg = pycompat.sysbytes(msg)
203 msg = pycompat.sysbytes(msg)
204 if not isinstance(msg, bytes):
204 if not isinstance(msg, bytes):
205 ui.error(" %r\n" % (msg,))
205 ui.error(" %r\n" % (msg,))
206 elif not msg:
206 elif not msg:
207 ui.error(_(" empty string\n"))
207 ui.error(_(" empty string\n"))
208 else:
208 else:
209 ui.error("\n%r\n" % pycompat.bytestr(stringutil.ellipsis(msg)))
209 ui.error("\n%r\n" % pycompat.bytestr(stringutil.ellipsis(msg)))
210 except error.CensoredNodeError as inst:
210 except error.CensoredNodeError as inst:
211 ui.error(_("abort: file censored %s!\n") % inst)
211 ui.error(_("abort: file censored %s!\n") % inst)
212 except error.StorageError as inst:
212 except error.StorageError as inst:
213 ui.error(_("abort: %s!\n") % inst)
213 ui.error(_("abort: %s!\n") % inst)
214 except error.InterventionRequired as inst:
214 except error.InterventionRequired as inst:
215 ui.error("%s\n" % inst)
215 ui.error("%s\n" % inst)
216 if inst.hint:
216 if inst.hint:
217 ui.error(_("(%s)\n") % inst.hint)
217 ui.error(_("(%s)\n") % inst.hint)
218 return 1
218 return 1
219 except error.WdirUnsupported:
219 except error.WdirUnsupported:
220 ui.error(_("abort: working directory revision cannot be specified\n"))
220 ui.error(_("abort: working directory revision cannot be specified\n"))
221 except error.Abort as inst:
221 except error.Abort as inst:
222 ui.error(_("abort: %s\n") % inst)
222 ui.error(_("abort: %s\n") % inst)
223 if inst.hint:
223 if inst.hint:
224 ui.error(_("(%s)\n") % inst.hint)
224 ui.error(_("(%s)\n") % inst.hint)
225 except ImportError as inst:
225 except ImportError as inst:
226 ui.error(_("abort: %s!\n") % stringutil.forcebytestr(inst))
226 ui.error(_("abort: %s!\n") % stringutil.forcebytestr(inst))
227 m = stringutil.forcebytestr(inst).split()[-1]
227 m = stringutil.forcebytestr(inst).split()[-1]
228 if m in "mpatch bdiff".split():
228 if m in "mpatch bdiff".split():
229 ui.error(_("(did you forget to compile extensions?)\n"))
229 ui.error(_("(did you forget to compile extensions?)\n"))
230 elif m in "zlib".split():
230 elif m in "zlib".split():
231 ui.error(_("(is your Python install correct?)\n"))
231 ui.error(_("(is your Python install correct?)\n"))
232 except IOError as inst:
232 except IOError as inst:
233 if util.safehasattr(inst, "code"):
233 if util.safehasattr(inst, "code"):
234 ui.error(_("abort: %s\n") % stringutil.forcebytestr(inst))
234 ui.error(_("abort: %s\n") % stringutil.forcebytestr(inst))
235 elif util.safehasattr(inst, "reason"):
235 elif util.safehasattr(inst, "reason"):
236 try: # usually it is in the form (errno, strerror)
236 try: # usually it is in the form (errno, strerror)
237 reason = inst.reason.args[1]
237 reason = inst.reason.args[1]
238 except (AttributeError, IndexError):
238 except (AttributeError, IndexError):
239 # it might be anything, for example a string
239 # it might be anything, for example a string
240 reason = inst.reason
240 reason = inst.reason
241 if isinstance(reason, pycompat.unicode):
241 if isinstance(reason, pycompat.unicode):
242 # SSLError of Python 2.7.9 contains a unicode
242 # SSLError of Python 2.7.9 contains a unicode
243 reason = encoding.unitolocal(reason)
243 reason = encoding.unitolocal(reason)
244 ui.error(_("abort: error: %s\n") % reason)
244 ui.error(_("abort: error: %s\n") % reason)
245 elif (util.safehasattr(inst, "args")
245 elif (util.safehasattr(inst, "args")
246 and inst.args and inst.args[0] == errno.EPIPE):
246 and inst.args and inst.args[0] == errno.EPIPE):
247 pass
247 pass
248 elif getattr(inst, "strerror", None):
248 elif getattr(inst, "strerror", None):
249 if getattr(inst, "filename", None):
249 if getattr(inst, "filename", None):
250 ui.error(_("abort: %s: %s\n") % (
250 ui.error(_("abort: %s: %s\n") % (
251 encoding.strtolocal(inst.strerror),
251 encoding.strtolocal(inst.strerror),
252 stringutil.forcebytestr(inst.filename)))
252 stringutil.forcebytestr(inst.filename)))
253 else:
253 else:
254 ui.error(_("abort: %s\n") % encoding.strtolocal(inst.strerror))
254 ui.error(_("abort: %s\n") % encoding.strtolocal(inst.strerror))
255 else:
255 else:
256 raise
256 raise
257 except OSError as inst:
257 except OSError as inst:
258 if getattr(inst, "filename", None) is not None:
258 if getattr(inst, "filename", None) is not None:
259 ui.error(_("abort: %s: '%s'\n") % (
259 ui.error(_("abort: %s: '%s'\n") % (
260 encoding.strtolocal(inst.strerror),
260 encoding.strtolocal(inst.strerror),
261 stringutil.forcebytestr(inst.filename)))
261 stringutil.forcebytestr(inst.filename)))
262 else:
262 else:
263 ui.error(_("abort: %s\n") % encoding.strtolocal(inst.strerror))
263 ui.error(_("abort: %s\n") % encoding.strtolocal(inst.strerror))
264 except MemoryError:
264 except MemoryError:
265 ui.error(_("abort: out of memory\n"))
265 ui.error(_("abort: out of memory\n"))
266 except SystemExit as inst:
266 except SystemExit as inst:
267 # Commands shouldn't sys.exit directly, but give a return code.
267 # Commands shouldn't sys.exit directly, but give a return code.
268 # Just in case catch this and and pass exit code to caller.
268 # Just in case catch this and and pass exit code to caller.
269 return inst.code
269 return inst.code
270 except socket.error as inst:
270 except socket.error as inst:
271 ui.error(_("abort: %s\n") % stringutil.forcebytestr(inst.args[-1]))
271 ui.error(_("abort: %s\n") % stringutil.forcebytestr(inst.args[-1]))
272
272
273 return -1
273 return -1
274
274
275 def checknewlabel(repo, lbl, kind):
275 def checknewlabel(repo, lbl, kind):
276 # Do not use the "kind" parameter in ui output.
276 # Do not use the "kind" parameter in ui output.
277 # It makes strings difficult to translate.
277 # It makes strings difficult to translate.
278 if lbl in ['tip', '.', 'null']:
278 if lbl in ['tip', '.', 'null']:
279 raise error.Abort(_("the name '%s' is reserved") % lbl)
279 raise error.Abort(_("the name '%s' is reserved") % lbl)
280 for c in (':', '\0', '\n', '\r'):
280 for c in (':', '\0', '\n', '\r'):
281 if c in lbl:
281 if c in lbl:
282 raise error.Abort(
282 raise error.Abort(
283 _("%r cannot be used in a name") % pycompat.bytestr(c))
283 _("%r cannot be used in a name") % pycompat.bytestr(c))
284 try:
284 try:
285 int(lbl)
285 int(lbl)
286 raise error.Abort(_("cannot use an integer as a name"))
286 raise error.Abort(_("cannot use an integer as a name"))
287 except ValueError:
287 except ValueError:
288 pass
288 pass
289 if lbl.strip() != lbl:
289 if lbl.strip() != lbl:
290 raise error.Abort(_("leading or trailing whitespace in name %r") % lbl)
290 raise error.Abort(_("leading or trailing whitespace in name %r") % lbl)
291
291
292 def checkfilename(f):
292 def checkfilename(f):
293 '''Check that the filename f is an acceptable filename for a tracked file'''
293 '''Check that the filename f is an acceptable filename for a tracked file'''
294 if '\r' in f or '\n' in f:
294 if '\r' in f or '\n' in f:
295 raise error.Abort(_("'\\n' and '\\r' disallowed in filenames: %r")
295 raise error.Abort(_("'\\n' and '\\r' disallowed in filenames: %r")
296 % pycompat.bytestr(f))
296 % pycompat.bytestr(f))
297
297
298 def checkportable(ui, f):
298 def checkportable(ui, f):
299 '''Check if filename f is portable and warn or abort depending on config'''
299 '''Check if filename f is portable and warn or abort depending on config'''
300 checkfilename(f)
300 checkfilename(f)
301 abort, warn = checkportabilityalert(ui)
301 abort, warn = checkportabilityalert(ui)
302 if abort or warn:
302 if abort or warn:
303 msg = util.checkwinfilename(f)
303 msg = util.checkwinfilename(f)
304 if msg:
304 if msg:
305 msg = "%s: %s" % (msg, procutil.shellquote(f))
305 msg = "%s: %s" % (msg, procutil.shellquote(f))
306 if abort:
306 if abort:
307 raise error.Abort(msg)
307 raise error.Abort(msg)
308 ui.warn(_("warning: %s\n") % msg)
308 ui.warn(_("warning: %s\n") % msg)
309
309
310 def checkportabilityalert(ui):
310 def checkportabilityalert(ui):
311 '''check if the user's config requests nothing, a warning, or abort for
311 '''check if the user's config requests nothing, a warning, or abort for
312 non-portable filenames'''
312 non-portable filenames'''
313 val = ui.config('ui', 'portablefilenames')
313 val = ui.config('ui', 'portablefilenames')
314 lval = val.lower()
314 lval = val.lower()
315 bval = stringutil.parsebool(val)
315 bval = stringutil.parsebool(val)
316 abort = pycompat.iswindows or lval == 'abort'
316 abort = pycompat.iswindows or lval == 'abort'
317 warn = bval or lval == 'warn'
317 warn = bval or lval == 'warn'
318 if bval is None and not (warn or abort or lval == 'ignore'):
318 if bval is None and not (warn or abort or lval == 'ignore'):
319 raise error.ConfigError(
319 raise error.ConfigError(
320 _("ui.portablefilenames value is invalid ('%s')") % val)
320 _("ui.portablefilenames value is invalid ('%s')") % val)
321 return abort, warn
321 return abort, warn
322
322
323 class casecollisionauditor(object):
323 class casecollisionauditor(object):
324 def __init__(self, ui, abort, dirstate):
324 def __init__(self, ui, abort, dirstate):
325 self._ui = ui
325 self._ui = ui
326 self._abort = abort
326 self._abort = abort
327 allfiles = '\0'.join(dirstate._map)
327 allfiles = '\0'.join(dirstate._map)
328 self._loweredfiles = set(encoding.lower(allfiles).split('\0'))
328 self._loweredfiles = set(encoding.lower(allfiles).split('\0'))
329 self._dirstate = dirstate
329 self._dirstate = dirstate
330 # The purpose of _newfiles is so that we don't complain about
330 # The purpose of _newfiles is so that we don't complain about
331 # case collisions if someone were to call this object with the
331 # case collisions if someone were to call this object with the
332 # same filename twice.
332 # same filename twice.
333 self._newfiles = set()
333 self._newfiles = set()
334
334
335 def __call__(self, f):
335 def __call__(self, f):
336 if f in self._newfiles:
336 if f in self._newfiles:
337 return
337 return
338 fl = encoding.lower(f)
338 fl = encoding.lower(f)
339 if fl in self._loweredfiles and f not in self._dirstate:
339 if fl in self._loweredfiles and f not in self._dirstate:
340 msg = _('possible case-folding collision for %s') % f
340 msg = _('possible case-folding collision for %s') % f
341 if self._abort:
341 if self._abort:
342 raise error.Abort(msg)
342 raise error.Abort(msg)
343 self._ui.warn(_("warning: %s\n") % msg)
343 self._ui.warn(_("warning: %s\n") % msg)
344 self._loweredfiles.add(fl)
344 self._loweredfiles.add(fl)
345 self._newfiles.add(f)
345 self._newfiles.add(f)
346
346
347 def filteredhash(repo, maxrev):
347 def filteredhash(repo, maxrev):
348 """build hash of filtered revisions in the current repoview.
348 """build hash of filtered revisions in the current repoview.
349
349
350 Multiple caches perform up-to-date validation by checking that the
350 Multiple caches perform up-to-date validation by checking that the
351 tiprev and tipnode stored in the cache file match the current repository.
351 tiprev and tipnode stored in the cache file match the current repository.
352 However, this is not sufficient for validating repoviews because the set
352 However, this is not sufficient for validating repoviews because the set
353 of revisions in the view may change without the repository tiprev and
353 of revisions in the view may change without the repository tiprev and
354 tipnode changing.
354 tipnode changing.
355
355
356 This function hashes all the revs filtered from the view and returns
356 This function hashes all the revs filtered from the view and returns
357 that SHA-1 digest.
357 that SHA-1 digest.
358 """
358 """
359 cl = repo.changelog
359 cl = repo.changelog
360 if not cl.filteredrevs:
360 if not cl.filteredrevs:
361 return None
361 return None
362 key = None
362 key = None
363 revs = sorted(r for r in cl.filteredrevs if r <= maxrev)
363 revs = sorted(r for r in cl.filteredrevs if r <= maxrev)
364 if revs:
364 if revs:
365 s = hashlib.sha1()
365 s = hashlib.sha1()
366 for rev in revs:
366 for rev in revs:
367 s.update('%d;' % rev)
367 s.update('%d;' % rev)
368 key = s.digest()
368 key = s.digest()
369 return key
369 return key
370
370
371 def walkrepos(path, followsym=False, seen_dirs=None, recurse=False):
371 def walkrepos(path, followsym=False, seen_dirs=None, recurse=False):
372 '''yield every hg repository under path, always recursively.
372 '''yield every hg repository under path, always recursively.
373 The recurse flag will only control recursion into repo working dirs'''
373 The recurse flag will only control recursion into repo working dirs'''
374 def errhandler(err):
374 def errhandler(err):
375 if err.filename == path:
375 if err.filename == path:
376 raise err
376 raise err
377 samestat = getattr(os.path, 'samestat', None)
377 samestat = getattr(os.path, 'samestat', None)
378 if followsym and samestat is not None:
378 if followsym and samestat is not None:
379 def adddir(dirlst, dirname):
379 def adddir(dirlst, dirname):
380 dirstat = os.stat(dirname)
380 dirstat = os.stat(dirname)
381 match = any(samestat(dirstat, lstdirstat) for lstdirstat in dirlst)
381 match = any(samestat(dirstat, lstdirstat) for lstdirstat in dirlst)
382 if not match:
382 if not match:
383 dirlst.append(dirstat)
383 dirlst.append(dirstat)
384 return not match
384 return not match
385 else:
385 else:
386 followsym = False
386 followsym = False
387
387
388 if (seen_dirs is None) and followsym:
388 if (seen_dirs is None) and followsym:
389 seen_dirs = []
389 seen_dirs = []
390 adddir(seen_dirs, path)
390 adddir(seen_dirs, path)
391 for root, dirs, files in os.walk(path, topdown=True, onerror=errhandler):
391 for root, dirs, files in os.walk(path, topdown=True, onerror=errhandler):
392 dirs.sort()
392 dirs.sort()
393 if '.hg' in dirs:
393 if '.hg' in dirs:
394 yield root # found a repository
394 yield root # found a repository
395 qroot = os.path.join(root, '.hg', 'patches')
395 qroot = os.path.join(root, '.hg', 'patches')
396 if os.path.isdir(os.path.join(qroot, '.hg')):
396 if os.path.isdir(os.path.join(qroot, '.hg')):
397 yield qroot # we have a patch queue repo here
397 yield qroot # we have a patch queue repo here
398 if recurse:
398 if recurse:
399 # avoid recursing inside the .hg directory
399 # avoid recursing inside the .hg directory
400 dirs.remove('.hg')
400 dirs.remove('.hg')
401 else:
401 else:
402 dirs[:] = [] # don't descend further
402 dirs[:] = [] # don't descend further
403 elif followsym:
403 elif followsym:
404 newdirs = []
404 newdirs = []
405 for d in dirs:
405 for d in dirs:
406 fname = os.path.join(root, d)
406 fname = os.path.join(root, d)
407 if adddir(seen_dirs, fname):
407 if adddir(seen_dirs, fname):
408 if os.path.islink(fname):
408 if os.path.islink(fname):
409 for hgname in walkrepos(fname, True, seen_dirs):
409 for hgname in walkrepos(fname, True, seen_dirs):
410 yield hgname
410 yield hgname
411 else:
411 else:
412 newdirs.append(d)
412 newdirs.append(d)
413 dirs[:] = newdirs
413 dirs[:] = newdirs
414
414
415 def binnode(ctx):
415 def binnode(ctx):
416 """Return binary node id for a given basectx"""
416 """Return binary node id for a given basectx"""
417 node = ctx.node()
417 node = ctx.node()
418 if node is None:
418 if node is None:
419 return wdirid
419 return wdirid
420 return node
420 return node
421
421
422 def intrev(ctx):
422 def intrev(ctx):
423 """Return integer for a given basectx that can be used in comparison or
423 """Return integer for a given basectx that can be used in comparison or
424 arithmetic operation"""
424 arithmetic operation"""
425 rev = ctx.rev()
425 rev = ctx.rev()
426 if rev is None:
426 if rev is None:
427 return wdirrev
427 return wdirrev
428 return rev
428 return rev
429
429
430 def formatchangeid(ctx):
430 def formatchangeid(ctx):
431 """Format changectx as '{rev}:{node|formatnode}', which is the default
431 """Format changectx as '{rev}:{node|formatnode}', which is the default
432 template provided by logcmdutil.changesettemplater"""
432 template provided by logcmdutil.changesettemplater"""
433 repo = ctx.repo()
433 repo = ctx.repo()
434 return formatrevnode(repo.ui, intrev(ctx), binnode(ctx))
434 return formatrevnode(repo.ui, intrev(ctx), binnode(ctx))
435
435
436 def formatrevnode(ui, rev, node):
436 def formatrevnode(ui, rev, node):
437 """Format given revision and node depending on the current verbosity"""
437 """Format given revision and node depending on the current verbosity"""
438 if ui.debugflag:
438 if ui.debugflag:
439 hexfunc = hex
439 hexfunc = hex
440 else:
440 else:
441 hexfunc = short
441 hexfunc = short
442 return '%d:%s' % (rev, hexfunc(node))
442 return '%d:%s' % (rev, hexfunc(node))
443
443
444 def resolvehexnodeidprefix(repo, prefix):
444 def resolvehexnodeidprefix(repo, prefix):
445 if (prefix.startswith('x') and
445 if (prefix.startswith('x') and
446 repo.ui.configbool('experimental', 'revisions.prefixhexnode')):
446 repo.ui.configbool('experimental', 'revisions.prefixhexnode')):
447 prefix = prefix[1:]
447 prefix = prefix[1:]
448 try:
448 try:
449 # Uses unfiltered repo because it's faster when prefix is ambiguous/
449 # Uses unfiltered repo because it's faster when prefix is ambiguous/
450 # This matches the shortesthexnodeidprefix() function below.
450 # This matches the shortesthexnodeidprefix() function below.
451 node = repo.unfiltered().changelog._partialmatch(prefix)
451 node = repo.unfiltered().changelog._partialmatch(prefix)
452 except error.AmbiguousPrefixLookupError:
452 except error.AmbiguousPrefixLookupError:
453 revset = repo.ui.config('experimental', 'revisions.disambiguatewithin')
453 revset = repo.ui.config('experimental', 'revisions.disambiguatewithin')
454 if revset:
454 if revset:
455 # Clear config to avoid infinite recursion
455 # Clear config to avoid infinite recursion
456 configoverrides = {('experimental',
456 configoverrides = {('experimental',
457 'revisions.disambiguatewithin'): None}
457 'revisions.disambiguatewithin'): None}
458 with repo.ui.configoverride(configoverrides):
458 with repo.ui.configoverride(configoverrides):
459 revs = repo.anyrevs([revset], user=True)
459 revs = repo.anyrevs([revset], user=True)
460 matches = []
460 matches = []
461 for rev in revs:
461 for rev in revs:
462 node = repo.changelog.node(rev)
462 node = repo.changelog.node(rev)
463 if hex(node).startswith(prefix):
463 if hex(node).startswith(prefix):
464 matches.append(node)
464 matches.append(node)
465 if len(matches) == 1:
465 if len(matches) == 1:
466 return matches[0]
466 return matches[0]
467 raise
467 raise
468 if node is None:
468 if node is None:
469 return
469 return
470 repo.changelog.rev(node) # make sure node isn't filtered
470 repo.changelog.rev(node) # make sure node isn't filtered
471 return node
471 return node
472
472
473 def mayberevnum(repo, prefix):
473 def mayberevnum(repo, prefix):
474 """Checks if the given prefix may be mistaken for a revision number"""
474 """Checks if the given prefix may be mistaken for a revision number"""
475 try:
475 try:
476 i = int(prefix)
476 i = int(prefix)
477 # if we are a pure int, then starting with zero will not be
477 # if we are a pure int, then starting with zero will not be
478 # confused as a rev; or, obviously, if the int is larger
478 # confused as a rev; or, obviously, if the int is larger
479 # than the value of the tip rev
479 # than the value of the tip rev
480 if prefix[0:1] == b'0' or i >= len(repo):
480 if prefix[0:1] == b'0' or i >= len(repo):
481 return False
481 return False
482 return True
482 return True
483 except ValueError:
483 except ValueError:
484 return False
484 return False
485
485
486 def shortesthexnodeidprefix(repo, node, minlength=1, cache=None):
486 def shortesthexnodeidprefix(repo, node, minlength=1, cache=None):
487 """Find the shortest unambiguous prefix that matches hexnode.
487 """Find the shortest unambiguous prefix that matches hexnode.
488
488
489 If "cache" is not None, it must be a dictionary that can be used for
489 If "cache" is not None, it must be a dictionary that can be used for
490 caching between calls to this method.
490 caching between calls to this method.
491 """
491 """
492 # _partialmatch() of filtered changelog could take O(len(repo)) time,
492 # _partialmatch() of filtered changelog could take O(len(repo)) time,
493 # which would be unacceptably slow. so we look for hash collision in
493 # which would be unacceptably slow. so we look for hash collision in
494 # unfiltered space, which means some hashes may be slightly longer.
494 # unfiltered space, which means some hashes may be slightly longer.
495
495
496 def disambiguate(prefix):
496 def disambiguate(prefix):
497 """Disambiguate against revnums."""
497 """Disambiguate against revnums."""
498 if repo.ui.configbool('experimental', 'revisions.prefixhexnode'):
498 if repo.ui.configbool('experimental', 'revisions.prefixhexnode'):
499 if mayberevnum(repo, prefix):
499 if mayberevnum(repo, prefix):
500 return 'x' + prefix
500 return 'x' + prefix
501 else:
501 else:
502 return prefix
502 return prefix
503
503
504 hexnode = hex(node)
504 hexnode = hex(node)
505 for length in range(len(prefix), len(hexnode) + 1):
505 for length in range(len(prefix), len(hexnode) + 1):
506 prefix = hexnode[:length]
506 prefix = hexnode[:length]
507 if not mayberevnum(repo, prefix):
507 if not mayberevnum(repo, prefix):
508 return prefix
508 return prefix
509
509
510 cl = repo.unfiltered().changelog
510 cl = repo.unfiltered().changelog
511 revset = repo.ui.config('experimental', 'revisions.disambiguatewithin')
511 revset = repo.ui.config('experimental', 'revisions.disambiguatewithin')
512 if revset:
512 if revset:
513 revs = None
513 revs = None
514 if cache is not None:
514 if cache is not None:
515 revs = cache.get('disambiguationrevset')
515 revs = cache.get('disambiguationrevset')
516 if revs is None:
516 if revs is None:
517 revs = repo.anyrevs([revset], user=True)
517 revs = repo.anyrevs([revset], user=True)
518 if cache is not None:
518 if cache is not None:
519 cache['disambiguationrevset'] = revs
519 cache['disambiguationrevset'] = revs
520 if cl.rev(node) in revs:
520 if cl.rev(node) in revs:
521 hexnode = hex(node)
521 hexnode = hex(node)
522 nodetree = None
522 nodetree = None
523 if cache is not None:
523 if cache is not None:
524 nodetree = cache.get('disambiguationnodetree')
524 nodetree = cache.get('disambiguationnodetree')
525 if not nodetree:
525 if not nodetree:
526 try:
526 try:
527 nodetree = parsers.nodetree(cl.index, len(revs))
527 nodetree = parsers.nodetree(cl.index, len(revs))
528 except AttributeError:
528 except AttributeError:
529 # no native nodetree
529 # no native nodetree
530 pass
530 pass
531 else:
531 else:
532 for r in revs:
532 for r in revs:
533 nodetree.insert(r)
533 nodetree.insert(r)
534 if cache is not None:
534 if cache is not None:
535 cache['disambiguationnodetree'] = nodetree
535 cache['disambiguationnodetree'] = nodetree
536 if nodetree is not None:
536 if nodetree is not None:
537 length = max(nodetree.shortest(node), minlength)
537 length = max(nodetree.shortest(node), minlength)
538 prefix = hexnode[:length]
538 prefix = hexnode[:length]
539 return disambiguate(prefix)
539 return disambiguate(prefix)
540 for length in range(minlength, len(hexnode) + 1):
540 for length in range(minlength, len(hexnode) + 1):
541 matches = []
541 matches = []
542 prefix = hexnode[:length]
542 prefix = hexnode[:length]
543 for rev in revs:
543 for rev in revs:
544 otherhexnode = repo[rev].hex()
544 otherhexnode = repo[rev].hex()
545 if prefix == otherhexnode[:length]:
545 if prefix == otherhexnode[:length]:
546 matches.append(otherhexnode)
546 matches.append(otherhexnode)
547 if len(matches) == 1:
547 if len(matches) == 1:
548 return disambiguate(prefix)
548 return disambiguate(prefix)
549
549
550 try:
550 try:
551 return disambiguate(cl.shortest(node, minlength))
551 return disambiguate(cl.shortest(node, minlength))
552 except error.LookupError:
552 except error.LookupError:
553 raise error.RepoLookupError()
553 raise error.RepoLookupError()
554
554
555 def isrevsymbol(repo, symbol):
555 def isrevsymbol(repo, symbol):
556 """Checks if a symbol exists in the repo.
556 """Checks if a symbol exists in the repo.
557
557
558 See revsymbol() for details. Raises error.AmbiguousPrefixLookupError if the
558 See revsymbol() for details. Raises error.AmbiguousPrefixLookupError if the
559 symbol is an ambiguous nodeid prefix.
559 symbol is an ambiguous nodeid prefix.
560 """
560 """
561 try:
561 try:
562 revsymbol(repo, symbol)
562 revsymbol(repo, symbol)
563 return True
563 return True
564 except error.RepoLookupError:
564 except error.RepoLookupError:
565 return False
565 return False
566
566
567 def revsymbol(repo, symbol):
567 def revsymbol(repo, symbol):
568 """Returns a context given a single revision symbol (as string).
568 """Returns a context given a single revision symbol (as string).
569
569
570 This is similar to revsingle(), but accepts only a single revision symbol,
570 This is similar to revsingle(), but accepts only a single revision symbol,
571 i.e. things like ".", "tip", "1234", "deadbeef", "my-bookmark" work, but
571 i.e. things like ".", "tip", "1234", "deadbeef", "my-bookmark" work, but
572 not "max(public())".
572 not "max(public())".
573 """
573 """
574 if not isinstance(symbol, bytes):
574 if not isinstance(symbol, bytes):
575 msg = ("symbol (%s of type %s) was not a string, did you mean "
575 msg = ("symbol (%s of type %s) was not a string, did you mean "
576 "repo[symbol]?" % (symbol, type(symbol)))
576 "repo[symbol]?" % (symbol, type(symbol)))
577 raise error.ProgrammingError(msg)
577 raise error.ProgrammingError(msg)
578 try:
578 try:
579 if symbol in ('.', 'tip', 'null'):
579 if symbol in ('.', 'tip', 'null'):
580 return repo[symbol]
580 return repo[symbol]
581
581
582 try:
582 try:
583 r = int(symbol)
583 r = int(symbol)
584 if '%d' % r != symbol:
584 if '%d' % r != symbol:
585 raise ValueError
585 raise ValueError
586 l = len(repo.changelog)
586 l = len(repo.changelog)
587 if r < 0:
587 if r < 0:
588 r += l
588 r += l
589 if r < 0 or r >= l and r != wdirrev:
589 if r < 0 or r >= l and r != wdirrev:
590 raise ValueError
590 raise ValueError
591 return repo[r]
591 return repo[r]
592 except error.FilteredIndexError:
592 except error.FilteredIndexError:
593 raise
593 raise
594 except (ValueError, OverflowError, IndexError):
594 except (ValueError, OverflowError, IndexError):
595 pass
595 pass
596
596
597 if len(symbol) == 40:
597 if len(symbol) == 40:
598 try:
598 try:
599 node = bin(symbol)
599 node = bin(symbol)
600 rev = repo.changelog.rev(node)
600 rev = repo.changelog.rev(node)
601 return repo[rev]
601 return repo[rev]
602 except error.FilteredLookupError:
602 except error.FilteredLookupError:
603 raise
603 raise
604 except (TypeError, LookupError):
604 except (TypeError, LookupError):
605 pass
605 pass
606
606
607 # look up bookmarks through the name interface
607 # look up bookmarks through the name interface
608 try:
608 try:
609 node = repo.names.singlenode(repo, symbol)
609 node = repo.names.singlenode(repo, symbol)
610 rev = repo.changelog.rev(node)
610 rev = repo.changelog.rev(node)
611 return repo[rev]
611 return repo[rev]
612 except KeyError:
612 except KeyError:
613 pass
613 pass
614
614
615 node = resolvehexnodeidprefix(repo, symbol)
615 node = resolvehexnodeidprefix(repo, symbol)
616 if node is not None:
616 if node is not None:
617 rev = repo.changelog.rev(node)
617 rev = repo.changelog.rev(node)
618 return repo[rev]
618 return repo[rev]
619
619
620 raise error.RepoLookupError(_("unknown revision '%s'") % symbol)
620 raise error.RepoLookupError(_("unknown revision '%s'") % symbol)
621
621
622 except error.WdirUnsupported:
622 except error.WdirUnsupported:
623 return repo[None]
623 return repo[None]
624 except (error.FilteredIndexError, error.FilteredLookupError,
624 except (error.FilteredIndexError, error.FilteredLookupError,
625 error.FilteredRepoLookupError):
625 error.FilteredRepoLookupError):
626 raise _filterederror(repo, symbol)
626 raise _filterederror(repo, symbol)
627
627
628 def _filterederror(repo, changeid):
628 def _filterederror(repo, changeid):
629 """build an exception to be raised about a filtered changeid
629 """build an exception to be raised about a filtered changeid
630
630
631 This is extracted in a function to help extensions (eg: evolve) to
631 This is extracted in a function to help extensions (eg: evolve) to
632 experiment with various message variants."""
632 experiment with various message variants."""
633 if repo.filtername.startswith('visible'):
633 if repo.filtername.startswith('visible'):
634
634
635 # Check if the changeset is obsolete
635 # Check if the changeset is obsolete
636 unfilteredrepo = repo.unfiltered()
636 unfilteredrepo = repo.unfiltered()
637 ctx = revsymbol(unfilteredrepo, changeid)
637 ctx = revsymbol(unfilteredrepo, changeid)
638
638
639 # If the changeset is obsolete, enrich the message with the reason
639 # If the changeset is obsolete, enrich the message with the reason
640 # that made this changeset not visible
640 # that made this changeset not visible
641 if ctx.obsolete():
641 if ctx.obsolete():
642 msg = obsutil._getfilteredreason(repo, changeid, ctx)
642 msg = obsutil._getfilteredreason(repo, changeid, ctx)
643 else:
643 else:
644 msg = _("hidden revision '%s'") % changeid
644 msg = _("hidden revision '%s'") % changeid
645
645
646 hint = _('use --hidden to access hidden revisions')
646 hint = _('use --hidden to access hidden revisions')
647
647
648 return error.FilteredRepoLookupError(msg, hint=hint)
648 return error.FilteredRepoLookupError(msg, hint=hint)
649 msg = _("filtered revision '%s' (not in '%s' subset)")
649 msg = _("filtered revision '%s' (not in '%s' subset)")
650 msg %= (changeid, repo.filtername)
650 msg %= (changeid, repo.filtername)
651 return error.FilteredRepoLookupError(msg)
651 return error.FilteredRepoLookupError(msg)
652
652
653 def revsingle(repo, revspec, default='.', localalias=None):
653 def revsingle(repo, revspec, default='.', localalias=None):
654 if not revspec and revspec != 0:
654 if not revspec and revspec != 0:
655 return repo[default]
655 return repo[default]
656
656
657 l = revrange(repo, [revspec], localalias=localalias)
657 l = revrange(repo, [revspec], localalias=localalias)
658 if not l:
658 if not l:
659 raise error.Abort(_('empty revision set'))
659 raise error.Abort(_('empty revision set'))
660 return repo[l.last()]
660 return repo[l.last()]
661
661
662 def _pairspec(revspec):
662 def _pairspec(revspec):
663 tree = revsetlang.parse(revspec)
663 tree = revsetlang.parse(revspec)
664 return tree and tree[0] in ('range', 'rangepre', 'rangepost', 'rangeall')
664 return tree and tree[0] in ('range', 'rangepre', 'rangepost', 'rangeall')
665
665
666 def revpair(repo, revs):
666 def revpair(repo, revs):
667 if not revs:
667 if not revs:
668 return repo['.'], repo[None]
668 return repo['.'], repo[None]
669
669
670 l = revrange(repo, revs)
670 l = revrange(repo, revs)
671
671
672 if not l:
672 if not l:
673 first = second = None
673 first = second = None
674 elif l.isascending():
674 elif l.isascending():
675 first = l.min()
675 first = l.min()
676 second = l.max()
676 second = l.max()
677 elif l.isdescending():
677 elif l.isdescending():
678 first = l.max()
678 first = l.max()
679 second = l.min()
679 second = l.min()
680 else:
680 else:
681 first = l.first()
681 first = l.first()
682 second = l.last()
682 second = l.last()
683
683
684 if first is None:
684 if first is None:
685 raise error.Abort(_('empty revision range'))
685 raise error.Abort(_('empty revision range'))
686 if (first == second and len(revs) >= 2
686 if (first == second and len(revs) >= 2
687 and not all(revrange(repo, [r]) for r in revs)):
687 and not all(revrange(repo, [r]) for r in revs)):
688 raise error.Abort(_('empty revision on one side of range'))
688 raise error.Abort(_('empty revision on one side of range'))
689
689
690 # if top-level is range expression, the result must always be a pair
690 # if top-level is range expression, the result must always be a pair
691 if first == second and len(revs) == 1 and not _pairspec(revs[0]):
691 if first == second and len(revs) == 1 and not _pairspec(revs[0]):
692 return repo[first], repo[None]
692 return repo[first], repo[None]
693
693
694 return repo[first], repo[second]
694 return repo[first], repo[second]
695
695
696 def revrange(repo, specs, localalias=None):
696 def revrange(repo, specs, localalias=None):
697 """Execute 1 to many revsets and return the union.
697 """Execute 1 to many revsets and return the union.
698
698
699 This is the preferred mechanism for executing revsets using user-specified
699 This is the preferred mechanism for executing revsets using user-specified
700 config options, such as revset aliases.
700 config options, such as revset aliases.
701
701
702 The revsets specified by ``specs`` will be executed via a chained ``OR``
702 The revsets specified by ``specs`` will be executed via a chained ``OR``
703 expression. If ``specs`` is empty, an empty result is returned.
703 expression. If ``specs`` is empty, an empty result is returned.
704
704
705 ``specs`` can contain integers, in which case they are assumed to be
705 ``specs`` can contain integers, in which case they are assumed to be
706 revision numbers.
706 revision numbers.
707
707
708 It is assumed the revsets are already formatted. If you have arguments
708 It is assumed the revsets are already formatted. If you have arguments
709 that need to be expanded in the revset, call ``revsetlang.formatspec()``
709 that need to be expanded in the revset, call ``revsetlang.formatspec()``
710 and pass the result as an element of ``specs``.
710 and pass the result as an element of ``specs``.
711
711
712 Specifying a single revset is allowed.
712 Specifying a single revset is allowed.
713
713
714 Returns a ``revset.abstractsmartset`` which is a list-like interface over
714 Returns a ``revset.abstractsmartset`` which is a list-like interface over
715 integer revisions.
715 integer revisions.
716 """
716 """
717 allspecs = []
717 allspecs = []
718 for spec in specs:
718 for spec in specs:
719 if isinstance(spec, int):
719 if isinstance(spec, int):
720 spec = revsetlang.formatspec('rev(%d)', spec)
720 spec = revsetlang.formatspec('rev(%d)', spec)
721 allspecs.append(spec)
721 allspecs.append(spec)
722 return repo.anyrevs(allspecs, user=True, localalias=localalias)
722 return repo.anyrevs(allspecs, user=True, localalias=localalias)
723
723
724 def meaningfulparents(repo, ctx):
724 def meaningfulparents(repo, ctx):
725 """Return list of meaningful (or all if debug) parentrevs for rev.
725 """Return list of meaningful (or all if debug) parentrevs for rev.
726
726
727 For merges (two non-nullrev revisions) both parents are meaningful.
727 For merges (two non-nullrev revisions) both parents are meaningful.
728 Otherwise the first parent revision is considered meaningful if it
728 Otherwise the first parent revision is considered meaningful if it
729 is not the preceding revision.
729 is not the preceding revision.
730 """
730 """
731 parents = ctx.parents()
731 parents = ctx.parents()
732 if len(parents) > 1:
732 if len(parents) > 1:
733 return parents
733 return parents
734 if repo.ui.debugflag:
734 if repo.ui.debugflag:
735 return [parents[0], repo[nullrev]]
735 return [parents[0], repo[nullrev]]
736 if parents[0].rev() >= intrev(ctx) - 1:
736 if parents[0].rev() >= intrev(ctx) - 1:
737 return []
737 return []
738 return parents
738 return parents
739
739
740 def expandpats(pats):
740 def expandpats(pats):
741 '''Expand bare globs when running on windows.
741 '''Expand bare globs when running on windows.
742 On posix we assume it already has already been done by sh.'''
742 On posix we assume it already has already been done by sh.'''
743 if not util.expandglobs:
743 if not util.expandglobs:
744 return list(pats)
744 return list(pats)
745 ret = []
745 ret = []
746 for kindpat in pats:
746 for kindpat in pats:
747 kind, pat = matchmod._patsplit(kindpat, None)
747 kind, pat = matchmod._patsplit(kindpat, None)
748 if kind is None:
748 if kind is None:
749 try:
749 try:
750 globbed = glob.glob(pat)
750 globbed = glob.glob(pat)
751 except re.error:
751 except re.error:
752 globbed = [pat]
752 globbed = [pat]
753 if globbed:
753 if globbed:
754 ret.extend(globbed)
754 ret.extend(globbed)
755 continue
755 continue
756 ret.append(kindpat)
756 ret.append(kindpat)
757 return ret
757 return ret
758
758
759 def matchandpats(ctx, pats=(), opts=None, globbed=False, default='relpath',
759 def matchandpats(ctx, pats=(), opts=None, globbed=False, default='relpath',
760 badfn=None):
760 badfn=None):
761 '''Return a matcher and the patterns that were used.
761 '''Return a matcher and the patterns that were used.
762 The matcher will warn about bad matches, unless an alternate badfn callback
762 The matcher will warn about bad matches, unless an alternate badfn callback
763 is provided.'''
763 is provided.'''
764 if pats == ("",):
764 if pats == ("",):
765 pats = []
765 pats = []
766 if opts is None:
766 if opts is None:
767 opts = {}
767 opts = {}
768 if not globbed and default == 'relpath':
768 if not globbed and default == 'relpath':
769 pats = expandpats(pats or [])
769 pats = expandpats(pats or [])
770
770
771 def bad(f, msg):
771 def bad(f, msg):
772 ctx.repo().ui.warn("%s: %s\n" % (m.rel(f), msg))
772 ctx.repo().ui.warn("%s: %s\n" % (m.rel(f), msg))
773
773
774 if badfn is None:
774 if badfn is None:
775 badfn = bad
775 badfn = bad
776
776
777 m = ctx.match(pats, opts.get('include'), opts.get('exclude'),
777 m = ctx.match(pats, opts.get('include'), opts.get('exclude'),
778 default, listsubrepos=opts.get('subrepos'), badfn=badfn)
778 default, listsubrepos=opts.get('subrepos'), badfn=badfn)
779
779
780 if m.always():
780 if m.always():
781 pats = []
781 pats = []
782 return m, pats
782 return m, pats
783
783
784 def match(ctx, pats=(), opts=None, globbed=False, default='relpath',
784 def match(ctx, pats=(), opts=None, globbed=False, default='relpath',
785 badfn=None):
785 badfn=None):
786 '''Return a matcher that will warn about bad matches.'''
786 '''Return a matcher that will warn about bad matches.'''
787 return matchandpats(ctx, pats, opts, globbed, default, badfn=badfn)[0]
787 return matchandpats(ctx, pats, opts, globbed, default, badfn=badfn)[0]
788
788
789 def matchall(repo):
789 def matchall(repo):
790 '''Return a matcher that will efficiently match everything.'''
790 '''Return a matcher that will efficiently match everything.'''
791 return matchmod.always(repo.root, repo.getcwd())
791 return matchmod.always(repo.root, repo.getcwd())
792
792
793 def matchfiles(repo, files, badfn=None):
793 def matchfiles(repo, files, badfn=None):
794 '''Return a matcher that will efficiently match exactly these files.'''
794 '''Return a matcher that will efficiently match exactly these files.'''
795 return matchmod.exact(repo.root, repo.getcwd(), files, badfn=badfn)
795 return matchmod.exact(repo.root, repo.getcwd(), files, badfn=badfn)
796
796
797 def parsefollowlinespattern(repo, rev, pat, msg):
797 def parsefollowlinespattern(repo, rev, pat, msg):
798 """Return a file name from `pat` pattern suitable for usage in followlines
798 """Return a file name from `pat` pattern suitable for usage in followlines
799 logic.
799 logic.
800 """
800 """
801 if not matchmod.patkind(pat):
801 if not matchmod.patkind(pat):
802 return pathutil.canonpath(repo.root, repo.getcwd(), pat)
802 return pathutil.canonpath(repo.root, repo.getcwd(), pat)
803 else:
803 else:
804 ctx = repo[rev]
804 ctx = repo[rev]
805 m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=ctx)
805 m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=ctx)
806 files = [f for f in ctx if m(f)]
806 files = [f for f in ctx if m(f)]
807 if len(files) != 1:
807 if len(files) != 1:
808 raise error.ParseError(msg)
808 raise error.ParseError(msg)
809 return files[0]
809 return files[0]
810
810
811 def origpath(ui, repo, filepath):
811 def origpath(ui, repo, filepath):
812 '''customize where .orig files are created
812 '''customize where .orig files are created
813
813
814 Fetch user defined path from config file: [ui] origbackuppath = <path>
814 Fetch user defined path from config file: [ui] origbackuppath = <path>
815 Fall back to default (filepath with .orig suffix) if not specified
815 Fall back to default (filepath with .orig suffix) if not specified
816 '''
816 '''
817 origbackuppath = ui.config('ui', 'origbackuppath')
817 origbackuppath = ui.config('ui', 'origbackuppath')
818 if not origbackuppath:
818 if not origbackuppath:
819 return filepath + ".orig"
819 return filepath + ".orig"
820
820
821 # Convert filepath from an absolute path into a path inside the repo.
821 # Convert filepath from an absolute path into a path inside the repo.
822 filepathfromroot = util.normpath(os.path.relpath(filepath,
822 filepathfromroot = util.normpath(os.path.relpath(filepath,
823 start=repo.root))
823 start=repo.root))
824
824
825 origvfs = vfs.vfs(repo.wjoin(origbackuppath))
825 origvfs = vfs.vfs(repo.wjoin(origbackuppath))
826 origbackupdir = origvfs.dirname(filepathfromroot)
826 origbackupdir = origvfs.dirname(filepathfromroot)
827 if not origvfs.isdir(origbackupdir) or origvfs.islink(origbackupdir):
827 if not origvfs.isdir(origbackupdir) or origvfs.islink(origbackupdir):
828 ui.note(_('creating directory: %s\n') % origvfs.join(origbackupdir))
828 ui.note(_('creating directory: %s\n') % origvfs.join(origbackupdir))
829
829
830 # Remove any files that conflict with the backup file's path
830 # Remove any files that conflict with the backup file's path
831 for f in reversed(list(util.finddirs(filepathfromroot))):
831 for f in reversed(list(util.finddirs(filepathfromroot))):
832 if origvfs.isfileorlink(f):
832 if origvfs.isfileorlink(f):
833 ui.note(_('removing conflicting file: %s\n')
833 ui.note(_('removing conflicting file: %s\n')
834 % origvfs.join(f))
834 % origvfs.join(f))
835 origvfs.unlink(f)
835 origvfs.unlink(f)
836 break
836 break
837
837
838 origvfs.makedirs(origbackupdir)
838 origvfs.makedirs(origbackupdir)
839
839
840 if origvfs.isdir(filepathfromroot) and not origvfs.islink(filepathfromroot):
840 if origvfs.isdir(filepathfromroot) and not origvfs.islink(filepathfromroot):
841 ui.note(_('removing conflicting directory: %s\n')
841 ui.note(_('removing conflicting directory: %s\n')
842 % origvfs.join(filepathfromroot))
842 % origvfs.join(filepathfromroot))
843 origvfs.rmtree(filepathfromroot, forcibly=True)
843 origvfs.rmtree(filepathfromroot, forcibly=True)
844
844
845 return origvfs.join(filepathfromroot)
845 return origvfs.join(filepathfromroot)
846
846
847 class _containsnode(object):
847 class _containsnode(object):
848 """proxy __contains__(node) to container.__contains__ which accepts revs"""
848 """proxy __contains__(node) to container.__contains__ which accepts revs"""
849
849
850 def __init__(self, repo, revcontainer):
850 def __init__(self, repo, revcontainer):
851 self._torev = repo.changelog.rev
851 self._torev = repo.changelog.rev
852 self._revcontains = revcontainer.__contains__
852 self._revcontains = revcontainer.__contains__
853
853
854 def __contains__(self, node):
854 def __contains__(self, node):
855 return self._revcontains(self._torev(node))
855 return self._revcontains(self._torev(node))
856
856
857 def cleanupnodes(repo, replacements, operation, moves=None, metadata=None,
857 def cleanupnodes(repo, replacements, operation, moves=None, metadata=None,
858 fixphase=False, targetphase=None, backup=True):
858 fixphase=False, targetphase=None, backup=True):
859 """do common cleanups when old nodes are replaced by new nodes
859 """do common cleanups when old nodes are replaced by new nodes
860
860
861 That includes writing obsmarkers or stripping nodes, and moving bookmarks.
861 That includes writing obsmarkers or stripping nodes, and moving bookmarks.
862 (we might also want to move working directory parent in the future)
862 (we might also want to move working directory parent in the future)
863
863
864 By default, bookmark moves are calculated automatically from 'replacements',
864 By default, bookmark moves are calculated automatically from 'replacements',
865 but 'moves' can be used to override that. Also, 'moves' may include
865 but 'moves' can be used to override that. Also, 'moves' may include
866 additional bookmark moves that should not have associated obsmarkers.
866 additional bookmark moves that should not have associated obsmarkers.
867
867
868 replacements is {oldnode: [newnode]} or a iterable of nodes if they do not
868 replacements is {oldnode: [newnode]} or a iterable of nodes if they do not
869 have replacements. operation is a string, like "rebase".
869 have replacements. operation is a string, like "rebase".
870
870
871 metadata is dictionary containing metadata to be stored in obsmarker if
871 metadata is dictionary containing metadata to be stored in obsmarker if
872 obsolescence is enabled.
872 obsolescence is enabled.
873 """
873 """
874 assert fixphase or targetphase is None
874 assert fixphase or targetphase is None
875 if not replacements and not moves:
875 if not replacements and not moves:
876 return
876 return
877
877
878 # translate mapping's other forms
878 # translate mapping's other forms
879 if not util.safehasattr(replacements, 'items'):
879 if not util.safehasattr(replacements, 'items'):
880 replacements = {(n,): () for n in replacements}
880 replacements = {(n,): () for n in replacements}
881 else:
881 else:
882 # upgrading non tuple "source" to tuple ones for BC
882 # upgrading non tuple "source" to tuple ones for BC
883 repls = {}
883 repls = {}
884 for key, value in replacements.items():
884 for key, value in replacements.items():
885 if not isinstance(key, tuple):
885 if not isinstance(key, tuple):
886 key = (key,)
886 key = (key,)
887 repls[key] = value
887 repls[key] = value
888 replacements = repls
888 replacements = repls
889
889
890 # Calculate bookmark movements
890 # Calculate bookmark movements
891 if moves is None:
891 if moves is None:
892 moves = {}
892 moves = {}
893 # Unfiltered repo is needed since nodes in replacements might be hidden.
893 # Unfiltered repo is needed since nodes in replacements might be hidden.
894 unfi = repo.unfiltered()
894 unfi = repo.unfiltered()
895 for oldnodes, newnodes in replacements.items():
895 for oldnodes, newnodes in replacements.items():
896 for oldnode in oldnodes:
896 for oldnode in oldnodes:
897 if oldnode in moves:
897 if oldnode in moves:
898 continue
898 continue
899 if len(newnodes) > 1:
899 if len(newnodes) > 1:
900 # usually a split, take the one with biggest rev number
900 # usually a split, take the one with biggest rev number
901 newnode = next(unfi.set('max(%ln)', newnodes)).node()
901 newnode = next(unfi.set('max(%ln)', newnodes)).node()
902 elif len(newnodes) == 0:
902 elif len(newnodes) == 0:
903 # move bookmark backwards
903 # move bookmark backwards
904 allreplaced = []
904 allreplaced = []
905 for rep in replacements:
905 for rep in replacements:
906 allreplaced.extend(rep)
906 allreplaced.extend(rep)
907 roots = list(unfi.set('max((::%n) - %ln)', oldnode,
907 roots = list(unfi.set('max((::%n) - %ln)', oldnode,
908 allreplaced))
908 allreplaced))
909 if roots:
909 if roots:
910 newnode = roots[0].node()
910 newnode = roots[0].node()
911 else:
911 else:
912 newnode = nullid
912 newnode = nullid
913 else:
913 else:
914 newnode = newnodes[0]
914 newnode = newnodes[0]
915 moves[oldnode] = newnode
915 moves[oldnode] = newnode
916
916
917 allnewnodes = [n for ns in replacements.values() for n in ns]
917 allnewnodes = [n for ns in replacements.values() for n in ns]
918 toretract = {}
918 toretract = {}
919 toadvance = {}
919 toadvance = {}
920 if fixphase:
920 if fixphase:
921 precursors = {}
921 precursors = {}
922 for oldnodes, newnodes in replacements.items():
922 for oldnodes, newnodes in replacements.items():
923 for oldnode in oldnodes:
923 for oldnode in oldnodes:
924 for newnode in newnodes:
924 for newnode in newnodes:
925 precursors.setdefault(newnode, []).append(oldnode)
925 precursors.setdefault(newnode, []).append(oldnode)
926
926
927 allnewnodes.sort(key=lambda n: unfi[n].rev())
927 allnewnodes.sort(key=lambda n: unfi[n].rev())
928 newphases = {}
928 newphases = {}
929 def phase(ctx):
929 def phase(ctx):
930 return newphases.get(ctx.node(), ctx.phase())
930 return newphases.get(ctx.node(), ctx.phase())
931 for newnode in allnewnodes:
931 for newnode in allnewnodes:
932 ctx = unfi[newnode]
932 ctx = unfi[newnode]
933 parentphase = max(phase(p) for p in ctx.parents())
933 parentphase = max(phase(p) for p in ctx.parents())
934 if targetphase is None:
934 if targetphase is None:
935 oldphase = max(unfi[oldnode].phase()
935 oldphase = max(unfi[oldnode].phase()
936 for oldnode in precursors[newnode])
936 for oldnode in precursors[newnode])
937 newphase = max(oldphase, parentphase)
937 newphase = max(oldphase, parentphase)
938 else:
938 else:
939 newphase = max(targetphase, parentphase)
939 newphase = max(targetphase, parentphase)
940 newphases[newnode] = newphase
940 newphases[newnode] = newphase
941 if newphase > ctx.phase():
941 if newphase > ctx.phase():
942 toretract.setdefault(newphase, []).append(newnode)
942 toretract.setdefault(newphase, []).append(newnode)
943 elif newphase < ctx.phase():
943 elif newphase < ctx.phase():
944 toadvance.setdefault(newphase, []).append(newnode)
944 toadvance.setdefault(newphase, []).append(newnode)
945
945
946 with repo.transaction('cleanup') as tr:
946 with repo.transaction('cleanup') as tr:
947 # Move bookmarks
947 # Move bookmarks
948 bmarks = repo._bookmarks
948 bmarks = repo._bookmarks
949 bmarkchanges = []
949 bmarkchanges = []
950 for oldnode, newnode in moves.items():
950 for oldnode, newnode in moves.items():
951 oldbmarks = repo.nodebookmarks(oldnode)
951 oldbmarks = repo.nodebookmarks(oldnode)
952 if not oldbmarks:
952 if not oldbmarks:
953 continue
953 continue
954 from . import bookmarks # avoid import cycle
954 from . import bookmarks # avoid import cycle
955 repo.ui.debug('moving bookmarks %r from %s to %s\n' %
955 repo.ui.debug('moving bookmarks %r from %s to %s\n' %
956 (pycompat.rapply(pycompat.maybebytestr, oldbmarks),
956 (pycompat.rapply(pycompat.maybebytestr, oldbmarks),
957 hex(oldnode), hex(newnode)))
957 hex(oldnode), hex(newnode)))
958 # Delete divergent bookmarks being parents of related newnodes
958 # Delete divergent bookmarks being parents of related newnodes
959 deleterevs = repo.revs('parents(roots(%ln & (::%n))) - parents(%n)',
959 deleterevs = repo.revs('parents(roots(%ln & (::%n))) - parents(%n)',
960 allnewnodes, newnode, oldnode)
960 allnewnodes, newnode, oldnode)
961 deletenodes = _containsnode(repo, deleterevs)
961 deletenodes = _containsnode(repo, deleterevs)
962 for name in oldbmarks:
962 for name in oldbmarks:
963 bmarkchanges.append((name, newnode))
963 bmarkchanges.append((name, newnode))
964 for b in bookmarks.divergent2delete(repo, deletenodes, name):
964 for b in bookmarks.divergent2delete(repo, deletenodes, name):
965 bmarkchanges.append((b, None))
965 bmarkchanges.append((b, None))
966
966
967 if bmarkchanges:
967 if bmarkchanges:
968 bmarks.applychanges(repo, tr, bmarkchanges)
968 bmarks.applychanges(repo, tr, bmarkchanges)
969
969
970 for phase, nodes in toretract.items():
970 for phase, nodes in toretract.items():
971 phases.retractboundary(repo, tr, phase, nodes)
971 phases.retractboundary(repo, tr, phase, nodes)
972 for phase, nodes in toadvance.items():
972 for phase, nodes in toadvance.items():
973 phases.advanceboundary(repo, tr, phase, nodes)
973 phases.advanceboundary(repo, tr, phase, nodes)
974
974
975 # Obsolete or strip nodes
975 # Obsolete or strip nodes
976 if obsolete.isenabled(repo, obsolete.createmarkersopt):
976 if obsolete.isenabled(repo, obsolete.createmarkersopt):
977 # If a node is already obsoleted, and we want to obsolete it
977 # If a node is already obsoleted, and we want to obsolete it
978 # without a successor, skip that obssolete request since it's
978 # without a successor, skip that obssolete request since it's
979 # unnecessary. That's the "if s or not isobs(n)" check below.
979 # unnecessary. That's the "if s or not isobs(n)" check below.
980 # Also sort the node in topology order, that might be useful for
980 # Also sort the node in topology order, that might be useful for
981 # some obsstore logic.
981 # some obsstore logic.
982 # NOTE: the filtering and sorting might belong to createmarkers.
982 # NOTE: the filtering and sorting might belong to createmarkers.
983 isobs = unfi.obsstore.successors.__contains__
983 isobs = unfi.obsstore.successors.__contains__
984 torev = unfi.changelog.rev
984 torev = unfi.changelog.rev
985 sortfunc = lambda ns: torev(ns[0][0])
985 sortfunc = lambda ns: torev(ns[0][0])
986 rels = []
986 rels = []
987 for ns, s in sorted(replacements.items(), key=sortfunc):
987 for ns, s in sorted(replacements.items(), key=sortfunc):
988 for n in ns:
988 for n in ns:
989 if s or not isobs(n):
989 if s or not isobs(n):
990 rel = (unfi[n], tuple(unfi[m] for m in s))
990 rel = (unfi[n], tuple(unfi[m] for m in s))
991 rels.append(rel)
991 rels.append(rel)
992 if rels:
992 if rels:
993 obsolete.createmarkers(repo, rels, operation=operation,
993 obsolete.createmarkers(repo, rels, operation=operation,
994 metadata=metadata)
994 metadata=metadata)
995 else:
995 else:
996 from . import repair # avoid import cycle
996 from . import repair # avoid import cycle
997 tostrip = list(n for ns in replacements for n in ns)
997 tostrip = list(n for ns in replacements for n in ns)
998 if tostrip:
998 if tostrip:
999 repair.delayedstrip(repo.ui, repo, tostrip, operation,
999 repair.delayedstrip(repo.ui, repo, tostrip, operation,
1000 backup=backup)
1000 backup=backup)
1001
1001
1002 def addremove(repo, matcher, prefix, opts=None):
1002 def addremove(repo, matcher, prefix, opts=None):
1003 if opts is None:
1003 if opts is None:
1004 opts = {}
1004 opts = {}
1005 m = matcher
1005 m = matcher
1006 dry_run = opts.get('dry_run')
1006 dry_run = opts.get('dry_run')
1007 try:
1007 try:
1008 similarity = float(opts.get('similarity') or 0)
1008 similarity = float(opts.get('similarity') or 0)
1009 except ValueError:
1009 except ValueError:
1010 raise error.Abort(_('similarity must be a number'))
1010 raise error.Abort(_('similarity must be a number'))
1011 if similarity < 0 or similarity > 100:
1011 if similarity < 0 or similarity > 100:
1012 raise error.Abort(_('similarity must be between 0 and 100'))
1012 raise error.Abort(_('similarity must be between 0 and 100'))
1013 similarity /= 100.0
1013 similarity /= 100.0
1014
1014
1015 ret = 0
1015 ret = 0
1016 join = lambda f: os.path.join(prefix, f)
1016 join = lambda f: os.path.join(prefix, f)
1017
1017
1018 wctx = repo[None]
1018 wctx = repo[None]
1019 for subpath in sorted(wctx.substate):
1019 for subpath in sorted(wctx.substate):
1020 submatch = matchmod.subdirmatcher(subpath, m)
1020 submatch = matchmod.subdirmatcher(subpath, m)
1021 if opts.get('subrepos') or m.exact(subpath) or any(submatch.files()):
1021 if opts.get('subrepos') or m.exact(subpath) or any(submatch.files()):
1022 sub = wctx.sub(subpath)
1022 sub = wctx.sub(subpath)
1023 try:
1023 try:
1024 if sub.addremove(submatch, prefix, opts):
1024 if sub.addremove(submatch, prefix, opts):
1025 ret = 1
1025 ret = 1
1026 except error.LookupError:
1026 except error.LookupError:
1027 repo.ui.status(_("skipping missing subrepository: %s\n")
1027 repo.ui.status(_("skipping missing subrepository: %s\n")
1028 % join(subpath))
1028 % join(subpath))
1029
1029
1030 rejected = []
1030 rejected = []
1031 def badfn(f, msg):
1031 def badfn(f, msg):
1032 if f in m.files():
1032 if f in m.files():
1033 m.bad(f, msg)
1033 m.bad(f, msg)
1034 rejected.append(f)
1034 rejected.append(f)
1035
1035
1036 badmatch = matchmod.badmatch(m, badfn)
1036 badmatch = matchmod.badmatch(m, badfn)
1037 added, unknown, deleted, removed, forgotten = _interestingfiles(repo,
1037 added, unknown, deleted, removed, forgotten = _interestingfiles(repo,
1038 badmatch)
1038 badmatch)
1039
1039
1040 unknownset = set(unknown + forgotten)
1040 unknownset = set(unknown + forgotten)
1041 toprint = unknownset.copy()
1041 toprint = unknownset.copy()
1042 toprint.update(deleted)
1042 toprint.update(deleted)
1043 for abs in sorted(toprint):
1043 for abs in sorted(toprint):
1044 if repo.ui.verbose or not m.exact(abs):
1044 if repo.ui.verbose or not m.exact(abs):
1045 if abs in unknownset:
1045 if abs in unknownset:
1046 status = _('adding %s\n') % m.uipath(abs)
1046 status = _('adding %s\n') % m.uipath(abs)
1047 label = 'addremove.added'
1047 label = 'addremove.added'
1048 else:
1048 else:
1049 status = _('removing %s\n') % m.uipath(abs)
1049 status = _('removing %s\n') % m.uipath(abs)
1050 label = 'addremove.removed'
1050 label = 'addremove.removed'
1051 repo.ui.status(status, label=label)
1051 repo.ui.status(status, label=label)
1052
1052
1053 renames = _findrenames(repo, m, added + unknown, removed + deleted,
1053 renames = _findrenames(repo, m, added + unknown, removed + deleted,
1054 similarity)
1054 similarity)
1055
1055
1056 if not dry_run:
1056 if not dry_run:
1057 _markchanges(repo, unknown + forgotten, deleted, renames)
1057 _markchanges(repo, unknown + forgotten, deleted, renames)
1058
1058
1059 for f in rejected:
1059 for f in rejected:
1060 if f in m.files():
1060 if f in m.files():
1061 return 1
1061 return 1
1062 return ret
1062 return ret
1063
1063
1064 def marktouched(repo, files, similarity=0.0):
1064 def marktouched(repo, files, similarity=0.0):
1065 '''Assert that files have somehow been operated upon. files are relative to
1065 '''Assert that files have somehow been operated upon. files are relative to
1066 the repo root.'''
1066 the repo root.'''
1067 m = matchfiles(repo, files, badfn=lambda x, y: rejected.append(x))
1067 m = matchfiles(repo, files, badfn=lambda x, y: rejected.append(x))
1068 rejected = []
1068 rejected = []
1069
1069
1070 added, unknown, deleted, removed, forgotten = _interestingfiles(repo, m)
1070 added, unknown, deleted, removed, forgotten = _interestingfiles(repo, m)
1071
1071
1072 if repo.ui.verbose:
1072 if repo.ui.verbose:
1073 unknownset = set(unknown + forgotten)
1073 unknownset = set(unknown + forgotten)
1074 toprint = unknownset.copy()
1074 toprint = unknownset.copy()
1075 toprint.update(deleted)
1075 toprint.update(deleted)
1076 for abs in sorted(toprint):
1076 for abs in sorted(toprint):
1077 if abs in unknownset:
1077 if abs in unknownset:
1078 status = _('adding %s\n') % abs
1078 status = _('adding %s\n') % abs
1079 else:
1079 else:
1080 status = _('removing %s\n') % abs
1080 status = _('removing %s\n') % abs
1081 repo.ui.status(status)
1081 repo.ui.status(status)
1082
1082
1083 renames = _findrenames(repo, m, added + unknown, removed + deleted,
1083 renames = _findrenames(repo, m, added + unknown, removed + deleted,
1084 similarity)
1084 similarity)
1085
1085
1086 _markchanges(repo, unknown + forgotten, deleted, renames)
1086 _markchanges(repo, unknown + forgotten, deleted, renames)
1087
1087
1088 for f in rejected:
1088 for f in rejected:
1089 if f in m.files():
1089 if f in m.files():
1090 return 1
1090 return 1
1091 return 0
1091 return 0
1092
1092
1093 def _interestingfiles(repo, matcher):
1093 def _interestingfiles(repo, matcher):
1094 '''Walk dirstate with matcher, looking for files that addremove would care
1094 '''Walk dirstate with matcher, looking for files that addremove would care
1095 about.
1095 about.
1096
1096
1097 This is different from dirstate.status because it doesn't care about
1097 This is different from dirstate.status because it doesn't care about
1098 whether files are modified or clean.'''
1098 whether files are modified or clean.'''
1099 added, unknown, deleted, removed, forgotten = [], [], [], [], []
1099 added, unknown, deleted, removed, forgotten = [], [], [], [], []
1100 audit_path = pathutil.pathauditor(repo.root, cached=True)
1100 audit_path = pathutil.pathauditor(repo.root, cached=True)
1101
1101
1102 ctx = repo[None]
1102 ctx = repo[None]
1103 dirstate = repo.dirstate
1103 dirstate = repo.dirstate
1104 walkresults = dirstate.walk(matcher, subrepos=sorted(ctx.substate),
1104 walkresults = dirstate.walk(matcher, subrepos=sorted(ctx.substate),
1105 unknown=True, ignored=False, full=False)
1105 unknown=True, ignored=False, full=False)
1106 for abs, st in walkresults.iteritems():
1106 for abs, st in walkresults.iteritems():
1107 dstate = dirstate[abs]
1107 dstate = dirstate[abs]
1108 if dstate == '?' and audit_path.check(abs):
1108 if dstate == '?' and audit_path.check(abs):
1109 unknown.append(abs)
1109 unknown.append(abs)
1110 elif dstate != 'r' and not st:
1110 elif dstate != 'r' and not st:
1111 deleted.append(abs)
1111 deleted.append(abs)
1112 elif dstate == 'r' and st:
1112 elif dstate == 'r' and st:
1113 forgotten.append(abs)
1113 forgotten.append(abs)
1114 # for finding renames
1114 # for finding renames
1115 elif dstate == 'r' and not st:
1115 elif dstate == 'r' and not st:
1116 removed.append(abs)
1116 removed.append(abs)
1117 elif dstate == 'a':
1117 elif dstate == 'a':
1118 added.append(abs)
1118 added.append(abs)
1119
1119
1120 return added, unknown, deleted, removed, forgotten
1120 return added, unknown, deleted, removed, forgotten
1121
1121
1122 def _findrenames(repo, matcher, added, removed, similarity):
1122 def _findrenames(repo, matcher, added, removed, similarity):
1123 '''Find renames from removed files to added ones.'''
1123 '''Find renames from removed files to added ones.'''
1124 renames = {}
1124 renames = {}
1125 if similarity > 0:
1125 if similarity > 0:
1126 for old, new, score in similar.findrenames(repo, added, removed,
1126 for old, new, score in similar.findrenames(repo, added, removed,
1127 similarity):
1127 similarity):
1128 if (repo.ui.verbose or not matcher.exact(old)
1128 if (repo.ui.verbose or not matcher.exact(old)
1129 or not matcher.exact(new)):
1129 or not matcher.exact(new)):
1130 repo.ui.status(_('recording removal of %s as rename to %s '
1130 repo.ui.status(_('recording removal of %s as rename to %s '
1131 '(%d%% similar)\n') %
1131 '(%d%% similar)\n') %
1132 (matcher.rel(old), matcher.rel(new),
1132 (matcher.rel(old), matcher.rel(new),
1133 score * 100))
1133 score * 100))
1134 renames[new] = old
1134 renames[new] = old
1135 return renames
1135 return renames
1136
1136
1137 def _markchanges(repo, unknown, deleted, renames):
1137 def _markchanges(repo, unknown, deleted, renames):
1138 '''Marks the files in unknown as added, the files in deleted as removed,
1138 '''Marks the files in unknown as added, the files in deleted as removed,
1139 and the files in renames as copied.'''
1139 and the files in renames as copied.'''
1140 wctx = repo[None]
1140 wctx = repo[None]
1141 with repo.wlock():
1141 with repo.wlock():
1142 wctx.forget(deleted)
1142 wctx.forget(deleted)
1143 wctx.add(unknown)
1143 wctx.add(unknown)
1144 for new, old in renames.iteritems():
1144 for new, old in renames.iteritems():
1145 wctx.copy(old, new)
1145 wctx.copy(old, new)
1146
1146
1147 def dirstatecopy(ui, repo, wctx, src, dst, dryrun=False, cwd=None):
1147 def dirstatecopy(ui, repo, wctx, src, dst, dryrun=False, cwd=None):
1148 """Update the dirstate to reflect the intent of copying src to dst. For
1148 """Update the dirstate to reflect the intent of copying src to dst. For
1149 different reasons it might not end with dst being marked as copied from src.
1149 different reasons it might not end with dst being marked as copied from src.
1150 """
1150 """
1151 origsrc = repo.dirstate.copied(src) or src
1151 origsrc = repo.dirstate.copied(src) or src
1152 if dst == origsrc: # copying back a copy?
1152 if dst == origsrc: # copying back a copy?
1153 if repo.dirstate[dst] not in 'mn' and not dryrun:
1153 if repo.dirstate[dst] not in 'mn' and not dryrun:
1154 repo.dirstate.normallookup(dst)
1154 repo.dirstate.normallookup(dst)
1155 else:
1155 else:
1156 if repo.dirstate[origsrc] == 'a' and origsrc == src:
1156 if repo.dirstate[origsrc] == 'a' and origsrc == src:
1157 if not ui.quiet:
1157 if not ui.quiet:
1158 ui.warn(_("%s has not been committed yet, so no copy "
1158 ui.warn(_("%s has not been committed yet, so no copy "
1159 "data will be stored for %s.\n")
1159 "data will be stored for %s.\n")
1160 % (repo.pathto(origsrc, cwd), repo.pathto(dst, cwd)))
1160 % (repo.pathto(origsrc, cwd), repo.pathto(dst, cwd)))
1161 if repo.dirstate[dst] in '?r' and not dryrun:
1161 if repo.dirstate[dst] in '?r' and not dryrun:
1162 wctx.add([dst])
1162 wctx.add([dst])
1163 elif not dryrun:
1163 elif not dryrun:
1164 wctx.copy(origsrc, dst)
1164 wctx.copy(origsrc, dst)
1165
1165
1166 def writerequires(opener, requirements):
1166 def writerequires(opener, requirements):
1167 with opener('requires', 'w') as fp:
1167 with opener('requires', 'w') as fp:
1168 for r in sorted(requirements):
1168 for r in sorted(requirements):
1169 fp.write("%s\n" % r)
1169 fp.write("%s\n" % r)
1170
1170
1171 class filecachesubentry(object):
1171 class filecachesubentry(object):
1172 def __init__(self, path, stat):
1172 def __init__(self, path, stat):
1173 self.path = path
1173 self.path = path
1174 self.cachestat = None
1174 self.cachestat = None
1175 self._cacheable = None
1175 self._cacheable = None
1176
1176
1177 if stat:
1177 if stat:
1178 self.cachestat = filecachesubentry.stat(self.path)
1178 self.cachestat = filecachesubentry.stat(self.path)
1179
1179
1180 if self.cachestat:
1180 if self.cachestat:
1181 self._cacheable = self.cachestat.cacheable()
1181 self._cacheable = self.cachestat.cacheable()
1182 else:
1182 else:
1183 # None means we don't know yet
1183 # None means we don't know yet
1184 self._cacheable = None
1184 self._cacheable = None
1185
1185
1186 def refresh(self):
1186 def refresh(self):
1187 if self.cacheable():
1187 if self.cacheable():
1188 self.cachestat = filecachesubentry.stat(self.path)
1188 self.cachestat = filecachesubentry.stat(self.path)
1189
1189
1190 def cacheable(self):
1190 def cacheable(self):
1191 if self._cacheable is not None:
1191 if self._cacheable is not None:
1192 return self._cacheable
1192 return self._cacheable
1193
1193
1194 # we don't know yet, assume it is for now
1194 # we don't know yet, assume it is for now
1195 return True
1195 return True
1196
1196
1197 def changed(self):
1197 def changed(self):
1198 # no point in going further if we can't cache it
1198 # no point in going further if we can't cache it
1199 if not self.cacheable():
1199 if not self.cacheable():
1200 return True
1200 return True
1201
1201
1202 newstat = filecachesubentry.stat(self.path)
1202 newstat = filecachesubentry.stat(self.path)
1203
1203
1204 # we may not know if it's cacheable yet, check again now
1204 # we may not know if it's cacheable yet, check again now
1205 if newstat and self._cacheable is None:
1205 if newstat and self._cacheable is None:
1206 self._cacheable = newstat.cacheable()
1206 self._cacheable = newstat.cacheable()
1207
1207
1208 # check again
1208 # check again
1209 if not self._cacheable:
1209 if not self._cacheable:
1210 return True
1210 return True
1211
1211
1212 if self.cachestat != newstat:
1212 if self.cachestat != newstat:
1213 self.cachestat = newstat
1213 self.cachestat = newstat
1214 return True
1214 return True
1215 else:
1215 else:
1216 return False
1216 return False
1217
1217
1218 @staticmethod
1218 @staticmethod
1219 def stat(path):
1219 def stat(path):
1220 try:
1220 try:
1221 return util.cachestat(path)
1221 return util.cachestat(path)
1222 except OSError as e:
1222 except OSError as e:
1223 if e.errno != errno.ENOENT:
1223 if e.errno != errno.ENOENT:
1224 raise
1224 raise
1225
1225
1226 class filecacheentry(object):
1226 class filecacheentry(object):
1227 def __init__(self, paths, stat=True):
1227 def __init__(self, paths, stat=True):
1228 self._entries = []
1228 self._entries = []
1229 for path in paths:
1229 for path in paths:
1230 self._entries.append(filecachesubentry(path, stat))
1230 self._entries.append(filecachesubentry(path, stat))
1231
1231
1232 def changed(self):
1232 def changed(self):
1233 '''true if any entry has changed'''
1233 '''true if any entry has changed'''
1234 for entry in self._entries:
1234 for entry in self._entries:
1235 if entry.changed():
1235 if entry.changed():
1236 return True
1236 return True
1237 return False
1237 return False
1238
1238
1239 def refresh(self):
1239 def refresh(self):
1240 for entry in self._entries:
1240 for entry in self._entries:
1241 entry.refresh()
1241 entry.refresh()
1242
1242
1243 class filecache(object):
1243 class filecache(object):
1244 """A property like decorator that tracks files under .hg/ for updates.
1244 """A property like decorator that tracks files under .hg/ for updates.
1245
1245
1246 On first access, the files defined as arguments are stat()ed and the
1246 On first access, the files defined as arguments are stat()ed and the
1247 results cached. The decorated function is called. The results are stashed
1247 results cached. The decorated function is called. The results are stashed
1248 away in a ``_filecache`` dict on the object whose method is decorated.
1248 away in a ``_filecache`` dict on the object whose method is decorated.
1249
1249
1250 On subsequent access, the cached result is returned.
1250 On subsequent access, the cached result is returned.
1251
1251
1252 On external property set operations, stat() calls are performed and the new
1252 On external property set operations, stat() calls are performed and the new
1253 value is cached.
1253 value is cached.
1254
1254
1255 On property delete operations, cached data is removed.
1255 On property delete operations, cached data is removed.
1256
1256
1257 When using the property API, cached data is always returned, if available:
1257 When using the property API, cached data is always returned, if available:
1258 no stat() is performed to check if the file has changed and if the function
1258 no stat() is performed to check if the file has changed and if the function
1259 needs to be called to reflect file changes.
1259 needs to be called to reflect file changes.
1260
1260
1261 Others can muck about with the state of the ``_filecache`` dict. e.g. they
1261 Others can muck about with the state of the ``_filecache`` dict. e.g. they
1262 can populate an entry before the property's getter is called. In this case,
1262 can populate an entry before the property's getter is called. In this case,
1263 entries in ``_filecache`` will be used during property operations,
1263 entries in ``_filecache`` will be used during property operations,
1264 if available. If the underlying file changes, it is up to external callers
1264 if available. If the underlying file changes, it is up to external callers
1265 to reflect this by e.g. calling ``delattr(obj, attr)`` to remove the cached
1265 to reflect this by e.g. calling ``delattr(obj, attr)`` to remove the cached
1266 method result as well as possibly calling ``del obj._filecache[attr]`` to
1266 method result as well as possibly calling ``del obj._filecache[attr]`` to
1267 remove the ``filecacheentry``.
1267 remove the ``filecacheentry``.
1268 """
1268 """
1269
1269
1270 def __init__(self, *paths):
1270 def __init__(self, *paths):
1271 self.paths = paths
1271 self.paths = paths
1272
1272
1273 def join(self, obj, fname):
1273 def join(self, obj, fname):
1274 """Used to compute the runtime path of a cached file.
1274 """Used to compute the runtime path of a cached file.
1275
1275
1276 Users should subclass filecache and provide their own version of this
1276 Users should subclass filecache and provide their own version of this
1277 function to call the appropriate join function on 'obj' (an instance
1277 function to call the appropriate join function on 'obj' (an instance
1278 of the class that its member function was decorated).
1278 of the class that its member function was decorated).
1279 """
1279 """
1280 raise NotImplementedError
1280 raise NotImplementedError
1281
1281
1282 def __call__(self, func):
1282 def __call__(self, func):
1283 self.func = func
1283 self.func = func
1284 self.sname = func.__name__
1284 self.sname = func.__name__
1285 self.name = pycompat.sysbytes(self.sname)
1285 self.name = pycompat.sysbytes(self.sname)
1286 return self
1286 return self
1287
1287
1288 def __get__(self, obj, type=None):
1288 def __get__(self, obj, type=None):
1289 # if accessed on the class, return the descriptor itself.
1289 # if accessed on the class, return the descriptor itself.
1290 if obj is None:
1290 if obj is None:
1291 return self
1291 return self
1292 # do we need to check if the file changed?
1292 # do we need to check if the file changed?
1293 if self.sname in obj.__dict__:
1293 if self.sname in obj.__dict__:
1294 assert self.name in obj._filecache, self.name
1294 assert self.name in obj._filecache, self.name
1295 return obj.__dict__[self.sname]
1295 return obj.__dict__[self.sname]
1296
1296
1297 entry = obj._filecache.get(self.name)
1297 entry = obj._filecache.get(self.name)
1298
1298
1299 if entry:
1299 if entry:
1300 if entry.changed():
1300 if entry.changed():
1301 entry.obj = self.func(obj)
1301 entry.obj = self.func(obj)
1302 else:
1302 else:
1303 paths = [self.join(obj, path) for path in self.paths]
1303 paths = [self.join(obj, path) for path in self.paths]
1304
1304
1305 # We stat -before- creating the object so our cache doesn't lie if
1305 # We stat -before- creating the object so our cache doesn't lie if
1306 # a writer modified between the time we read and stat
1306 # a writer modified between the time we read and stat
1307 entry = filecacheentry(paths, True)
1307 entry = filecacheentry(paths, True)
1308 entry.obj = self.func(obj)
1308 entry.obj = self.func(obj)
1309
1309
1310 obj._filecache[self.name] = entry
1310 obj._filecache[self.name] = entry
1311
1311
1312 obj.__dict__[self.sname] = entry.obj
1312 obj.__dict__[self.sname] = entry.obj
1313 return entry.obj
1313 return entry.obj
1314
1314
1315 def __set__(self, obj, value):
1315 def __set__(self, obj, value):
1316 if self.name not in obj._filecache:
1316 if self.name not in obj._filecache:
1317 # we add an entry for the missing value because X in __dict__
1317 # we add an entry for the missing value because X in __dict__
1318 # implies X in _filecache
1318 # implies X in _filecache
1319 paths = [self.join(obj, path) for path in self.paths]
1319 paths = [self.join(obj, path) for path in self.paths]
1320 ce = filecacheentry(paths, False)
1320 ce = filecacheentry(paths, False)
1321 obj._filecache[self.name] = ce
1321 obj._filecache[self.name] = ce
1322 else:
1322 else:
1323 ce = obj._filecache[self.name]
1323 ce = obj._filecache[self.name]
1324
1324
1325 ce.obj = value # update cached copy
1325 ce.obj = value # update cached copy
1326 obj.__dict__[self.sname] = value # update copy returned by obj.x
1326 obj.__dict__[self.sname] = value # update copy returned by obj.x
1327
1327
1328 def __delete__(self, obj):
1328 def __delete__(self, obj):
1329 try:
1329 try:
1330 del obj.__dict__[self.sname]
1330 del obj.__dict__[self.sname]
1331 except KeyError:
1331 except KeyError:
1332 raise AttributeError(self.sname)
1332 raise AttributeError(self.sname)
1333
1333
1334 def extdatasource(repo, source):
1334 def extdatasource(repo, source):
1335 """Gather a map of rev -> value dict from the specified source
1335 """Gather a map of rev -> value dict from the specified source
1336
1336
1337 A source spec is treated as a URL, with a special case shell: type
1337 A source spec is treated as a URL, with a special case shell: type
1338 for parsing the output from a shell command.
1338 for parsing the output from a shell command.
1339
1339
1340 The data is parsed as a series of newline-separated records where
1340 The data is parsed as a series of newline-separated records where
1341 each record is a revision specifier optionally followed by a space
1341 each record is a revision specifier optionally followed by a space
1342 and a freeform string value. If the revision is known locally, it
1342 and a freeform string value. If the revision is known locally, it
1343 is converted to a rev, otherwise the record is skipped.
1343 is converted to a rev, otherwise the record is skipped.
1344
1344
1345 Note that both key and value are treated as UTF-8 and converted to
1345 Note that both key and value are treated as UTF-8 and converted to
1346 the local encoding. This allows uniformity between local and
1346 the local encoding. This allows uniformity between local and
1347 remote data sources.
1347 remote data sources.
1348 """
1348 """
1349
1349
1350 spec = repo.ui.config("extdata", source)
1350 spec = repo.ui.config("extdata", source)
1351 if not spec:
1351 if not spec:
1352 raise error.Abort(_("unknown extdata source '%s'") % source)
1352 raise error.Abort(_("unknown extdata source '%s'") % source)
1353
1353
1354 data = {}
1354 data = {}
1355 src = proc = None
1355 src = proc = None
1356 try:
1356 try:
1357 if spec.startswith("shell:"):
1357 if spec.startswith("shell:"):
1358 # external commands should be run relative to the repo root
1358 # external commands should be run relative to the repo root
1359 cmd = spec[6:]
1359 cmd = spec[6:]
1360 proc = subprocess.Popen(procutil.tonativestr(cmd),
1360 proc = subprocess.Popen(procutil.tonativestr(cmd),
1361 shell=True, bufsize=-1,
1361 shell=True, bufsize=-1,
1362 close_fds=procutil.closefds,
1362 close_fds=procutil.closefds,
1363 stdout=subprocess.PIPE,
1363 stdout=subprocess.PIPE,
1364 cwd=procutil.tonativestr(repo.root))
1364 cwd=procutil.tonativestr(repo.root))
1365 src = proc.stdout
1365 src = proc.stdout
1366 else:
1366 else:
1367 # treat as a URL or file
1367 # treat as a URL or file
1368 src = url.open(repo.ui, spec)
1368 src = url.open(repo.ui, spec)
1369 for l in src:
1369 for l in src:
1370 if " " in l:
1370 if " " in l:
1371 k, v = l.strip().split(" ", 1)
1371 k, v = l.strip().split(" ", 1)
1372 else:
1372 else:
1373 k, v = l.strip(), ""
1373 k, v = l.strip(), ""
1374
1374
1375 k = encoding.tolocal(k)
1375 k = encoding.tolocal(k)
1376 try:
1376 try:
1377 data[revsingle(repo, k).rev()] = encoding.tolocal(v)
1377 data[revsingle(repo, k).rev()] = encoding.tolocal(v)
1378 except (error.LookupError, error.RepoLookupError):
1378 except (error.LookupError, error.RepoLookupError):
1379 pass # we ignore data for nodes that don't exist locally
1379 pass # we ignore data for nodes that don't exist locally
1380 finally:
1380 finally:
1381 if proc:
1381 if proc:
1382 proc.communicate()
1382 proc.communicate()
1383 if src:
1383 if src:
1384 src.close()
1384 src.close()
1385 if proc and proc.returncode != 0:
1385 if proc and proc.returncode != 0:
1386 raise error.Abort(_("extdata command '%s' failed: %s")
1386 raise error.Abort(_("extdata command '%s' failed: %s")
1387 % (cmd, procutil.explainexit(proc.returncode)))
1387 % (cmd, procutil.explainexit(proc.returncode)))
1388
1388
1389 return data
1389 return data
1390
1390
1391 def _locksub(repo, lock, envvar, cmd, environ=None, *args, **kwargs):
1391 def _locksub(repo, lock, envvar, cmd, environ=None, *args, **kwargs):
1392 if lock is None:
1392 if lock is None:
1393 raise error.LockInheritanceContractViolation(
1393 raise error.LockInheritanceContractViolation(
1394 'lock can only be inherited while held')
1394 'lock can only be inherited while held')
1395 if environ is None:
1395 if environ is None:
1396 environ = {}
1396 environ = {}
1397 with lock.inherit() as locker:
1397 with lock.inherit() as locker:
1398 environ[envvar] = locker
1398 environ[envvar] = locker
1399 return repo.ui.system(cmd, environ=environ, *args, **kwargs)
1399 return repo.ui.system(cmd, environ=environ, *args, **kwargs)
1400
1400
1401 def wlocksub(repo, cmd, *args, **kwargs):
1401 def wlocksub(repo, cmd, *args, **kwargs):
1402 """run cmd as a subprocess that allows inheriting repo's wlock
1402 """run cmd as a subprocess that allows inheriting repo's wlock
1403
1403
1404 This can only be called while the wlock is held. This takes all the
1404 This can only be called while the wlock is held. This takes all the
1405 arguments that ui.system does, and returns the exit code of the
1405 arguments that ui.system does, and returns the exit code of the
1406 subprocess."""
1406 subprocess."""
1407 return _locksub(repo, repo.currentwlock(), 'HG_WLOCK_LOCKER', cmd, *args,
1407 return _locksub(repo, repo.currentwlock(), 'HG_WLOCK_LOCKER', cmd, *args,
1408 **kwargs)
1408 **kwargs)
1409
1409
1410 class progress(object):
1410 class progress(object):
1411 def __init__(self, ui, topic, unit="", total=None):
1411 def __init__(self, ui, topic, unit="", total=None):
1412 self.ui = ui
1412 self.ui = ui
1413 self.pos = 0
1413 self.pos = 0
1414 self.topic = topic
1414 self.topic = topic
1415 self.unit = unit
1415 self.unit = unit
1416 self.total = total
1416 self.total = total
1417
1417
1418 def __enter__(self):
1418 def __enter__(self):
1419 return self
1419 return self
1420
1420
1421 def __exit__(self, exc_type, exc_value, exc_tb):
1421 def __exit__(self, exc_type, exc_value, exc_tb):
1422 self.complete()
1422 self.complete()
1423
1423
1424 def update(self, pos, item="", total=None):
1424 def update(self, pos, item="", total=None):
1425 assert pos is not None
1425 assert pos is not None
1426 if total:
1426 if total:
1427 self.total = total
1427 self.total = total
1428 self.pos = pos
1428 self.pos = pos
1429 self._print(item)
1429 self._print(item)
1430
1430
1431 def increment(self, step=1, item="", total=None):
1431 def increment(self, step=1, item="", total=None):
1432 self.update(self.pos + step, item, total)
1432 self.update(self.pos + step, item, total)
1433
1433
1434 def complete(self):
1434 def complete(self):
1435 self.ui.progress(self.topic, None)
1435 self.ui.progress(self.topic, None)
1436
1436
1437 def _print(self, item):
1437 def _print(self, item):
1438 self.ui.progress(self.topic, self.pos, item, self.unit,
1438 self.ui.progress(self.topic, self.pos, item, self.unit,
1439 self.total)
1439 self.total)
1440
1440
1441 def gdinitconfig(ui):
1441 def gdinitconfig(ui):
1442 """helper function to know if a repo should be created as general delta
1442 """helper function to know if a repo should be created as general delta
1443 """
1443 """
1444 # experimental config: format.generaldelta
1444 # experimental config: format.generaldelta
1445 return (ui.configbool('format', 'generaldelta')
1445 return (ui.configbool('format', 'generaldelta')
1446 or ui.configbool('format', 'usegeneraldelta')
1446 or ui.configbool('format', 'usegeneraldelta')
1447 or ui.configbool('format', 'sparse-revlog'))
1447 or ui.configbool('format', 'sparse-revlog'))
1448
1448
1449 def gddeltaconfig(ui):
1449 def gddeltaconfig(ui):
1450 """helper function to know if incoming delta should be optimised
1450 """helper function to know if incoming delta should be optimised
1451 """
1451 """
1452 # experimental config: format.generaldelta
1452 # experimental config: format.generaldelta
1453 return ui.configbool('format', 'generaldelta')
1453 return ui.configbool('format', 'generaldelta')
1454
1454
1455 class simplekeyvaluefile(object):
1455 class simplekeyvaluefile(object):
1456 """A simple file with key=value lines
1456 """A simple file with key=value lines
1457
1457
1458 Keys must be alphanumerics and start with a letter, values must not
1458 Keys must be alphanumerics and start with a letter, values must not
1459 contain '\n' characters"""
1459 contain '\n' characters"""
1460 firstlinekey = '__firstline'
1460 firstlinekey = '__firstline'
1461
1461
1462 def __init__(self, vfs, path, keys=None):
1462 def __init__(self, vfs, path, keys=None):
1463 self.vfs = vfs
1463 self.vfs = vfs
1464 self.path = path
1464 self.path = path
1465
1465
1466 def read(self, firstlinenonkeyval=False):
1466 def read(self, firstlinenonkeyval=False):
1467 """Read the contents of a simple key-value file
1467 """Read the contents of a simple key-value file
1468
1468
1469 'firstlinenonkeyval' indicates whether the first line of file should
1469 'firstlinenonkeyval' indicates whether the first line of file should
1470 be treated as a key-value pair or reuturned fully under the
1470 be treated as a key-value pair or reuturned fully under the
1471 __firstline key."""
1471 __firstline key."""
1472 lines = self.vfs.readlines(self.path)
1472 lines = self.vfs.readlines(self.path)
1473 d = {}
1473 d = {}
1474 if firstlinenonkeyval:
1474 if firstlinenonkeyval:
1475 if not lines:
1475 if not lines:
1476 e = _("empty simplekeyvalue file")
1476 e = _("empty simplekeyvalue file")
1477 raise error.CorruptedState(e)
1477 raise error.CorruptedState(e)
1478 # we don't want to include '\n' in the __firstline
1478 # we don't want to include '\n' in the __firstline
1479 d[self.firstlinekey] = lines[0][:-1]
1479 d[self.firstlinekey] = lines[0][:-1]
1480 del lines[0]
1480 del lines[0]
1481
1481
1482 try:
1482 try:
1483 # the 'if line.strip()' part prevents us from failing on empty
1483 # the 'if line.strip()' part prevents us from failing on empty
1484 # lines which only contain '\n' therefore are not skipped
1484 # lines which only contain '\n' therefore are not skipped
1485 # by 'if line'
1485 # by 'if line'
1486 updatedict = dict(line[:-1].split('=', 1) for line in lines
1486 updatedict = dict(line[:-1].split('=', 1) for line in lines
1487 if line.strip())
1487 if line.strip())
1488 if self.firstlinekey in updatedict:
1488 if self.firstlinekey in updatedict:
1489 e = _("%r can't be used as a key")
1489 e = _("%r can't be used as a key")
1490 raise error.CorruptedState(e % self.firstlinekey)
1490 raise error.CorruptedState(e % self.firstlinekey)
1491 d.update(updatedict)
1491 d.update(updatedict)
1492 except ValueError as e:
1492 except ValueError as e:
1493 raise error.CorruptedState(str(e))
1493 raise error.CorruptedState(str(e))
1494 return d
1494 return d
1495
1495
1496 def write(self, data, firstline=None):
1496 def write(self, data, firstline=None):
1497 """Write key=>value mapping to a file
1497 """Write key=>value mapping to a file
1498 data is a dict. Keys must be alphanumerical and start with a letter.
1498 data is a dict. Keys must be alphanumerical and start with a letter.
1499 Values must not contain newline characters.
1499 Values must not contain newline characters.
1500
1500
1501 If 'firstline' is not None, it is written to file before
1501 If 'firstline' is not None, it is written to file before
1502 everything else, as it is, not in a key=value form"""
1502 everything else, as it is, not in a key=value form"""
1503 lines = []
1503 lines = []
1504 if firstline is not None:
1504 if firstline is not None:
1505 lines.append('%s\n' % firstline)
1505 lines.append('%s\n' % firstline)
1506
1506
1507 for k, v in data.items():
1507 for k, v in data.items():
1508 if k == self.firstlinekey:
1508 if k == self.firstlinekey:
1509 e = "key name '%s' is reserved" % self.firstlinekey
1509 e = "key name '%s' is reserved" % self.firstlinekey
1510 raise error.ProgrammingError(e)
1510 raise error.ProgrammingError(e)
1511 if not k[0:1].isalpha():
1511 if not k[0:1].isalpha():
1512 e = "keys must start with a letter in a key-value file"
1512 e = "keys must start with a letter in a key-value file"
1513 raise error.ProgrammingError(e)
1513 raise error.ProgrammingError(e)
1514 if not k.isalnum():
1514 if not k.isalnum():
1515 e = "invalid key name in a simple key-value file"
1515 e = "invalid key name in a simple key-value file"
1516 raise error.ProgrammingError(e)
1516 raise error.ProgrammingError(e)
1517 if '\n' in v:
1517 if '\n' in v:
1518 e = "invalid value in a simple key-value file"
1518 e = "invalid value in a simple key-value file"
1519 raise error.ProgrammingError(e)
1519 raise error.ProgrammingError(e)
1520 lines.append("%s=%s\n" % (k, v))
1520 lines.append("%s=%s\n" % (k, v))
1521 with self.vfs(self.path, mode='wb', atomictemp=True) as fp:
1521 with self.vfs(self.path, mode='wb', atomictemp=True) as fp:
1522 fp.write(''.join(lines))
1522 fp.write(''.join(lines))
1523
1523
1524 _reportobsoletedsource = [
1524 _reportobsoletedsource = [
1525 'debugobsolete',
1525 'debugobsolete',
1526 'pull',
1526 'pull',
1527 'push',
1527 'push',
1528 'serve',
1528 'serve',
1529 'unbundle',
1529 'unbundle',
1530 ]
1530 ]
1531
1531
1532 _reportnewcssource = [
1532 _reportnewcssource = [
1533 'pull',
1533 'pull',
1534 'unbundle',
1534 'unbundle',
1535 ]
1535 ]
1536
1536
1537 def prefetchfiles(repo, revs, match):
1537 def prefetchfiles(repo, revs, match):
1538 """Invokes the registered file prefetch functions, allowing extensions to
1538 """Invokes the registered file prefetch functions, allowing extensions to
1539 ensure the corresponding files are available locally, before the command
1539 ensure the corresponding files are available locally, before the command
1540 uses them."""
1540 uses them."""
1541 if match:
1541 if match:
1542 # The command itself will complain about files that don't exist, so
1542 # The command itself will complain about files that don't exist, so
1543 # don't duplicate the message.
1543 # don't duplicate the message.
1544 match = matchmod.badmatch(match, lambda fn, msg: None)
1544 match = matchmod.badmatch(match, lambda fn, msg: None)
1545 else:
1545 else:
1546 match = matchall(repo)
1546 match = matchall(repo)
1547
1547
1548 fileprefetchhooks(repo, revs, match)
1548 fileprefetchhooks(repo, revs, match)
1549
1549
1550 # a list of (repo, revs, match) prefetch functions
1550 # a list of (repo, revs, match) prefetch functions
1551 fileprefetchhooks = util.hooks()
1551 fileprefetchhooks = util.hooks()
1552
1552
1553 # A marker that tells the evolve extension to suppress its own reporting
1553 # A marker that tells the evolve extension to suppress its own reporting
1554 _reportstroubledchangesets = True
1554 _reportstroubledchangesets = True
1555
1555
1556 def registersummarycallback(repo, otr, txnname=''):
1556 def registersummarycallback(repo, otr, txnname=''):
1557 """register a callback to issue a summary after the transaction is closed
1557 """register a callback to issue a summary after the transaction is closed
1558 """
1558 """
1559 def txmatch(sources):
1559 def txmatch(sources):
1560 return any(txnname.startswith(source) for source in sources)
1560 return any(txnname.startswith(source) for source in sources)
1561
1561
1562 categories = []
1562 categories = []
1563
1563
1564 def reportsummary(func):
1564 def reportsummary(func):
1565 """decorator for report callbacks."""
1565 """decorator for report callbacks."""
1566 # The repoview life cycle is shorter than the one of the actual
1566 # The repoview life cycle is shorter than the one of the actual
1567 # underlying repository. So the filtered object can die before the
1567 # underlying repository. So the filtered object can die before the
1568 # weakref is used leading to troubles. We keep a reference to the
1568 # weakref is used leading to troubles. We keep a reference to the
1569 # unfiltered object and restore the filtering when retrieving the
1569 # unfiltered object and restore the filtering when retrieving the
1570 # repository through the weakref.
1570 # repository through the weakref.
1571 filtername = repo.filtername
1571 filtername = repo.filtername
1572 reporef = weakref.ref(repo.unfiltered())
1572 reporef = weakref.ref(repo.unfiltered())
1573 def wrapped(tr):
1573 def wrapped(tr):
1574 repo = reporef()
1574 repo = reporef()
1575 if filtername:
1575 if filtername:
1576 repo = repo.filtered(filtername)
1576 repo = repo.filtered(filtername)
1577 func(repo, tr)
1577 func(repo, tr)
1578 newcat = '%02i-txnreport' % len(categories)
1578 newcat = '%02i-txnreport' % len(categories)
1579 otr.addpostclose(newcat, wrapped)
1579 otr.addpostclose(newcat, wrapped)
1580 categories.append(newcat)
1580 categories.append(newcat)
1581 return wrapped
1581 return wrapped
1582
1582
1583 if txmatch(_reportobsoletedsource):
1583 if txmatch(_reportobsoletedsource):
1584 @reportsummary
1584 @reportsummary
1585 def reportobsoleted(repo, tr):
1585 def reportobsoleted(repo, tr):
1586 obsoleted = obsutil.getobsoleted(repo, tr)
1586 obsoleted = obsutil.getobsoleted(repo, tr)
1587 if obsoleted:
1587 if obsoleted:
1588 repo.ui.status(_('obsoleted %i changesets\n')
1588 repo.ui.status(_('obsoleted %i changesets\n')
1589 % len(obsoleted))
1589 % len(obsoleted))
1590
1590
1591 if (obsolete.isenabled(repo, obsolete.createmarkersopt) and
1591 if (obsolete.isenabled(repo, obsolete.createmarkersopt) and
1592 repo.ui.configbool('experimental', 'evolution.report-instabilities')):
1592 repo.ui.configbool('experimental', 'evolution.report-instabilities')):
1593 instabilitytypes = [
1593 instabilitytypes = [
1594 ('orphan', 'orphan'),
1594 ('orphan', 'orphan'),
1595 ('phase-divergent', 'phasedivergent'),
1595 ('phase-divergent', 'phasedivergent'),
1596 ('content-divergent', 'contentdivergent'),
1596 ('content-divergent', 'contentdivergent'),
1597 ]
1597 ]
1598
1598
1599 def getinstabilitycounts(repo):
1599 def getinstabilitycounts(repo):
1600 filtered = repo.changelog.filteredrevs
1600 filtered = repo.changelog.filteredrevs
1601 counts = {}
1601 counts = {}
1602 for instability, revset in instabilitytypes:
1602 for instability, revset in instabilitytypes:
1603 counts[instability] = len(set(obsolete.getrevs(repo, revset)) -
1603 counts[instability] = len(set(obsolete.getrevs(repo, revset)) -
1604 filtered)
1604 filtered)
1605 return counts
1605 return counts
1606
1606
1607 oldinstabilitycounts = getinstabilitycounts(repo)
1607 oldinstabilitycounts = getinstabilitycounts(repo)
1608 @reportsummary
1608 @reportsummary
1609 def reportnewinstabilities(repo, tr):
1609 def reportnewinstabilities(repo, tr):
1610 newinstabilitycounts = getinstabilitycounts(repo)
1610 newinstabilitycounts = getinstabilitycounts(repo)
1611 for instability, revset in instabilitytypes:
1611 for instability, revset in instabilitytypes:
1612 delta = (newinstabilitycounts[instability] -
1612 delta = (newinstabilitycounts[instability] -
1613 oldinstabilitycounts[instability])
1613 oldinstabilitycounts[instability])
1614 msg = getinstabilitymessage(delta, instability)
1614 msg = getinstabilitymessage(delta, instability)
1615 if msg:
1615 if msg:
1616 repo.ui.warn(msg)
1616 repo.ui.warn(msg)
1617
1617
1618 if txmatch(_reportnewcssource):
1618 if txmatch(_reportnewcssource):
1619 @reportsummary
1619 @reportsummary
1620 def reportnewcs(repo, tr):
1620 def reportnewcs(repo, tr):
1621 """Report the range of new revisions pulled/unbundled."""
1621 """Report the range of new revisions pulled/unbundled."""
1622 origrepolen = tr.changes.get('origrepolen', len(repo))
1622 origrepolen = tr.changes.get('origrepolen', len(repo))
1623 unfi = repo.unfiltered()
1623 unfi = repo.unfiltered()
1624 if origrepolen >= len(unfi):
1624 if origrepolen >= len(unfi):
1625 return
1625 return
1626
1626
1627 # Compute the bounds of new visible revisions' range.
1627 # Compute the bounds of new visible revisions' range.
1628 revs = smartset.spanset(repo, start=origrepolen)
1628 revs = smartset.spanset(repo, start=origrepolen)
1629 if revs:
1629 if revs:
1630 minrev, maxrev = repo[revs.min()], repo[revs.max()]
1630 minrev, maxrev = repo[revs.min()], repo[revs.max()]
1631
1631
1632 if minrev == maxrev:
1632 if minrev == maxrev:
1633 revrange = minrev
1633 revrange = minrev
1634 else:
1634 else:
1635 revrange = '%s:%s' % (minrev, maxrev)
1635 revrange = '%s:%s' % (minrev, maxrev)
1636 draft = len(repo.revs('%ld and draft()', revs))
1636 draft = len(repo.revs('%ld and draft()', revs))
1637 secret = len(repo.revs('%ld and secret()', revs))
1637 secret = len(repo.revs('%ld and secret()', revs))
1638 if not (draft or secret):
1638 if not (draft or secret):
1639 msg = _('new changesets %s\n') % revrange
1639 msg = _('new changesets %s\n') % revrange
1640 elif draft and secret:
1640 elif draft and secret:
1641 msg = _('new changesets %s (%d drafts, %d secrets)\n')
1641 msg = _('new changesets %s (%d drafts, %d secrets)\n')
1642 msg %= (revrange, draft, secret)
1642 msg %= (revrange, draft, secret)
1643 elif draft:
1643 elif draft:
1644 msg = _('new changesets %s (%d drafts)\n')
1644 msg = _('new changesets %s (%d drafts)\n')
1645 msg %= (revrange, draft)
1645 msg %= (revrange, draft)
1646 elif secret:
1646 elif secret:
1647 msg = _('new changesets %s (%d secrets)\n')
1647 msg = _('new changesets %s (%d secrets)\n')
1648 msg %= (revrange, secret)
1648 msg %= (revrange, secret)
1649 else:
1649 else:
1650 errormsg = 'entered unreachable condition'
1650 errormsg = 'entered unreachable condition'
1651 raise error.ProgrammingError(errormsg)
1651 raise error.ProgrammingError(errormsg)
1652 repo.ui.status(msg)
1652 repo.ui.status(msg)
1653
1653
1654 # search new changesets directly pulled as obsolete
1655 obsadded = unfi.revs('%d: and obsolete()', origrepolen)
1656 cl = repo.changelog
1657 extinctadded = [r for r in obsadded if r not in cl]
1658 if extinctadded:
1659 # They are not just obsolete, but obsolete and invisible
1660 # we call them "extinct" internally but the terms have not been
1661 # exposed to users.
1662 msg = '(%d other changesets obsolete on arrival)\n'
1663 repo.ui.status(msg % len(extinctadded))
1664
1654 @reportsummary
1665 @reportsummary
1655 def reportphasechanges(repo, tr):
1666 def reportphasechanges(repo, tr):
1656 """Report statistics of phase changes for changesets pre-existing
1667 """Report statistics of phase changes for changesets pre-existing
1657 pull/unbundle.
1668 pull/unbundle.
1658 """
1669 """
1659 origrepolen = tr.changes.get('origrepolen', len(repo))
1670 origrepolen = tr.changes.get('origrepolen', len(repo))
1660 phasetracking = tr.changes.get('phases', {})
1671 phasetracking = tr.changes.get('phases', {})
1661 if not phasetracking:
1672 if not phasetracking:
1662 return
1673 return
1663 published = [
1674 published = [
1664 rev for rev, (old, new) in phasetracking.iteritems()
1675 rev for rev, (old, new) in phasetracking.iteritems()
1665 if new == phases.public and rev < origrepolen
1676 if new == phases.public and rev < origrepolen
1666 ]
1677 ]
1667 if not published:
1678 if not published:
1668 return
1679 return
1669 repo.ui.status(_('%d local changesets published\n')
1680 repo.ui.status(_('%d local changesets published\n')
1670 % len(published))
1681 % len(published))
1671
1682
1672 def getinstabilitymessage(delta, instability):
1683 def getinstabilitymessage(delta, instability):
1673 """function to return the message to show warning about new instabilities
1684 """function to return the message to show warning about new instabilities
1674
1685
1675 exists as a separate function so that extension can wrap to show more
1686 exists as a separate function so that extension can wrap to show more
1676 information like how to fix instabilities"""
1687 information like how to fix instabilities"""
1677 if delta > 0:
1688 if delta > 0:
1678 return _('%i new %s changesets\n') % (delta, instability)
1689 return _('%i new %s changesets\n') % (delta, instability)
1679
1690
1680 def nodesummaries(repo, nodes, maxnumnodes=4):
1691 def nodesummaries(repo, nodes, maxnumnodes=4):
1681 if len(nodes) <= maxnumnodes or repo.ui.verbose:
1692 if len(nodes) <= maxnumnodes or repo.ui.verbose:
1682 return ' '.join(short(h) for h in nodes)
1693 return ' '.join(short(h) for h in nodes)
1683 first = ' '.join(short(h) for h in nodes[:maxnumnodes])
1694 first = ' '.join(short(h) for h in nodes[:maxnumnodes])
1684 return _("%s and %d others") % (first, len(nodes) - maxnumnodes)
1695 return _("%s and %d others") % (first, len(nodes) - maxnumnodes)
1685
1696
1686 def enforcesinglehead(repo, tr, desc):
1697 def enforcesinglehead(repo, tr, desc):
1687 """check that no named branch has multiple heads"""
1698 """check that no named branch has multiple heads"""
1688 if desc in ('strip', 'repair'):
1699 if desc in ('strip', 'repair'):
1689 # skip the logic during strip
1700 # skip the logic during strip
1690 return
1701 return
1691 visible = repo.filtered('visible')
1702 visible = repo.filtered('visible')
1692 # possible improvement: we could restrict the check to affected branch
1703 # possible improvement: we could restrict the check to affected branch
1693 for name, heads in visible.branchmap().iteritems():
1704 for name, heads in visible.branchmap().iteritems():
1694 if len(heads) > 1:
1705 if len(heads) > 1:
1695 msg = _('rejecting multiple heads on branch "%s"')
1706 msg = _('rejecting multiple heads on branch "%s"')
1696 msg %= name
1707 msg %= name
1697 hint = _('%d heads: %s')
1708 hint = _('%d heads: %s')
1698 hint %= (len(heads), nodesummaries(repo, heads))
1709 hint %= (len(heads), nodesummaries(repo, heads))
1699 raise error.Abort(msg, hint=hint)
1710 raise error.Abort(msg, hint=hint)
1700
1711
1701 def wrapconvertsink(sink):
1712 def wrapconvertsink(sink):
1702 """Allow extensions to wrap the sink returned by convcmd.convertsink()
1713 """Allow extensions to wrap the sink returned by convcmd.convertsink()
1703 before it is used, whether or not the convert extension was formally loaded.
1714 before it is used, whether or not the convert extension was formally loaded.
1704 """
1715 """
1705 return sink
1716 return sink
1706
1717
1707 def unhidehashlikerevs(repo, specs, hiddentype):
1718 def unhidehashlikerevs(repo, specs, hiddentype):
1708 """parse the user specs and unhide changesets whose hash or revision number
1719 """parse the user specs and unhide changesets whose hash or revision number
1709 is passed.
1720 is passed.
1710
1721
1711 hiddentype can be: 1) 'warn': warn while unhiding changesets
1722 hiddentype can be: 1) 'warn': warn while unhiding changesets
1712 2) 'nowarn': don't warn while unhiding changesets
1723 2) 'nowarn': don't warn while unhiding changesets
1713
1724
1714 returns a repo object with the required changesets unhidden
1725 returns a repo object with the required changesets unhidden
1715 """
1726 """
1716 if not repo.filtername or not repo.ui.configbool('experimental',
1727 if not repo.filtername or not repo.ui.configbool('experimental',
1717 'directaccess'):
1728 'directaccess'):
1718 return repo
1729 return repo
1719
1730
1720 if repo.filtername not in ('visible', 'visible-hidden'):
1731 if repo.filtername not in ('visible', 'visible-hidden'):
1721 return repo
1732 return repo
1722
1733
1723 symbols = set()
1734 symbols = set()
1724 for spec in specs:
1735 for spec in specs:
1725 try:
1736 try:
1726 tree = revsetlang.parse(spec)
1737 tree = revsetlang.parse(spec)
1727 except error.ParseError: # will be reported by scmutil.revrange()
1738 except error.ParseError: # will be reported by scmutil.revrange()
1728 continue
1739 continue
1729
1740
1730 symbols.update(revsetlang.gethashlikesymbols(tree))
1741 symbols.update(revsetlang.gethashlikesymbols(tree))
1731
1742
1732 if not symbols:
1743 if not symbols:
1733 return repo
1744 return repo
1734
1745
1735 revs = _getrevsfromsymbols(repo, symbols)
1746 revs = _getrevsfromsymbols(repo, symbols)
1736
1747
1737 if not revs:
1748 if not revs:
1738 return repo
1749 return repo
1739
1750
1740 if hiddentype == 'warn':
1751 if hiddentype == 'warn':
1741 unfi = repo.unfiltered()
1752 unfi = repo.unfiltered()
1742 revstr = ", ".join([pycompat.bytestr(unfi[l]) for l in revs])
1753 revstr = ", ".join([pycompat.bytestr(unfi[l]) for l in revs])
1743 repo.ui.warn(_("warning: accessing hidden changesets for write "
1754 repo.ui.warn(_("warning: accessing hidden changesets for write "
1744 "operation: %s\n") % revstr)
1755 "operation: %s\n") % revstr)
1745
1756
1746 # we have to use new filtername to separate branch/tags cache until we can
1757 # we have to use new filtername to separate branch/tags cache until we can
1747 # disbale these cache when revisions are dynamically pinned.
1758 # disbale these cache when revisions are dynamically pinned.
1748 return repo.filtered('visible-hidden', revs)
1759 return repo.filtered('visible-hidden', revs)
1749
1760
1750 def _getrevsfromsymbols(repo, symbols):
1761 def _getrevsfromsymbols(repo, symbols):
1751 """parse the list of symbols and returns a set of revision numbers of hidden
1762 """parse the list of symbols and returns a set of revision numbers of hidden
1752 changesets present in symbols"""
1763 changesets present in symbols"""
1753 revs = set()
1764 revs = set()
1754 unfi = repo.unfiltered()
1765 unfi = repo.unfiltered()
1755 unficl = unfi.changelog
1766 unficl = unfi.changelog
1756 cl = repo.changelog
1767 cl = repo.changelog
1757 tiprev = len(unficl)
1768 tiprev = len(unficl)
1758 allowrevnums = repo.ui.configbool('experimental', 'directaccess.revnums')
1769 allowrevnums = repo.ui.configbool('experimental', 'directaccess.revnums')
1759 for s in symbols:
1770 for s in symbols:
1760 try:
1771 try:
1761 n = int(s)
1772 n = int(s)
1762 if n <= tiprev:
1773 if n <= tiprev:
1763 if not allowrevnums:
1774 if not allowrevnums:
1764 continue
1775 continue
1765 else:
1776 else:
1766 if n not in cl:
1777 if n not in cl:
1767 revs.add(n)
1778 revs.add(n)
1768 continue
1779 continue
1769 except ValueError:
1780 except ValueError:
1770 pass
1781 pass
1771
1782
1772 try:
1783 try:
1773 s = resolvehexnodeidprefix(unfi, s)
1784 s = resolvehexnodeidprefix(unfi, s)
1774 except (error.LookupError, error.WdirUnsupported):
1785 except (error.LookupError, error.WdirUnsupported):
1775 s = None
1786 s = None
1776
1787
1777 if s is not None:
1788 if s is not None:
1778 rev = unficl.rev(s)
1789 rev = unficl.rev(s)
1779 if rev not in cl:
1790 if rev not in cl:
1780 revs.add(rev)
1791 revs.add(rev)
1781
1792
1782 return revs
1793 return revs
1783
1794
1784 def bookmarkrevs(repo, mark):
1795 def bookmarkrevs(repo, mark):
1785 """
1796 """
1786 Select revisions reachable by a given bookmark
1797 Select revisions reachable by a given bookmark
1787 """
1798 """
1788 return repo.revs("ancestors(bookmark(%s)) - "
1799 return repo.revs("ancestors(bookmark(%s)) - "
1789 "ancestors(head() and not bookmark(%s)) - "
1800 "ancestors(head() and not bookmark(%s)) - "
1790 "ancestors(bookmark() and not bookmark(%s))",
1801 "ancestors(bookmark() and not bookmark(%s))",
1791 mark, mark, mark)
1802 mark, mark, mark)
@@ -1,1404 +1,1421 b''
1 ==================================================
1 ==================================================
2 Test obsmarkers interaction with bundle and strip
2 Test obsmarkers interaction with bundle and strip
3 ==================================================
3 ==================================================
4
4
5 Setup a repository with various case
5 Setup a repository with various case
6 ====================================
6 ====================================
7
7
8 Config setup
8 Config setup
9 ------------
9 ------------
10
10
11 $ cat >> $HGRCPATH <<EOF
11 $ cat >> $HGRCPATH <<EOF
12 > [ui]
12 > [ui]
13 > # simpler log output
13 > # simpler log output
14 > logtemplate = "{node|short}: {desc}\n"
14 > logtemplate = "{node|short}: {desc}\n"
15 >
15 >
16 > [experimental]
16 > [experimental]
17 > # enable evolution
17 > # enable evolution
18 > evolution=true
18 > evolution=true
19 >
19 >
20 > # include obsmarkers in bundle
20 > # include obsmarkers in bundle
21 > evolution.bundle-obsmarker = yes
21 > evolution.bundle-obsmarker = yes
22 >
22 >
23 > [extensions]
23 > [extensions]
24 > # needed for some tests
24 > # needed for some tests
25 > strip =
25 > strip =
26 > [defaults]
26 > [defaults]
27 > # we'll query many hidden changeset
27 > # we'll query many hidden changeset
28 > debugobsolete = --hidden
28 > debugobsolete = --hidden
29 > EOF
29 > EOF
30
30
31 $ mkcommit() {
31 $ mkcommit() {
32 > echo "$1" > "$1"
32 > echo "$1" > "$1"
33 > hg add "$1"
33 > hg add "$1"
34 > hg ci -m "$1"
34 > hg ci -m "$1"
35 > }
35 > }
36
36
37 $ getid() {
37 $ getid() {
38 > hg log --hidden --template '{node}\n' --rev "$1"
38 > hg log --hidden --template '{node}\n' --rev "$1"
39 > }
39 > }
40
40
41 $ mktestrepo () {
41 $ mktestrepo () {
42 > [ -n "$1" ] || exit 1
42 > [ -n "$1" ] || exit 1
43 > cd $TESTTMP
43 > cd $TESTTMP
44 > hg init $1
44 > hg init $1
45 > cd $1
45 > cd $1
46 > mkcommit ROOT
46 > mkcommit ROOT
47 > }
47 > }
48
48
49 Function to compare the expected bundled obsmarkers with the actually bundled
49 Function to compare the expected bundled obsmarkers with the actually bundled
50 obsmarkers. It also check the obsmarkers backed up during strip.
50 obsmarkers. It also check the obsmarkers backed up during strip.
51
51
52 $ testrevs () {
52 $ testrevs () {
53 > revs="$1"
53 > revs="$1"
54 > testname=`basename \`pwd\``
54 > testname=`basename \`pwd\``
55 > revsname=`hg --hidden log -T '-{desc}' --rev "${revs}"`
55 > revsname=`hg --hidden log -T '-{desc}' --rev "${revs}"`
56 > prefix="${TESTTMP}/${testname}${revsname}"
56 > prefix="${TESTTMP}/${testname}${revsname}"
57 > markersfile="${prefix}-relevant-markers.txt"
57 > markersfile="${prefix}-relevant-markers.txt"
58 > exclufile="${prefix}-exclusive-markers.txt"
58 > exclufile="${prefix}-exclusive-markers.txt"
59 > bundlefile="${prefix}-bundle.hg"
59 > bundlefile="${prefix}-bundle.hg"
60 > contentfile="${prefix}-bundle-markers.hg"
60 > contentfile="${prefix}-bundle-markers.hg"
61 > stripcontentfile="${prefix}-bundle-markers.hg"
61 > stripcontentfile="${prefix}-bundle-markers.hg"
62 > hg debugobsolete --hidden --rev "${revs}" | sed 's/^/ /' > "${markersfile}"
62 > hg debugobsolete --hidden --rev "${revs}" | sed 's/^/ /' > "${markersfile}"
63 > hg debugobsolete --hidden --rev "${revs}" --exclusive | sed 's/^/ /' > "${exclufile}"
63 > hg debugobsolete --hidden --rev "${revs}" --exclusive | sed 's/^/ /' > "${exclufile}"
64 > echo '### Matched revisions###'
64 > echo '### Matched revisions###'
65 > hg log --hidden --rev "${revs}" | sort
65 > hg log --hidden --rev "${revs}" | sort
66 > echo '### Relevant markers ###'
66 > echo '### Relevant markers ###'
67 > cat "${markersfile}"
67 > cat "${markersfile}"
68 > printf "# bundling: "
68 > printf "# bundling: "
69 > hg bundle --hidden --base "parents(roots(${revs}))" --rev "${revs}" "${bundlefile}"
69 > hg bundle --hidden --base "parents(roots(${revs}))" --rev "${revs}" "${bundlefile}"
70 > hg debugbundle --part-type obsmarkers "${bundlefile}" | sed 1,3d > "${contentfile}"
70 > hg debugbundle --part-type obsmarkers "${bundlefile}" | sed 1,3d > "${contentfile}"
71 > echo '### Bundled markers ###'
71 > echo '### Bundled markers ###'
72 > cat "${contentfile}"
72 > cat "${contentfile}"
73 > echo '### diff <relevant> <bundled> ###'
73 > echo '### diff <relevant> <bundled> ###'
74 > cmp "${markersfile}" "${contentfile}" || diff -u "${markersfile}" "${contentfile}"
74 > cmp "${markersfile}" "${contentfile}" || diff -u "${markersfile}" "${contentfile}"
75 > echo '#################################'
75 > echo '#################################'
76 > echo '### Exclusive markers ###'
76 > echo '### Exclusive markers ###'
77 > cat "${exclufile}"
77 > cat "${exclufile}"
78 > # if the matched revs do not have children, we also check the result of strip
78 > # if the matched revs do not have children, we also check the result of strip
79 > children=`hg log --hidden --rev "((${revs})::) - (${revs})"`
79 > children=`hg log --hidden --rev "((${revs})::) - (${revs})"`
80 > if [ -z "$children" ];
80 > if [ -z "$children" ];
81 > then
81 > then
82 > printf "# stripping: "
82 > printf "# stripping: "
83 > prestripfile="${prefix}-pre-strip.txt"
83 > prestripfile="${prefix}-pre-strip.txt"
84 > poststripfile="${prefix}-post-strip.txt"
84 > poststripfile="${prefix}-post-strip.txt"
85 > strippedfile="${prefix}-stripped-markers.txt"
85 > strippedfile="${prefix}-stripped-markers.txt"
86 > hg debugobsolete --hidden | sort | sed 's/^/ /' > "${prestripfile}"
86 > hg debugobsolete --hidden | sort | sed 's/^/ /' > "${prestripfile}"
87 > hg strip --hidden --rev "${revs}"
87 > hg strip --hidden --rev "${revs}"
88 > hg debugobsolete --hidden | sort | sed 's/^/ /' > "${poststripfile}"
88 > hg debugobsolete --hidden | sort | sed 's/^/ /' > "${poststripfile}"
89 > hg debugbundle --part-type obsmarkers .hg/strip-backup/* | sed 1,3d > "${stripcontentfile}"
89 > hg debugbundle --part-type obsmarkers .hg/strip-backup/* | sed 1,3d > "${stripcontentfile}"
90 > echo '### Backup markers ###'
90 > echo '### Backup markers ###'
91 > cat "${stripcontentfile}"
91 > cat "${stripcontentfile}"
92 > echo '### diff <relevant> <backed-up> ###'
92 > echo '### diff <relevant> <backed-up> ###'
93 > cmp "${markersfile}" "${stripcontentfile}" || diff -u "${markersfile}" "${stripcontentfile}"
93 > cmp "${markersfile}" "${stripcontentfile}" || diff -u "${markersfile}" "${stripcontentfile}"
94 > echo '#################################'
94 > echo '#################################'
95 > cat "${prestripfile}" "${poststripfile}" | sort | uniq -u > "${strippedfile}"
95 > cat "${prestripfile}" "${poststripfile}" | sort | uniq -u > "${strippedfile}"
96 > echo '### Stripped markers ###'
96 > echo '### Stripped markers ###'
97 > cat "${strippedfile}"
97 > cat "${strippedfile}"
98 > echo '### diff <exclusive> <stripped> ###'
98 > echo '### diff <exclusive> <stripped> ###'
99 > cmp "${exclufile}" "${strippedfile}" || diff -u "${exclufile}" "${strippedfile}"
99 > cmp "${exclufile}" "${strippedfile}" || diff -u "${exclufile}" "${strippedfile}"
100 > echo '#################################'
100 > echo '#################################'
101 > # restore and clean up repo for the next test
101 > # restore and clean up repo for the next test
102 > hg unbundle .hg/strip-backup/* | sed 's/^/# unbundling: /'
102 > hg unbundle .hg/strip-backup/* | sed 's/^/# unbundling: /'
103 > # clean up directory for the next test
103 > # clean up directory for the next test
104 > rm .hg/strip-backup/*
104 > rm .hg/strip-backup/*
105 > fi
105 > fi
106 > }
106 > }
107
107
108 root setup
108 root setup
109 -------------
109 -------------
110
110
111 simple chain
111 simple chain
112 ============
112 ============
113
113
114 . A0
114 . A0
115 . β‡ ΓΈβ‡ β—” A1
115 . β‡ ΓΈβ‡ β—” A1
116 . |/
116 . |/
117 . ●
117 . ●
118
118
119 setup
119 setup
120 -----
120 -----
121
121
122 $ mktestrepo simple-chain
122 $ mktestrepo simple-chain
123 $ mkcommit 'C-A0'
123 $ mkcommit 'C-A0'
124 $ hg up 'desc("ROOT")'
124 $ hg up 'desc("ROOT")'
125 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
125 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
126 $ mkcommit 'C-A1'
126 $ mkcommit 'C-A1'
127 created new head
127 created new head
128 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
128 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
129 $ hg debugobsolete `getid 'desc("C-A0")'` a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1
129 $ hg debugobsolete `getid 'desc("C-A0")'` a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1
130 obsoleted 1 changesets
130 obsoleted 1 changesets
131 $ hg debugobsolete a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 `getid 'desc("C-A1")'`
131 $ hg debugobsolete a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 `getid 'desc("C-A1")'`
132
132
133 $ hg up 'desc("ROOT")'
133 $ hg up 'desc("ROOT")'
134 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
134 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
135 $ hg log --hidden -G
135 $ hg log --hidden -G
136 o cf2c22470d67: C-A1
136 o cf2c22470d67: C-A1
137 |
137 |
138 | x 84fcb0dfe17b: C-A0
138 | x 84fcb0dfe17b: C-A0
139 |/
139 |/
140 @ ea207398892e: ROOT
140 @ ea207398892e: ROOT
141
141
142 $ hg debugobsolete
142 $ hg debugobsolete
143 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
143 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
144 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
144 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
145 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
145 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
146
146
147 Actual testing
147 Actual testing
148 --------------
148 --------------
149
149
150 $ testrevs 'desc("C-A0")'
150 $ testrevs 'desc("C-A0")'
151 ### Matched revisions###
151 ### Matched revisions###
152 84fcb0dfe17b: C-A0
152 84fcb0dfe17b: C-A0
153 ### Relevant markers ###
153 ### Relevant markers ###
154 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
154 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
155 # bundling: 1 changesets found
155 # bundling: 1 changesets found
156 ### Bundled markers ###
156 ### Bundled markers ###
157 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
157 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
158 ### diff <relevant> <bundled> ###
158 ### diff <relevant> <bundled> ###
159 #################################
159 #################################
160 ### Exclusive markers ###
160 ### Exclusive markers ###
161 # stripping: saved backup bundle to $TESTTMP/simple-chain/.hg/strip-backup/84fcb0dfe17b-6454bbdc-backup.hg
161 # stripping: saved backup bundle to $TESTTMP/simple-chain/.hg/strip-backup/84fcb0dfe17b-6454bbdc-backup.hg
162 ### Backup markers ###
162 ### Backup markers ###
163 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
163 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
164 ### diff <relevant> <backed-up> ###
164 ### diff <relevant> <backed-up> ###
165 #################################
165 #################################
166 ### Stripped markers ###
166 ### Stripped markers ###
167 ### diff <exclusive> <stripped> ###
167 ### diff <exclusive> <stripped> ###
168 #################################
168 #################################
169 # unbundling: adding changesets
169 # unbundling: adding changesets
170 # unbundling: adding manifests
170 # unbundling: adding manifests
171 # unbundling: adding file changes
171 # unbundling: adding file changes
172 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
172 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
173 # unbundling: (1 other changesets obsolete on arrival)
173 # unbundling: (run 'hg heads' to see heads)
174 # unbundling: (run 'hg heads' to see heads)
174
175
175 $ testrevs 'desc("C-A1")'
176 $ testrevs 'desc("C-A1")'
176 ### Matched revisions###
177 ### Matched revisions###
177 cf2c22470d67: C-A1
178 cf2c22470d67: C-A1
178 ### Relevant markers ###
179 ### Relevant markers ###
179 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
180 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
180 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
181 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
181 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
182 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
182 # bundling: 1 changesets found
183 # bundling: 1 changesets found
183 ### Bundled markers ###
184 ### Bundled markers ###
184 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
185 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
185 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
186 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
186 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
187 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
187 ### diff <relevant> <bundled> ###
188 ### diff <relevant> <bundled> ###
188 #################################
189 #################################
189 ### Exclusive markers ###
190 ### Exclusive markers ###
190 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
191 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
191 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
192 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
192 # stripping: saved backup bundle to $TESTTMP/simple-chain/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg
193 # stripping: saved backup bundle to $TESTTMP/simple-chain/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg
193 ### Backup markers ###
194 ### Backup markers ###
194 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
195 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
195 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
196 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
196 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
197 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
197 ### diff <relevant> <backed-up> ###
198 ### diff <relevant> <backed-up> ###
198 #################################
199 #################################
199 ### Stripped markers ###
200 ### Stripped markers ###
200 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
201 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
201 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
202 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
202 ### diff <exclusive> <stripped> ###
203 ### diff <exclusive> <stripped> ###
203 #################################
204 #################################
204 # unbundling: adding changesets
205 # unbundling: adding changesets
205 # unbundling: adding manifests
206 # unbundling: adding manifests
206 # unbundling: adding file changes
207 # unbundling: adding file changes
207 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
208 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
208 # unbundling: 2 new obsolescence markers
209 # unbundling: 2 new obsolescence markers
209 # unbundling: obsoleted 1 changesets
210 # unbundling: obsoleted 1 changesets
210 # unbundling: new changesets cf2c22470d67 (1 drafts)
211 # unbundling: new changesets cf2c22470d67 (1 drafts)
211 # unbundling: (run 'hg heads' to see heads)
212 # unbundling: (run 'hg heads' to see heads)
212
213
213 $ testrevs 'desc("C-A")'
214 $ testrevs 'desc("C-A")'
214 ### Matched revisions###
215 ### Matched revisions###
215 84fcb0dfe17b: C-A0
216 84fcb0dfe17b: C-A0
216 cf2c22470d67: C-A1
217 cf2c22470d67: C-A1
217 ### Relevant markers ###
218 ### Relevant markers ###
218 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
219 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
219 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
220 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
220 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
221 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
221 # bundling: 2 changesets found
222 # bundling: 2 changesets found
222 ### Bundled markers ###
223 ### Bundled markers ###
223 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
224 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
224 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
225 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
225 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
226 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
226 ### diff <relevant> <bundled> ###
227 ### diff <relevant> <bundled> ###
227 #################################
228 #################################
228 ### Exclusive markers ###
229 ### Exclusive markers ###
229 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
230 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
230 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
231 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
231 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
232 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
232 # stripping: saved backup bundle to $TESTTMP/simple-chain/.hg/strip-backup/cf2c22470d67-fce4fc64-backup.hg
233 # stripping: saved backup bundle to $TESTTMP/simple-chain/.hg/strip-backup/cf2c22470d67-fce4fc64-backup.hg
233 ### Backup markers ###
234 ### Backup markers ###
234 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
235 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
235 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
236 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
236 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
237 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
237 ### diff <relevant> <backed-up> ###
238 ### diff <relevant> <backed-up> ###
238 #################################
239 #################################
239 ### Stripped markers ###
240 ### Stripped markers ###
240 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
241 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
241 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
242 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
242 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
243 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
243 ### diff <exclusive> <stripped> ###
244 ### diff <exclusive> <stripped> ###
244 #################################
245 #################################
245 # unbundling: adding changesets
246 # unbundling: adding changesets
246 # unbundling: adding manifests
247 # unbundling: adding manifests
247 # unbundling: adding file changes
248 # unbundling: adding file changes
248 # unbundling: added 2 changesets with 2 changes to 2 files (+1 heads)
249 # unbundling: added 2 changesets with 2 changes to 2 files (+1 heads)
249 # unbundling: 3 new obsolescence markers
250 # unbundling: 3 new obsolescence markers
250 # unbundling: new changesets cf2c22470d67 (1 drafts)
251 # unbundling: new changesets cf2c22470d67 (1 drafts)
252 # unbundling: (1 other changesets obsolete on arrival)
251 # unbundling: (run 'hg heads' to see heads)
253 # unbundling: (run 'hg heads' to see heads)
252
254
253 chain with prune children
255 chain with prune children
254 =========================
256 =========================
255
257
256 . β‡ βŠ— B0
258 . β‡ βŠ— B0
257 . |
259 . |
258 . β‡ ΓΈβ‡ β—” A1
260 . β‡ ΓΈβ‡ β—” A1
259 . |
261 . |
260 . ●
262 . ●
261
263
262 setup
264 setup
263 -----
265 -----
264
266
265 $ mktestrepo prune
267 $ mktestrepo prune
266 $ mkcommit 'C-A0'
268 $ mkcommit 'C-A0'
267 $ mkcommit 'C-B0'
269 $ mkcommit 'C-B0'
268 $ hg up 'desc("ROOT")'
270 $ hg up 'desc("ROOT")'
269 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
271 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
270 $ mkcommit 'C-A1'
272 $ mkcommit 'C-A1'
271 created new head
273 created new head
272 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
274 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
273 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
275 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
274 obsoleted 1 changesets
276 obsoleted 1 changesets
275 1 new orphan changesets
277 1 new orphan changesets
276 $ hg debugobsolete --record-parents `getid 'desc("C-B0")'`
278 $ hg debugobsolete --record-parents `getid 'desc("C-B0")'`
277 obsoleted 1 changesets
279 obsoleted 1 changesets
278 $ hg up 'desc("ROOT")'
280 $ hg up 'desc("ROOT")'
279 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
281 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
280 $ hg log --hidden -G
282 $ hg log --hidden -G
281 o cf2c22470d67: C-A1
283 o cf2c22470d67: C-A1
282 |
284 |
283 | x 29f93b1df87b: C-B0
285 | x 29f93b1df87b: C-B0
284 | |
286 | |
285 | x 84fcb0dfe17b: C-A0
287 | x 84fcb0dfe17b: C-A0
286 |/
288 |/
287 @ ea207398892e: ROOT
289 @ ea207398892e: ROOT
288
290
289 $ hg debugobsolete
291 $ hg debugobsolete
290 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
292 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
291 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
293 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
292 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
294 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
293
295
294 Actual testing
296 Actual testing
295 --------------
297 --------------
296
298
297 $ testrevs 'desc("C-A0")'
299 $ testrevs 'desc("C-A0")'
298 ### Matched revisions###
300 ### Matched revisions###
299 84fcb0dfe17b: C-A0
301 84fcb0dfe17b: C-A0
300 ### Relevant markers ###
302 ### Relevant markers ###
301 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
303 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
302 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
304 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
303 # bundling: 1 changesets found
305 # bundling: 1 changesets found
304 ### Bundled markers ###
306 ### Bundled markers ###
305 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
307 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
306 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
308 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
307 ### diff <relevant> <bundled> ###
309 ### diff <relevant> <bundled> ###
308 #################################
310 #################################
309 ### Exclusive markers ###
311 ### Exclusive markers ###
310
312
311 (The strip markers is considered exclusive to the pruned changeset even if it
313 (The strip markers is considered exclusive to the pruned changeset even if it
312 is also considered "relevant" to its parent. This allows to strip prune
314 is also considered "relevant" to its parent. This allows to strip prune
313 markers. This avoid leaving prune markers from dead-end that could be
315 markers. This avoid leaving prune markers from dead-end that could be
314 problematic)
316 problematic)
315
317
316 $ testrevs 'desc("C-B0")'
318 $ testrevs 'desc("C-B0")'
317 ### Matched revisions###
319 ### Matched revisions###
318 29f93b1df87b: C-B0
320 29f93b1df87b: C-B0
319 ### Relevant markers ###
321 ### Relevant markers ###
320 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
322 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
321 # bundling: 1 changesets found
323 # bundling: 1 changesets found
322 ### Bundled markers ###
324 ### Bundled markers ###
323 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
325 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
324 ### diff <relevant> <bundled> ###
326 ### diff <relevant> <bundled> ###
325 #################################
327 #################################
326 ### Exclusive markers ###
328 ### Exclusive markers ###
327 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
329 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
328 # stripping: saved backup bundle to $TESTTMP/prune/.hg/strip-backup/29f93b1df87b-7fb32101-backup.hg
330 # stripping: saved backup bundle to $TESTTMP/prune/.hg/strip-backup/29f93b1df87b-7fb32101-backup.hg
329 ### Backup markers ###
331 ### Backup markers ###
330 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
332 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
331 ### diff <relevant> <backed-up> ###
333 ### diff <relevant> <backed-up> ###
332 #################################
334 #################################
333 ### Stripped markers ###
335 ### Stripped markers ###
334 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
336 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
335 ### diff <exclusive> <stripped> ###
337 ### diff <exclusive> <stripped> ###
336 #################################
338 #################################
337 # unbundling: adding changesets
339 # unbundling: adding changesets
338 # unbundling: adding manifests
340 # unbundling: adding manifests
339 # unbundling: adding file changes
341 # unbundling: adding file changes
340 # unbundling: added 1 changesets with 1 changes to 1 files
342 # unbundling: added 1 changesets with 1 changes to 1 files
341 # unbundling: 1 new obsolescence markers
343 # unbundling: 1 new obsolescence markers
344 # unbundling: (1 other changesets obsolete on arrival)
342 # unbundling: (run 'hg update' to get a working copy)
345 # unbundling: (run 'hg update' to get a working copy)
343
346
344 $ testrevs 'desc("C-A1")'
347 $ testrevs 'desc("C-A1")'
345 ### Matched revisions###
348 ### Matched revisions###
346 cf2c22470d67: C-A1
349 cf2c22470d67: C-A1
347 ### Relevant markers ###
350 ### Relevant markers ###
348 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
351 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
349 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
352 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
350 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
353 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
351 # bundling: 1 changesets found
354 # bundling: 1 changesets found
352 ### Bundled markers ###
355 ### Bundled markers ###
353 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
356 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
354 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
357 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
355 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
358 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
356 ### diff <relevant> <bundled> ###
359 ### diff <relevant> <bundled> ###
357 #################################
360 #################################
358 ### Exclusive markers ###
361 ### Exclusive markers ###
359 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
362 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
360 # stripping: saved backup bundle to $TESTTMP/prune/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg
363 # stripping: saved backup bundle to $TESTTMP/prune/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg
361 ### Backup markers ###
364 ### Backup markers ###
362 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
365 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
363 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
366 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
364 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
367 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
365 ### diff <relevant> <backed-up> ###
368 ### diff <relevant> <backed-up> ###
366 #################################
369 #################################
367 ### Stripped markers ###
370 ### Stripped markers ###
368 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
371 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
369 ### diff <exclusive> <stripped> ###
372 ### diff <exclusive> <stripped> ###
370 #################################
373 #################################
371 # unbundling: adding changesets
374 # unbundling: adding changesets
372 # unbundling: adding manifests
375 # unbundling: adding manifests
373 # unbundling: adding file changes
376 # unbundling: adding file changes
374 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
377 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
375 # unbundling: 1 new obsolescence markers
378 # unbundling: 1 new obsolescence markers
376 # unbundling: obsoleted 1 changesets
379 # unbundling: obsoleted 1 changesets
377 # unbundling: new changesets cf2c22470d67 (1 drafts)
380 # unbundling: new changesets cf2c22470d67 (1 drafts)
378 # unbundling: (run 'hg heads' to see heads)
381 # unbundling: (run 'hg heads' to see heads)
379
382
380 bundling multiple revisions
383 bundling multiple revisions
381
384
382 $ testrevs 'desc("C-A")'
385 $ testrevs 'desc("C-A")'
383 ### Matched revisions###
386 ### Matched revisions###
384 84fcb0dfe17b: C-A0
387 84fcb0dfe17b: C-A0
385 cf2c22470d67: C-A1
388 cf2c22470d67: C-A1
386 ### Relevant markers ###
389 ### Relevant markers ###
387 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
390 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
388 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
391 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
389 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
392 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
390 # bundling: 2 changesets found
393 # bundling: 2 changesets found
391 ### Bundled markers ###
394 ### Bundled markers ###
392 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
395 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
393 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
396 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
394 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
397 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
395 ### diff <relevant> <bundled> ###
398 ### diff <relevant> <bundled> ###
396 #################################
399 #################################
397 ### Exclusive markers ###
400 ### Exclusive markers ###
398 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
401 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
399 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
402 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
400
403
401 $ testrevs 'desc("C-")'
404 $ testrevs 'desc("C-")'
402 ### Matched revisions###
405 ### Matched revisions###
403 29f93b1df87b: C-B0
406 29f93b1df87b: C-B0
404 84fcb0dfe17b: C-A0
407 84fcb0dfe17b: C-A0
405 cf2c22470d67: C-A1
408 cf2c22470d67: C-A1
406 ### Relevant markers ###
409 ### Relevant markers ###
407 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
410 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
408 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
411 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
409 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
412 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
410 # bundling: 3 changesets found
413 # bundling: 3 changesets found
411 ### Bundled markers ###
414 ### Bundled markers ###
412 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
415 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
413 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
416 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
414 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
417 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
415 ### diff <relevant> <bundled> ###
418 ### diff <relevant> <bundled> ###
416 #################################
419 #################################
417 ### Exclusive markers ###
420 ### Exclusive markers ###
418 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
421 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
419 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
422 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
420 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
423 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
421 # stripping: saved backup bundle to $TESTTMP/prune/.hg/strip-backup/cf2c22470d67-884c33b0-backup.hg
424 # stripping: saved backup bundle to $TESTTMP/prune/.hg/strip-backup/cf2c22470d67-884c33b0-backup.hg
422 ### Backup markers ###
425 ### Backup markers ###
423 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
426 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
424 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
427 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
425 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
428 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
426 ### diff <relevant> <backed-up> ###
429 ### diff <relevant> <backed-up> ###
427 #################################
430 #################################
428 ### Stripped markers ###
431 ### Stripped markers ###
429 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
432 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
430 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
433 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
431 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
434 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
432 ### diff <exclusive> <stripped> ###
435 ### diff <exclusive> <stripped> ###
433 #################################
436 #################################
434 # unbundling: adding changesets
437 # unbundling: adding changesets
435 # unbundling: adding manifests
438 # unbundling: adding manifests
436 # unbundling: adding file changes
439 # unbundling: adding file changes
437 # unbundling: added 3 changesets with 3 changes to 3 files (+1 heads)
440 # unbundling: added 3 changesets with 3 changes to 3 files (+1 heads)
438 # unbundling: 3 new obsolescence markers
441 # unbundling: 3 new obsolescence markers
439 # unbundling: new changesets cf2c22470d67 (1 drafts)
442 # unbundling: new changesets cf2c22470d67 (1 drafts)
443 # unbundling: (2 other changesets obsolete on arrival)
440 # unbundling: (run 'hg heads' to see heads)
444 # unbundling: (run 'hg heads' to see heads)
441
445
442 chain with precursors also pruned
446 chain with precursors also pruned
443 =================================
447 =================================
444
448
445 . A0 (also pruned)
449 . A0 (also pruned)
446 . β‡ ΓΈβ‡ β—” A1
450 . β‡ ΓΈβ‡ β—” A1
447 . |
451 . |
448 . ●
452 . ●
449
453
450 setup
454 setup
451 -----
455 -----
452
456
453 $ mktestrepo prune-inline
457 $ mktestrepo prune-inline
454 $ mkcommit 'C-A0'
458 $ mkcommit 'C-A0'
455 $ hg up 'desc("ROOT")'
459 $ hg up 'desc("ROOT")'
456 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
460 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
457 $ mkcommit 'C-A1'
461 $ mkcommit 'C-A1'
458 created new head
462 created new head
459 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
463 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
460 $ hg debugobsolete --record-parents `getid 'desc("C-A0")'`
464 $ hg debugobsolete --record-parents `getid 'desc("C-A0")'`
461 obsoleted 1 changesets
465 obsoleted 1 changesets
462 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
466 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
463 $ hg up 'desc("ROOT")'
467 $ hg up 'desc("ROOT")'
464 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
468 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
465 $ hg log --hidden -G
469 $ hg log --hidden -G
466 o cf2c22470d67: C-A1
470 o cf2c22470d67: C-A1
467 |
471 |
468 | x 84fcb0dfe17b: C-A0
472 | x 84fcb0dfe17b: C-A0
469 |/
473 |/
470 @ ea207398892e: ROOT
474 @ ea207398892e: ROOT
471
475
472 $ hg debugobsolete
476 $ hg debugobsolete
473 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
477 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
474 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
478 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
475 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
479 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
476
480
477 Actual testing
481 Actual testing
478 --------------
482 --------------
479
483
480 $ testrevs 'desc("C-A0")'
484 $ testrevs 'desc("C-A0")'
481 ### Matched revisions###
485 ### Matched revisions###
482 84fcb0dfe17b: C-A0
486 84fcb0dfe17b: C-A0
483 ### Relevant markers ###
487 ### Relevant markers ###
484 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
488 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
485 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
489 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
486 # bundling: 1 changesets found
490 # bundling: 1 changesets found
487 ### Bundled markers ###
491 ### Bundled markers ###
488 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
492 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
489 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
493 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
490 ### diff <relevant> <bundled> ###
494 ### diff <relevant> <bundled> ###
491 #################################
495 #################################
492 ### Exclusive markers ###
496 ### Exclusive markers ###
493 # stripping: saved backup bundle to $TESTTMP/prune-inline/.hg/strip-backup/84fcb0dfe17b-6454bbdc-backup.hg
497 # stripping: saved backup bundle to $TESTTMP/prune-inline/.hg/strip-backup/84fcb0dfe17b-6454bbdc-backup.hg
494 ### Backup markers ###
498 ### Backup markers ###
495 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
499 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
496 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
500 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
497 ### diff <relevant> <backed-up> ###
501 ### diff <relevant> <backed-up> ###
498 #################################
502 #################################
499 ### Stripped markers ###
503 ### Stripped markers ###
500 ### diff <exclusive> <stripped> ###
504 ### diff <exclusive> <stripped> ###
501 #################################
505 #################################
502 # unbundling: adding changesets
506 # unbundling: adding changesets
503 # unbundling: adding manifests
507 # unbundling: adding manifests
504 # unbundling: adding file changes
508 # unbundling: adding file changes
505 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
509 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
510 # unbundling: (1 other changesets obsolete on arrival)
506 # unbundling: (run 'hg heads' to see heads)
511 # unbundling: (run 'hg heads' to see heads)
507
512
508 $ testrevs 'desc("C-A1")'
513 $ testrevs 'desc("C-A1")'
509 ### Matched revisions###
514 ### Matched revisions###
510 cf2c22470d67: C-A1
515 cf2c22470d67: C-A1
511 ### Relevant markers ###
516 ### Relevant markers ###
512 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
517 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
513 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
518 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
514 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
519 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
515 # bundling: 1 changesets found
520 # bundling: 1 changesets found
516 ### Bundled markers ###
521 ### Bundled markers ###
517 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
522 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
518 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
523 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
519 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
524 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
520 ### diff <relevant> <bundled> ###
525 ### diff <relevant> <bundled> ###
521 #################################
526 #################################
522 ### Exclusive markers ###
527 ### Exclusive markers ###
523 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
528 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
524 # stripping: saved backup bundle to $TESTTMP/prune-inline/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg
529 # stripping: saved backup bundle to $TESTTMP/prune-inline/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg
525 ### Backup markers ###
530 ### Backup markers ###
526 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
531 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
527 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
532 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
528 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
533 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
529 ### diff <relevant> <backed-up> ###
534 ### diff <relevant> <backed-up> ###
530 #################################
535 #################################
531 ### Stripped markers ###
536 ### Stripped markers ###
532 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
537 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
533 ### diff <exclusive> <stripped> ###
538 ### diff <exclusive> <stripped> ###
534 #################################
539 #################################
535 # unbundling: adding changesets
540 # unbundling: adding changesets
536 # unbundling: adding manifests
541 # unbundling: adding manifests
537 # unbundling: adding file changes
542 # unbundling: adding file changes
538 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
543 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
539 # unbundling: 1 new obsolescence markers
544 # unbundling: 1 new obsolescence markers
540 # unbundling: new changesets cf2c22470d67 (1 drafts)
545 # unbundling: new changesets cf2c22470d67 (1 drafts)
541 # unbundling: (run 'hg heads' to see heads)
546 # unbundling: (run 'hg heads' to see heads)
542
547
543 $ testrevs 'desc("C-A")'
548 $ testrevs 'desc("C-A")'
544 ### Matched revisions###
549 ### Matched revisions###
545 84fcb0dfe17b: C-A0
550 84fcb0dfe17b: C-A0
546 cf2c22470d67: C-A1
551 cf2c22470d67: C-A1
547 ### Relevant markers ###
552 ### Relevant markers ###
548 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
553 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
549 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
554 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
550 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
555 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
551 # bundling: 2 changesets found
556 # bundling: 2 changesets found
552 ### Bundled markers ###
557 ### Bundled markers ###
553 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
558 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
554 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
559 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
555 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
560 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
556 ### diff <relevant> <bundled> ###
561 ### diff <relevant> <bundled> ###
557 #################################
562 #################################
558 ### Exclusive markers ###
563 ### Exclusive markers ###
559 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
564 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
560 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
565 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
561 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
566 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
562 # stripping: saved backup bundle to $TESTTMP/prune-inline/.hg/strip-backup/cf2c22470d67-fce4fc64-backup.hg
567 # stripping: saved backup bundle to $TESTTMP/prune-inline/.hg/strip-backup/cf2c22470d67-fce4fc64-backup.hg
563 ### Backup markers ###
568 ### Backup markers ###
564 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
569 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
565 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
570 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
566 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
571 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
567 ### diff <relevant> <backed-up> ###
572 ### diff <relevant> <backed-up> ###
568 #################################
573 #################################
569 ### Stripped markers ###
574 ### Stripped markers ###
570 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
575 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
571 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
576 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
572 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
577 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
573 ### diff <exclusive> <stripped> ###
578 ### diff <exclusive> <stripped> ###
574 #################################
579 #################################
575 # unbundling: adding changesets
580 # unbundling: adding changesets
576 # unbundling: adding manifests
581 # unbundling: adding manifests
577 # unbundling: adding file changes
582 # unbundling: adding file changes
578 # unbundling: added 2 changesets with 2 changes to 2 files (+1 heads)
583 # unbundling: added 2 changesets with 2 changes to 2 files (+1 heads)
579 # unbundling: 3 new obsolescence markers
584 # unbundling: 3 new obsolescence markers
580 # unbundling: new changesets cf2c22470d67 (1 drafts)
585 # unbundling: new changesets cf2c22470d67 (1 drafts)
586 # unbundling: (1 other changesets obsolete on arrival)
581 # unbundling: (run 'hg heads' to see heads)
587 # unbundling: (run 'hg heads' to see heads)
582
588
583 chain with missing prune
589 chain with missing prune
584 ========================
590 ========================
585
591
586 . βŠ— B
592 . βŠ— B
587 . |
593 . |
588 . β‡ β—Œβ‡ β—” A1
594 . β‡ β—Œβ‡ β—” A1
589 . |
595 . |
590 . ●
596 . ●
591
597
592 setup
598 setup
593 -----
599 -----
594
600
595 $ mktestrepo missing-prune
601 $ mktestrepo missing-prune
596 $ mkcommit 'C-A0'
602 $ mkcommit 'C-A0'
597 $ mkcommit 'C-B0'
603 $ mkcommit 'C-B0'
598 $ hg up 'desc("ROOT")'
604 $ hg up 'desc("ROOT")'
599 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
605 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
600 $ mkcommit 'C-A1'
606 $ mkcommit 'C-A1'
601 created new head
607 created new head
602 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
608 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
603 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
609 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
604 obsoleted 1 changesets
610 obsoleted 1 changesets
605 1 new orphan changesets
611 1 new orphan changesets
606 $ hg debugobsolete --record-parents `getid 'desc("C-B0")'`
612 $ hg debugobsolete --record-parents `getid 'desc("C-B0")'`
607 obsoleted 1 changesets
613 obsoleted 1 changesets
608
614
609 (it is annoying to create prune with parent data without the changeset, so we strip it after the fact)
615 (it is annoying to create prune with parent data without the changeset, so we strip it after the fact)
610
616
611 $ hg strip --hidden --rev 'desc("C-A0")::' --no-backup --config devel.strip-obsmarkers=no
617 $ hg strip --hidden --rev 'desc("C-A0")::' --no-backup --config devel.strip-obsmarkers=no
612
618
613 $ hg up 'desc("ROOT")'
619 $ hg up 'desc("ROOT")'
614 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
620 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
615 $ hg log --hidden -G
621 $ hg log --hidden -G
616 o cf2c22470d67: C-A1
622 o cf2c22470d67: C-A1
617 |
623 |
618 @ ea207398892e: ROOT
624 @ ea207398892e: ROOT
619
625
620 $ hg debugobsolete
626 $ hg debugobsolete
621 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
627 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
622 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
628 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
623 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
629 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
624
630
625 Actual testing
631 Actual testing
626 --------------
632 --------------
627
633
628 $ testrevs 'desc("C-A1")'
634 $ testrevs 'desc("C-A1")'
629 ### Matched revisions###
635 ### Matched revisions###
630 cf2c22470d67: C-A1
636 cf2c22470d67: C-A1
631 ### Relevant markers ###
637 ### Relevant markers ###
632 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
638 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
633 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
639 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
634 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
640 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
635 # bundling: 1 changesets found
641 # bundling: 1 changesets found
636 ### Bundled markers ###
642 ### Bundled markers ###
637 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
643 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
638 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
644 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
639 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
645 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
640 ### diff <relevant> <bundled> ###
646 ### diff <relevant> <bundled> ###
641 #################################
647 #################################
642 ### Exclusive markers ###
648 ### Exclusive markers ###
643 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
649 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
644 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
650 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
645 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
651 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
646 # stripping: saved backup bundle to $TESTTMP/missing-prune/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg
652 # stripping: saved backup bundle to $TESTTMP/missing-prune/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg
647 ### Backup markers ###
653 ### Backup markers ###
648 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
654 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
649 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
655 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
650 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
656 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
651 ### diff <relevant> <backed-up> ###
657 ### diff <relevant> <backed-up> ###
652 #################################
658 #################################
653 ### Stripped markers ###
659 ### Stripped markers ###
654 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
660 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
655 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
661 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
656 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
662 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
657 ### diff <exclusive> <stripped> ###
663 ### diff <exclusive> <stripped> ###
658 #################################
664 #################################
659 # unbundling: adding changesets
665 # unbundling: adding changesets
660 # unbundling: adding manifests
666 # unbundling: adding manifests
661 # unbundling: adding file changes
667 # unbundling: adding file changes
662 # unbundling: added 1 changesets with 1 changes to 1 files
668 # unbundling: added 1 changesets with 1 changes to 1 files
663 # unbundling: 3 new obsolescence markers
669 # unbundling: 3 new obsolescence markers
664 # unbundling: new changesets cf2c22470d67 (1 drafts)
670 # unbundling: new changesets cf2c22470d67 (1 drafts)
665 # unbundling: (run 'hg update' to get a working copy)
671 # unbundling: (run 'hg update' to get a working copy)
666
672
667 chain with precursors also pruned
673 chain with precursors also pruned
668 =================================
674 =================================
669
675
670 . A0 (also pruned)
676 . A0 (also pruned)
671 . β‡ β—Œβ‡ β—” A1
677 . β‡ β—Œβ‡ β—” A1
672 . |
678 . |
673 . ●
679 . ●
674
680
675 setup
681 setup
676 -----
682 -----
677
683
678 $ mktestrepo prune-inline-missing
684 $ mktestrepo prune-inline-missing
679 $ mkcommit 'C-A0'
685 $ mkcommit 'C-A0'
680 $ hg up 'desc("ROOT")'
686 $ hg up 'desc("ROOT")'
681 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
687 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
682 $ mkcommit 'C-A1'
688 $ mkcommit 'C-A1'
683 created new head
689 created new head
684 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
690 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
685 $ hg debugobsolete --record-parents `getid 'desc("C-A0")'`
691 $ hg debugobsolete --record-parents `getid 'desc("C-A0")'`
686 obsoleted 1 changesets
692 obsoleted 1 changesets
687 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
693 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
688
694
689 (it is annoying to create prune with parent data without the changeset, so we strip it after the fact)
695 (it is annoying to create prune with parent data without the changeset, so we strip it after the fact)
690
696
691 $ hg strip --hidden --rev 'desc("C-A0")::' --no-backup --config devel.strip-obsmarkers=no
697 $ hg strip --hidden --rev 'desc("C-A0")::' --no-backup --config devel.strip-obsmarkers=no
692
698
693 $ hg up 'desc("ROOT")'
699 $ hg up 'desc("ROOT")'
694 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
700 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
695 $ hg log --hidden -G
701 $ hg log --hidden -G
696 o cf2c22470d67: C-A1
702 o cf2c22470d67: C-A1
697 |
703 |
698 @ ea207398892e: ROOT
704 @ ea207398892e: ROOT
699
705
700 $ hg debugobsolete
706 $ hg debugobsolete
701 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
707 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
702 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
708 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
703 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
709 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
704
710
705 Actual testing
711 Actual testing
706 --------------
712 --------------
707
713
708 $ testrevs 'desc("C-A1")'
714 $ testrevs 'desc("C-A1")'
709 ### Matched revisions###
715 ### Matched revisions###
710 cf2c22470d67: C-A1
716 cf2c22470d67: C-A1
711 ### Relevant markers ###
717 ### Relevant markers ###
712 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
718 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
713 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
719 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
714 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
720 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
715 # bundling: 1 changesets found
721 # bundling: 1 changesets found
716 ### Bundled markers ###
722 ### Bundled markers ###
717 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
723 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
718 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
724 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
719 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
725 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
720 ### diff <relevant> <bundled> ###
726 ### diff <relevant> <bundled> ###
721 #################################
727 #################################
722 ### Exclusive markers ###
728 ### Exclusive markers ###
723 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
729 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
724 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
730 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
725 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
731 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
726 # stripping: saved backup bundle to $TESTTMP/prune-inline-missing/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg
732 # stripping: saved backup bundle to $TESTTMP/prune-inline-missing/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg
727 ### Backup markers ###
733 ### Backup markers ###
728 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
734 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
729 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
735 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
730 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
736 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
731 ### diff <relevant> <backed-up> ###
737 ### diff <relevant> <backed-up> ###
732 #################################
738 #################################
733 ### Stripped markers ###
739 ### Stripped markers ###
734 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
740 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
735 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
741 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
736 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
742 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
737 ### diff <exclusive> <stripped> ###
743 ### diff <exclusive> <stripped> ###
738 #################################
744 #################################
739 # unbundling: adding changesets
745 # unbundling: adding changesets
740 # unbundling: adding manifests
746 # unbundling: adding manifests
741 # unbundling: adding file changes
747 # unbundling: adding file changes
742 # unbundling: added 1 changesets with 1 changes to 1 files
748 # unbundling: added 1 changesets with 1 changes to 1 files
743 # unbundling: 3 new obsolescence markers
749 # unbundling: 3 new obsolescence markers
744 # unbundling: new changesets cf2c22470d67 (1 drafts)
750 # unbundling: new changesets cf2c22470d67 (1 drafts)
745 # unbundling: (run 'hg update' to get a working copy)
751 # unbundling: (run 'hg update' to get a working copy)
746
752
747 Chain with fold and split
753 Chain with fold and split
748 =========================
754 =========================
749
755
750 setup
756 setup
751 -----
757 -----
752
758
753 $ mktestrepo split-fold
759 $ mktestrepo split-fold
754 $ mkcommit 'C-A'
760 $ mkcommit 'C-A'
755 $ hg up 'desc("ROOT")'
761 $ hg up 'desc("ROOT")'
756 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
762 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
757 $ mkcommit 'C-B'
763 $ mkcommit 'C-B'
758 created new head
764 created new head
759 $ hg up 'desc("ROOT")'
765 $ hg up 'desc("ROOT")'
760 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
766 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
761 $ mkcommit 'C-C'
767 $ mkcommit 'C-C'
762 created new head
768 created new head
763 $ hg up 'desc("ROOT")'
769 $ hg up 'desc("ROOT")'
764 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
770 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
765 $ mkcommit 'C-D'
771 $ mkcommit 'C-D'
766 created new head
772 created new head
767 $ hg up 'desc("ROOT")'
773 $ hg up 'desc("ROOT")'
768 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
774 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
769 $ mkcommit 'C-E'
775 $ mkcommit 'C-E'
770 created new head
776 created new head
771 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A")'`
777 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A")'`
772 $ hg debugobsolete `getid 'desc("C-A")'` `getid 'desc("C-B")'` `getid 'desc("C-C")'` # record split
778 $ hg debugobsolete `getid 'desc("C-A")'` `getid 'desc("C-B")'` `getid 'desc("C-C")'` # record split
773 obsoleted 1 changesets
779 obsoleted 1 changesets
774 $ hg debugobsolete `getid 'desc("C-A")'` `getid 'desc("C-D")'` # other divergent
780 $ hg debugobsolete `getid 'desc("C-A")'` `getid 'desc("C-D")'` # other divergent
775 3 new content-divergent changesets
781 3 new content-divergent changesets
776 $ hg debugobsolete `getid 'desc("C-A")'` b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0
782 $ hg debugobsolete `getid 'desc("C-A")'` b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0
777 $ hg debugobsolete b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 `getid 'desc("C-E")'`
783 $ hg debugobsolete b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 `getid 'desc("C-E")'`
778 1 new content-divergent changesets
784 1 new content-divergent changesets
779 $ hg debugobsolete `getid 'desc("C-B")'` `getid 'desc("C-E")'`
785 $ hg debugobsolete `getid 'desc("C-B")'` `getid 'desc("C-E")'`
780 obsoleted 1 changesets
786 obsoleted 1 changesets
781 $ hg debugobsolete `getid 'desc("C-C")'` `getid 'desc("C-E")'`
787 $ hg debugobsolete `getid 'desc("C-C")'` `getid 'desc("C-E")'`
782 obsoleted 1 changesets
788 obsoleted 1 changesets
783 $ hg debugobsolete `getid 'desc("C-D")'` `getid 'desc("C-E")'`
789 $ hg debugobsolete `getid 'desc("C-D")'` `getid 'desc("C-E")'`
784 obsoleted 1 changesets
790 obsoleted 1 changesets
785 $ hg debugobsolete c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 `getid 'desc("C-E")'`
791 $ hg debugobsolete c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 `getid 'desc("C-E")'`
786
792
787 $ hg up 'desc("ROOT")'
793 $ hg up 'desc("ROOT")'
788 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
794 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
789 $ hg log --hidden -G
795 $ hg log --hidden -G
790 o 2f20ff6509f0: C-E
796 o 2f20ff6509f0: C-E
791 |
797 |
792 | x 06dc9da25ef0: C-D
798 | x 06dc9da25ef0: C-D
793 |/
799 |/
794 | x 27ec657ca21d: C-C
800 | x 27ec657ca21d: C-C
795 |/
801 |/
796 | x a9b9da38ed96: C-B
802 | x a9b9da38ed96: C-B
797 |/
803 |/
798 | x 9ac430e15fca: C-A
804 | x 9ac430e15fca: C-A
799 |/
805 |/
800 @ ea207398892e: ROOT
806 @ ea207398892e: ROOT
801
807
802 $ hg debugobsolete
808 $ hg debugobsolete
803 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
809 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
804 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
810 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
805 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
811 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
806 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
812 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
807 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
813 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
808 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
814 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
809 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
815 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
810 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
816 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
811 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
817 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
812
818
813 Actual testing
819 Actual testing
814 --------------
820 --------------
815
821
816 $ testrevs 'desc("C-A")'
822 $ testrevs 'desc("C-A")'
817 ### Matched revisions###
823 ### Matched revisions###
818 9ac430e15fca: C-A
824 9ac430e15fca: C-A
819 ### Relevant markers ###
825 ### Relevant markers ###
820 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
826 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
821 # bundling: 1 changesets found
827 # bundling: 1 changesets found
822 ### Bundled markers ###
828 ### Bundled markers ###
823 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
829 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
824 ### diff <relevant> <bundled> ###
830 ### diff <relevant> <bundled> ###
825 #################################
831 #################################
826 ### Exclusive markers ###
832 ### Exclusive markers ###
827 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/9ac430e15fca-81204eba-backup.hg
833 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/9ac430e15fca-81204eba-backup.hg
828 ### Backup markers ###
834 ### Backup markers ###
829 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
835 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
830 ### diff <relevant> <backed-up> ###
836 ### diff <relevant> <backed-up> ###
831 #################################
837 #################################
832 ### Stripped markers ###
838 ### Stripped markers ###
833 ### diff <exclusive> <stripped> ###
839 ### diff <exclusive> <stripped> ###
834 #################################
840 #################################
835 # unbundling: adding changesets
841 # unbundling: adding changesets
836 # unbundling: adding manifests
842 # unbundling: adding manifests
837 # unbundling: adding file changes
843 # unbundling: adding file changes
838 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
844 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
845 # unbundling: (1 other changesets obsolete on arrival)
839 # unbundling: (run 'hg heads' to see heads)
846 # unbundling: (run 'hg heads' to see heads)
840
847
841 $ testrevs 'desc("C-B")'
848 $ testrevs 'desc("C-B")'
842 ### Matched revisions###
849 ### Matched revisions###
843 a9b9da38ed96: C-B
850 a9b9da38ed96: C-B
844 ### Relevant markers ###
851 ### Relevant markers ###
845 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
852 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
846 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
853 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
847 # bundling: 1 changesets found
854 # bundling: 1 changesets found
848 ### Bundled markers ###
855 ### Bundled markers ###
849 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
856 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
850 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
857 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
851 ### diff <relevant> <bundled> ###
858 ### diff <relevant> <bundled> ###
852 #################################
859 #################################
853 ### Exclusive markers ###
860 ### Exclusive markers ###
854 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/a9b9da38ed96-7465d6e9-backup.hg
861 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/a9b9da38ed96-7465d6e9-backup.hg
855 ### Backup markers ###
862 ### Backup markers ###
856 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
863 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
857 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
864 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
858 ### diff <relevant> <backed-up> ###
865 ### diff <relevant> <backed-up> ###
859 #################################
866 #################################
860 ### Stripped markers ###
867 ### Stripped markers ###
861 ### diff <exclusive> <stripped> ###
868 ### diff <exclusive> <stripped> ###
862 #################################
869 #################################
863 # unbundling: adding changesets
870 # unbundling: adding changesets
864 # unbundling: adding manifests
871 # unbundling: adding manifests
865 # unbundling: adding file changes
872 # unbundling: adding file changes
866 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
873 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
874 # unbundling: (1 other changesets obsolete on arrival)
867 # unbundling: (run 'hg heads' to see heads)
875 # unbundling: (run 'hg heads' to see heads)
868
876
869 $ testrevs 'desc("C-C")'
877 $ testrevs 'desc("C-C")'
870 ### Matched revisions###
878 ### Matched revisions###
871 27ec657ca21d: C-C
879 27ec657ca21d: C-C
872 ### Relevant markers ###
880 ### Relevant markers ###
873 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
881 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
874 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
882 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
875 # bundling: 1 changesets found
883 # bundling: 1 changesets found
876 ### Bundled markers ###
884 ### Bundled markers ###
877 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
885 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
878 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
886 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
879 ### diff <relevant> <bundled> ###
887 ### diff <relevant> <bundled> ###
880 #################################
888 #################################
881 ### Exclusive markers ###
889 ### Exclusive markers ###
882 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/27ec657ca21d-d5dd1c7c-backup.hg
890 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/27ec657ca21d-d5dd1c7c-backup.hg
883 ### Backup markers ###
891 ### Backup markers ###
884 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
892 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
885 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
893 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
886 ### diff <relevant> <backed-up> ###
894 ### diff <relevant> <backed-up> ###
887 #################################
895 #################################
888 ### Stripped markers ###
896 ### Stripped markers ###
889 ### diff <exclusive> <stripped> ###
897 ### diff <exclusive> <stripped> ###
890 #################################
898 #################################
891 # unbundling: adding changesets
899 # unbundling: adding changesets
892 # unbundling: adding manifests
900 # unbundling: adding manifests
893 # unbundling: adding file changes
901 # unbundling: adding file changes
894 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
902 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
903 # unbundling: (1 other changesets obsolete on arrival)
895 # unbundling: (run 'hg heads' to see heads)
904 # unbundling: (run 'hg heads' to see heads)
896
905
897 $ testrevs 'desc("C-D")'
906 $ testrevs 'desc("C-D")'
898 ### Matched revisions###
907 ### Matched revisions###
899 06dc9da25ef0: C-D
908 06dc9da25ef0: C-D
900 ### Relevant markers ###
909 ### Relevant markers ###
901 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
910 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
902 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
911 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
903 # bundling: 1 changesets found
912 # bundling: 1 changesets found
904 ### Bundled markers ###
913 ### Bundled markers ###
905 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
914 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
906 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
915 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
907 ### diff <relevant> <bundled> ###
916 ### diff <relevant> <bundled> ###
908 #################################
917 #################################
909 ### Exclusive markers ###
918 ### Exclusive markers ###
910 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/06dc9da25ef0-9b1c0a91-backup.hg
919 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/06dc9da25ef0-9b1c0a91-backup.hg
911 ### Backup markers ###
920 ### Backup markers ###
912 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
921 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
913 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
922 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
914 ### diff <relevant> <backed-up> ###
923 ### diff <relevant> <backed-up> ###
915 #################################
924 #################################
916 ### Stripped markers ###
925 ### Stripped markers ###
917 ### diff <exclusive> <stripped> ###
926 ### diff <exclusive> <stripped> ###
918 #################################
927 #################################
919 # unbundling: adding changesets
928 # unbundling: adding changesets
920 # unbundling: adding manifests
929 # unbundling: adding manifests
921 # unbundling: adding file changes
930 # unbundling: adding file changes
922 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
931 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
932 # unbundling: (1 other changesets obsolete on arrival)
923 # unbundling: (run 'hg heads' to see heads)
933 # unbundling: (run 'hg heads' to see heads)
924
934
925 $ testrevs 'desc("C-E")'
935 $ testrevs 'desc("C-E")'
926 ### Matched revisions###
936 ### Matched revisions###
927 2f20ff6509f0: C-E
937 2f20ff6509f0: C-E
928 ### Relevant markers ###
938 ### Relevant markers ###
929 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
939 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
930 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
940 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
931 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
941 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
932 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
942 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
933 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
943 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
934 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
944 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
935 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
945 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
936 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
946 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
937 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
947 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
938 # bundling: 1 changesets found
948 # bundling: 1 changesets found
939 ### Bundled markers ###
949 ### Bundled markers ###
940 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
950 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
941 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
951 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
942 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
952 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
943 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
953 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
944 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
954 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
945 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
955 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
946 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
956 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
947 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
957 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
948 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
958 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
949 ### diff <relevant> <bundled> ###
959 ### diff <relevant> <bundled> ###
950 #################################
960 #################################
951 ### Exclusive markers ###
961 ### Exclusive markers ###
952 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
962 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
953 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
963 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
954 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
964 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
955 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
965 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
956 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
966 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
957 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
967 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
958 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/2f20ff6509f0-8adeb22d-backup.hg
968 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/2f20ff6509f0-8adeb22d-backup.hg
959 3 new content-divergent changesets
969 3 new content-divergent changesets
960 ### Backup markers ###
970 ### Backup markers ###
961 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
971 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
962 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
972 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
963 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
973 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
964 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
974 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
965 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
975 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
966 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
976 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
967 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
977 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
968 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
978 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
969 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
979 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
970 ### diff <relevant> <backed-up> ###
980 ### diff <relevant> <backed-up> ###
971 #################################
981 #################################
972 ### Stripped markers ###
982 ### Stripped markers ###
973 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
983 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
974 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
984 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
975 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
985 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
976 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
986 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
977 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
987 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
978 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
988 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
979 ### diff <exclusive> <stripped> ###
989 ### diff <exclusive> <stripped> ###
980 #################################
990 #################################
981 # unbundling: adding changesets
991 # unbundling: adding changesets
982 # unbundling: adding manifests
992 # unbundling: adding manifests
983 # unbundling: adding file changes
993 # unbundling: adding file changes
984 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
994 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
985 # unbundling: 6 new obsolescence markers
995 # unbundling: 6 new obsolescence markers
986 # unbundling: obsoleted 3 changesets
996 # unbundling: obsoleted 3 changesets
987 # unbundling: new changesets 2f20ff6509f0 (1 drafts)
997 # unbundling: new changesets 2f20ff6509f0 (1 drafts)
988 # unbundling: (run 'hg heads' to see heads)
998 # unbundling: (run 'hg heads' to see heads)
989
999
990 Bundle multiple revisions
1000 Bundle multiple revisions
991
1001
992 * each part of the split
1002 * each part of the split
993
1003
994 $ testrevs 'desc("C-B") + desc("C-C")'
1004 $ testrevs 'desc("C-B") + desc("C-C")'
995 ### Matched revisions###
1005 ### Matched revisions###
996 27ec657ca21d: C-C
1006 27ec657ca21d: C-C
997 a9b9da38ed96: C-B
1007 a9b9da38ed96: C-B
998 ### Relevant markers ###
1008 ### Relevant markers ###
999 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1009 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1000 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1010 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1001 # bundling: 2 changesets found
1011 # bundling: 2 changesets found
1002 ### Bundled markers ###
1012 ### Bundled markers ###
1003 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1013 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1004 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1014 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1005 ### diff <relevant> <bundled> ###
1015 ### diff <relevant> <bundled> ###
1006 #################################
1016 #################################
1007 ### Exclusive markers ###
1017 ### Exclusive markers ###
1008 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/a9b9da38ed96-0daf625a-backup.hg
1018 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/a9b9da38ed96-0daf625a-backup.hg
1009 ### Backup markers ###
1019 ### Backup markers ###
1010 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1020 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1011 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1021 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1012 ### diff <relevant> <backed-up> ###
1022 ### diff <relevant> <backed-up> ###
1013 #################################
1023 #################################
1014 ### Stripped markers ###
1024 ### Stripped markers ###
1015 ### diff <exclusive> <stripped> ###
1025 ### diff <exclusive> <stripped> ###
1016 #################################
1026 #################################
1017 # unbundling: adding changesets
1027 # unbundling: adding changesets
1018 # unbundling: adding manifests
1028 # unbundling: adding manifests
1019 # unbundling: adding file changes
1029 # unbundling: adding file changes
1020 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1030 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1031 # unbundling: (2 other changesets obsolete on arrival)
1021 # unbundling: (run 'hg heads' to see heads)
1032 # unbundling: (run 'hg heads' to see heads)
1022
1033
1023 * top one and other divergent
1034 * top one and other divergent
1024
1035
1025 $ testrevs 'desc("C-E") + desc("C-D")'
1036 $ testrevs 'desc("C-E") + desc("C-D")'
1026 ### Matched revisions###
1037 ### Matched revisions###
1027 06dc9da25ef0: C-D
1038 06dc9da25ef0: C-D
1028 2f20ff6509f0: C-E
1039 2f20ff6509f0: C-E
1029 ### Relevant markers ###
1040 ### Relevant markers ###
1030 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1041 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1031 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1042 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1032 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1043 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1033 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1044 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1034 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1045 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1035 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1046 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1036 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1047 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1037 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1048 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1038 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1049 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1039 # bundling: 2 changesets found
1050 # bundling: 2 changesets found
1040 ### Bundled markers ###
1051 ### Bundled markers ###
1041 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1052 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1042 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1053 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1043 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1054 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1044 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1055 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1045 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1056 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1046 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1057 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1047 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1058 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1048 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1059 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1049 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1060 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1050 ### diff <relevant> <bundled> ###
1061 ### diff <relevant> <bundled> ###
1051 #################################
1062 #################################
1052 ### Exclusive markers ###
1063 ### Exclusive markers ###
1053 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1064 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1054 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1065 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1055 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1066 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1056 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1067 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1057 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1068 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1058 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1069 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1059 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1070 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1060 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/2f20ff6509f0-bf1b80f4-backup.hg
1071 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/2f20ff6509f0-bf1b80f4-backup.hg
1061 ### Backup markers ###
1072 ### Backup markers ###
1062 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1073 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1063 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1074 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1064 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1075 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1065 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1076 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1066 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1077 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1067 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1078 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1068 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1079 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1069 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1080 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1070 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1081 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1071 ### diff <relevant> <backed-up> ###
1082 ### diff <relevant> <backed-up> ###
1072 #################################
1083 #################################
1073 ### Stripped markers ###
1084 ### Stripped markers ###
1074 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1085 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1075 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1086 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1076 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1087 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1077 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1088 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1078 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1089 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1079 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1090 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1080 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1091 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1081 ### diff <exclusive> <stripped> ###
1092 ### diff <exclusive> <stripped> ###
1082 #################################
1093 #################################
1083 # unbundling: adding changesets
1094 # unbundling: adding changesets
1084 # unbundling: adding manifests
1095 # unbundling: adding manifests
1085 # unbundling: adding file changes
1096 # unbundling: adding file changes
1086 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1097 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1087 # unbundling: 7 new obsolescence markers
1098 # unbundling: 7 new obsolescence markers
1088 # unbundling: obsoleted 2 changesets
1099 # unbundling: obsoleted 2 changesets
1089 # unbundling: new changesets 2f20ff6509f0 (1 drafts)
1100 # unbundling: new changesets 2f20ff6509f0 (1 drafts)
1101 # unbundling: (1 other changesets obsolete on arrival)
1090 # unbundling: (run 'hg heads' to see heads)
1102 # unbundling: (run 'hg heads' to see heads)
1091
1103
1092 * top one and initial precursors
1104 * top one and initial precursors
1093
1105
1094 $ testrevs 'desc("C-E") + desc("C-A")'
1106 $ testrevs 'desc("C-E") + desc("C-A")'
1095 ### Matched revisions###
1107 ### Matched revisions###
1096 2f20ff6509f0: C-E
1108 2f20ff6509f0: C-E
1097 9ac430e15fca: C-A
1109 9ac430e15fca: C-A
1098 ### Relevant markers ###
1110 ### Relevant markers ###
1099 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1111 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1100 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1112 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1101 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1113 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1102 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1114 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1103 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1115 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1104 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1116 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1105 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1117 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1106 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1118 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1107 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1119 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1108 # bundling: 2 changesets found
1120 # bundling: 2 changesets found
1109 ### Bundled markers ###
1121 ### Bundled markers ###
1110 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1122 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1111 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1123 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1112 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1124 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1113 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1125 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1114 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1126 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1115 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1127 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1116 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1128 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1117 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1129 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1118 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1130 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1119 ### diff <relevant> <bundled> ###
1131 ### diff <relevant> <bundled> ###
1120 #################################
1132 #################################
1121 ### Exclusive markers ###
1133 ### Exclusive markers ###
1122 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1134 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1123 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1135 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1124 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1136 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1125 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1137 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1126 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1138 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1127 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1139 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1128 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/9ac430e15fca-36b6476a-backup.hg
1140 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/9ac430e15fca-36b6476a-backup.hg
1129 3 new content-divergent changesets
1141 3 new content-divergent changesets
1130 ### Backup markers ###
1142 ### Backup markers ###
1131 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1143 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1132 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1144 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1133 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1145 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1134 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1146 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1135 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1147 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1136 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1148 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1137 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1149 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1138 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1150 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1139 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1151 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1140 ### diff <relevant> <backed-up> ###
1152 ### diff <relevant> <backed-up> ###
1141 #################################
1153 #################################
1142 ### Stripped markers ###
1154 ### Stripped markers ###
1143 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1155 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1144 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1156 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1145 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1157 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1146 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1158 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1147 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1159 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1148 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1160 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1149 ### diff <exclusive> <stripped> ###
1161 ### diff <exclusive> <stripped> ###
1150 #################################
1162 #################################
1151 # unbundling: adding changesets
1163 # unbundling: adding changesets
1152 # unbundling: adding manifests
1164 # unbundling: adding manifests
1153 # unbundling: adding file changes
1165 # unbundling: adding file changes
1154 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1166 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1155 # unbundling: 6 new obsolescence markers
1167 # unbundling: 6 new obsolescence markers
1156 # unbundling: obsoleted 3 changesets
1168 # unbundling: obsoleted 3 changesets
1157 # unbundling: new changesets 2f20ff6509f0 (1 drafts)
1169 # unbundling: new changesets 2f20ff6509f0 (1 drafts)
1170 # unbundling: (1 other changesets obsolete on arrival)
1158 # unbundling: (run 'hg heads' to see heads)
1171 # unbundling: (run 'hg heads' to see heads)
1159
1172
1160 * top one and one of the split
1173 * top one and one of the split
1161
1174
1162 $ testrevs 'desc("C-E") + desc("C-C")'
1175 $ testrevs 'desc("C-E") + desc("C-C")'
1163 ### Matched revisions###
1176 ### Matched revisions###
1164 27ec657ca21d: C-C
1177 27ec657ca21d: C-C
1165 2f20ff6509f0: C-E
1178 2f20ff6509f0: C-E
1166 ### Relevant markers ###
1179 ### Relevant markers ###
1167 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1180 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1168 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1181 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1169 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1182 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1170 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1183 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1171 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1184 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1172 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1185 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1173 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1186 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1174 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1187 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1175 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1188 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1176 # bundling: 2 changesets found
1189 # bundling: 2 changesets found
1177 ### Bundled markers ###
1190 ### Bundled markers ###
1178 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1191 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1179 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1192 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1180 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1193 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1181 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1194 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1182 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1195 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1183 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1196 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1184 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1197 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1185 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1198 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1186 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1199 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1187 ### diff <relevant> <bundled> ###
1200 ### diff <relevant> <bundled> ###
1188 #################################
1201 #################################
1189 ### Exclusive markers ###
1202 ### Exclusive markers ###
1190 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1203 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1191 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1204 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1192 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1205 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1193 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1206 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1194 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1207 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1195 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1208 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1196 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1209 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1197 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/2f20ff6509f0-5fdfcd7d-backup.hg
1210 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/2f20ff6509f0-5fdfcd7d-backup.hg
1198 ### Backup markers ###
1211 ### Backup markers ###
1199 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1212 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1200 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1213 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1201 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1214 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1202 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1215 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1203 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1216 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1204 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1217 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1205 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1218 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1206 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1219 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1207 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1220 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1208 ### diff <relevant> <backed-up> ###
1221 ### diff <relevant> <backed-up> ###
1209 #################################
1222 #################################
1210 ### Stripped markers ###
1223 ### Stripped markers ###
1211 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1224 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1212 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1225 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1213 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1226 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1214 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1227 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1215 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1228 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1216 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1229 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1217 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1230 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1218 ### diff <exclusive> <stripped> ###
1231 ### diff <exclusive> <stripped> ###
1219 #################################
1232 #################################
1220 # unbundling: adding changesets
1233 # unbundling: adding changesets
1221 # unbundling: adding manifests
1234 # unbundling: adding manifests
1222 # unbundling: adding file changes
1235 # unbundling: adding file changes
1223 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1236 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1224 # unbundling: 7 new obsolescence markers
1237 # unbundling: 7 new obsolescence markers
1225 # unbundling: obsoleted 2 changesets
1238 # unbundling: obsoleted 2 changesets
1226 # unbundling: new changesets 2f20ff6509f0 (1 drafts)
1239 # unbundling: new changesets 2f20ff6509f0 (1 drafts)
1240 # unbundling: (1 other changesets obsolete on arrival)
1227 # unbundling: (run 'hg heads' to see heads)
1241 # unbundling: (run 'hg heads' to see heads)
1228
1242
1229 * all
1243 * all
1230
1244
1231 $ testrevs 'desc("C-")'
1245 $ testrevs 'desc("C-")'
1232 ### Matched revisions###
1246 ### Matched revisions###
1233 06dc9da25ef0: C-D
1247 06dc9da25ef0: C-D
1234 27ec657ca21d: C-C
1248 27ec657ca21d: C-C
1235 2f20ff6509f0: C-E
1249 2f20ff6509f0: C-E
1236 9ac430e15fca: C-A
1250 9ac430e15fca: C-A
1237 a9b9da38ed96: C-B
1251 a9b9da38ed96: C-B
1238 ### Relevant markers ###
1252 ### Relevant markers ###
1239 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1253 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1240 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1254 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1241 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1255 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1242 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1256 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1243 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1257 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1244 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1258 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1245 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1259 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1246 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1260 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1247 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1261 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1248 # bundling: 5 changesets found
1262 # bundling: 5 changesets found
1249 ### Bundled markers ###
1263 ### Bundled markers ###
1250 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1264 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1251 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1265 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1252 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1266 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1253 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1267 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1254 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1268 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1255 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1269 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1256 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1270 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1257 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1271 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1258 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1272 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1259 ### diff <relevant> <bundled> ###
1273 ### diff <relevant> <bundled> ###
1260 #################################
1274 #################################
1261 ### Exclusive markers ###
1275 ### Exclusive markers ###
1262 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1276 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1263 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1277 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1264 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1278 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1265 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1279 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1266 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1280 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1267 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1281 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1268 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1282 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1269 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1283 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1270 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1284 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1271 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/a9b9da38ed96-eeb4258f-backup.hg
1285 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/a9b9da38ed96-eeb4258f-backup.hg
1272 ### Backup markers ###
1286 ### Backup markers ###
1273 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1287 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1274 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1288 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1275 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1289 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1276 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1290 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1277 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1291 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1278 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1292 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1279 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1293 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1280 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1294 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1281 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1295 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1282 ### diff <relevant> <backed-up> ###
1296 ### diff <relevant> <backed-up> ###
1283 #################################
1297 #################################
1284 ### Stripped markers ###
1298 ### Stripped markers ###
1285 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1299 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1286 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1300 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1287 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1301 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1288 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1302 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1289 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1303 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1290 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1304 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1291 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1305 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1292 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1306 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1293 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1307 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1294 ### diff <exclusive> <stripped> ###
1308 ### diff <exclusive> <stripped> ###
1295 #################################
1309 #################################
1296 # unbundling: adding changesets
1310 # unbundling: adding changesets
1297 # unbundling: adding manifests
1311 # unbundling: adding manifests
1298 # unbundling: adding file changes
1312 # unbundling: adding file changes
1299 # unbundling: added 5 changesets with 5 changes to 5 files (+4 heads)
1313 # unbundling: added 5 changesets with 5 changes to 5 files (+4 heads)
1300 # unbundling: 9 new obsolescence markers
1314 # unbundling: 9 new obsolescence markers
1301 # unbundling: new changesets 2f20ff6509f0 (1 drafts)
1315 # unbundling: new changesets 2f20ff6509f0 (1 drafts)
1316 # unbundling: (4 other changesets obsolete on arrival)
1302 # unbundling: (run 'hg heads' to see heads)
1317 # unbundling: (run 'hg heads' to see heads)
1303
1318
1304 changeset pruned on its own
1319 changeset pruned on its own
1305 ===========================
1320 ===========================
1306
1321
1307 . βŠ— B
1322 . βŠ— B
1308 . |
1323 . |
1309 . β—• A
1324 . β—• A
1310 . |
1325 . |
1311 . ●
1326 . ●
1312
1327
1313 setup
1328 setup
1314 -----
1329 -----
1315
1330
1316 $ mktestrepo lonely-prune
1331 $ mktestrepo lonely-prune
1317 $ hg up 'desc("ROOT")'
1332 $ hg up 'desc("ROOT")'
1318 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1333 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1319 $ mkcommit 'C-A'
1334 $ mkcommit 'C-A'
1320 $ mkcommit 'C-B'
1335 $ mkcommit 'C-B'
1321 $ hg debugobsolete --record-parent `getid 'desc("C-B")'`
1336 $ hg debugobsolete --record-parent `getid 'desc("C-B")'`
1322 obsoleted 1 changesets
1337 obsoleted 1 changesets
1323
1338
1324 $ hg up 'desc("ROOT")'
1339 $ hg up 'desc("ROOT")'
1325 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1340 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1326 $ hg log --hidden -G
1341 $ hg log --hidden -G
1327 x cefb651fc2fd: C-B
1342 x cefb651fc2fd: C-B
1328 |
1343 |
1329 o 9ac430e15fca: C-A
1344 o 9ac430e15fca: C-A
1330 |
1345 |
1331 @ ea207398892e: ROOT
1346 @ ea207398892e: ROOT
1332
1347
1333 $ hg debugobsolete
1348 $ hg debugobsolete
1334 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1349 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1335
1350
1336 Actual testing
1351 Actual testing
1337 --------------
1352 --------------
1338 $ testrevs 'desc("C-A")'
1353 $ testrevs 'desc("C-A")'
1339 ### Matched revisions###
1354 ### Matched revisions###
1340 9ac430e15fca: C-A
1355 9ac430e15fca: C-A
1341 ### Relevant markers ###
1356 ### Relevant markers ###
1342 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1357 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1343 # bundling: 1 changesets found
1358 # bundling: 1 changesets found
1344 ### Bundled markers ###
1359 ### Bundled markers ###
1345 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1360 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1346 ### diff <relevant> <bundled> ###
1361 ### diff <relevant> <bundled> ###
1347 #################################
1362 #################################
1348 ### Exclusive markers ###
1363 ### Exclusive markers ###
1349 $ testrevs 'desc("C-B")'
1364 $ testrevs 'desc("C-B")'
1350 ### Matched revisions###
1365 ### Matched revisions###
1351 cefb651fc2fd: C-B
1366 cefb651fc2fd: C-B
1352 ### Relevant markers ###
1367 ### Relevant markers ###
1353 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1368 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1354 # bundling: 1 changesets found
1369 # bundling: 1 changesets found
1355 ### Bundled markers ###
1370 ### Bundled markers ###
1356 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1371 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1357 ### diff <relevant> <bundled> ###
1372 ### diff <relevant> <bundled> ###
1358 #################################
1373 #################################
1359 ### Exclusive markers ###
1374 ### Exclusive markers ###
1360 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1375 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1361 # stripping: saved backup bundle to $TESTTMP/lonely-prune/.hg/strip-backup/cefb651fc2fd-345c8dfa-backup.hg
1376 # stripping: saved backup bundle to $TESTTMP/lonely-prune/.hg/strip-backup/cefb651fc2fd-345c8dfa-backup.hg
1362 ### Backup markers ###
1377 ### Backup markers ###
1363 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1378 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1364 ### diff <relevant> <backed-up> ###
1379 ### diff <relevant> <backed-up> ###
1365 #################################
1380 #################################
1366 ### Stripped markers ###
1381 ### Stripped markers ###
1367 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1382 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1368 ### diff <exclusive> <stripped> ###
1383 ### diff <exclusive> <stripped> ###
1369 #################################
1384 #################################
1370 # unbundling: adding changesets
1385 # unbundling: adding changesets
1371 # unbundling: adding manifests
1386 # unbundling: adding manifests
1372 # unbundling: adding file changes
1387 # unbundling: adding file changes
1373 # unbundling: added 1 changesets with 1 changes to 1 files
1388 # unbundling: added 1 changesets with 1 changes to 1 files
1374 # unbundling: 1 new obsolescence markers
1389 # unbundling: 1 new obsolescence markers
1390 # unbundling: (1 other changesets obsolete on arrival)
1375 # unbundling: (run 'hg update' to get a working copy)
1391 # unbundling: (run 'hg update' to get a working copy)
1376 $ testrevs 'desc("C-")'
1392 $ testrevs 'desc("C-")'
1377 ### Matched revisions###
1393 ### Matched revisions###
1378 9ac430e15fca: C-A
1394 9ac430e15fca: C-A
1379 cefb651fc2fd: C-B
1395 cefb651fc2fd: C-B
1380 ### Relevant markers ###
1396 ### Relevant markers ###
1381 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1397 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1382 # bundling: 2 changesets found
1398 # bundling: 2 changesets found
1383 ### Bundled markers ###
1399 ### Bundled markers ###
1384 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1400 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1385 ### diff <relevant> <bundled> ###
1401 ### diff <relevant> <bundled> ###
1386 #################################
1402 #################################
1387 ### Exclusive markers ###
1403 ### Exclusive markers ###
1388 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1404 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1389 # stripping: saved backup bundle to $TESTTMP/lonely-prune/.hg/strip-backup/9ac430e15fca-b9855b02-backup.hg
1405 # stripping: saved backup bundle to $TESTTMP/lonely-prune/.hg/strip-backup/9ac430e15fca-b9855b02-backup.hg
1390 ### Backup markers ###
1406 ### Backup markers ###
1391 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1407 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1392 ### diff <relevant> <backed-up> ###
1408 ### diff <relevant> <backed-up> ###
1393 #################################
1409 #################################
1394 ### Stripped markers ###
1410 ### Stripped markers ###
1395 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1411 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1396 ### diff <exclusive> <stripped> ###
1412 ### diff <exclusive> <stripped> ###
1397 #################################
1413 #################################
1398 # unbundling: adding changesets
1414 # unbundling: adding changesets
1399 # unbundling: adding manifests
1415 # unbundling: adding manifests
1400 # unbundling: adding file changes
1416 # unbundling: adding file changes
1401 # unbundling: added 2 changesets with 2 changes to 2 files
1417 # unbundling: added 2 changesets with 2 changes to 2 files
1402 # unbundling: 1 new obsolescence markers
1418 # unbundling: 1 new obsolescence markers
1403 # unbundling: new changesets 9ac430e15fca (1 drafts)
1419 # unbundling: new changesets 9ac430e15fca (1 drafts)
1420 # unbundling: (1 other changesets obsolete on arrival)
1404 # unbundling: (run 'hg update' to get a working copy)
1421 # unbundling: (run 'hg update' to get a working copy)
@@ -1,181 +1,182 b''
1 Test changesets filtering during exchanges (some tests are still in
1 Test changesets filtering during exchanges (some tests are still in
2 test-obsolete.t)
2 test-obsolete.t)
3
3
4 $ cat >> $HGRCPATH << EOF
4 $ cat >> $HGRCPATH << EOF
5 > [experimental]
5 > [experimental]
6 > evolution.createmarkers=True
6 > evolution.createmarkers=True
7 > EOF
7 > EOF
8
8
9 Push does not corrupt remote
9 Push does not corrupt remote
10 ----------------------------
10 ----------------------------
11
11
12 Create a DAG where a changeset reuses a revision from a file first used in an
12 Create a DAG where a changeset reuses a revision from a file first used in an
13 extinct changeset.
13 extinct changeset.
14
14
15 $ hg init local
15 $ hg init local
16 $ cd local
16 $ cd local
17 $ echo 'base' > base
17 $ echo 'base' > base
18 $ hg commit -Am base
18 $ hg commit -Am base
19 adding base
19 adding base
20 $ echo 'A' > A
20 $ echo 'A' > A
21 $ hg commit -Am A
21 $ hg commit -Am A
22 adding A
22 adding A
23 $ hg up 0
23 $ hg up 0
24 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
24 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
25 $ hg revert -ar 1
25 $ hg revert -ar 1
26 adding A
26 adding A
27 $ hg commit -Am "A'"
27 $ hg commit -Am "A'"
28 created new head
28 created new head
29 $ hg log -G --template='{desc} {node}'
29 $ hg log -G --template='{desc} {node}'
30 @ A' f89bcc95eba5174b1ccc3e33a82e84c96e8338ee
30 @ A' f89bcc95eba5174b1ccc3e33a82e84c96e8338ee
31 |
31 |
32 | o A 9d73aac1b2ed7d53835eaeec212ed41ea47da53a
32 | o A 9d73aac1b2ed7d53835eaeec212ed41ea47da53a
33 |/
33 |/
34 o base d20a80d4def38df63a4b330b7fb688f3d4cae1e3
34 o base d20a80d4def38df63a4b330b7fb688f3d4cae1e3
35
35
36 $ hg debugobsolete 9d73aac1b2ed7d53835eaeec212ed41ea47da53a f89bcc95eba5174b1ccc3e33a82e84c96e8338ee
36 $ hg debugobsolete 9d73aac1b2ed7d53835eaeec212ed41ea47da53a f89bcc95eba5174b1ccc3e33a82e84c96e8338ee
37 obsoleted 1 changesets
37 obsoleted 1 changesets
38
38
39 Push it. The bundle should not refer to the extinct changeset.
39 Push it. The bundle should not refer to the extinct changeset.
40
40
41 $ hg init ../other
41 $ hg init ../other
42 $ hg push ../other
42 $ hg push ../other
43 pushing to ../other
43 pushing to ../other
44 searching for changes
44 searching for changes
45 adding changesets
45 adding changesets
46 adding manifests
46 adding manifests
47 adding file changes
47 adding file changes
48 added 2 changesets with 2 changes to 2 files
48 added 2 changesets with 2 changes to 2 files
49 $ hg -R ../other verify
49 $ hg -R ../other verify
50 checking changesets
50 checking changesets
51 checking manifests
51 checking manifests
52 crosschecking files in changesets and manifests
52 crosschecking files in changesets and manifests
53 checking files
53 checking files
54 checked 2 changesets with 2 changes to 2 files
54 checked 2 changesets with 2 changes to 2 files
55
55
56 Adding a changeset going extinct locally
56 Adding a changeset going extinct locally
57 ------------------------------------------
57 ------------------------------------------
58
58
59 Pull a changeset that will immediatly goes extinct (because you already have a
59 Pull a changeset that will immediatly goes extinct (because you already have a
60 marker to obsolete him)
60 marker to obsolete him)
61 (test resolution of issue3788)
61 (test resolution of issue3788)
62
62
63 $ hg phase --draft --force f89bcc95eba5
63 $ hg phase --draft --force f89bcc95eba5
64 $ hg phase -R ../other --draft --force f89bcc95eba5
64 $ hg phase -R ../other --draft --force f89bcc95eba5
65 $ hg commit --amend -m "A''"
65 $ hg commit --amend -m "A''"
66 $ hg --hidden --config extensions.mq= strip --no-backup f89bcc95eba5
66 $ hg --hidden --config extensions.mq= strip --no-backup f89bcc95eba5
67 $ hg pull ../other
67 $ hg pull ../other
68 pulling from ../other
68 pulling from ../other
69 searching for changes
69 searching for changes
70 adding changesets
70 adding changesets
71 adding manifests
71 adding manifests
72 adding file changes
72 adding file changes
73 added 1 changesets with 0 changes to 1 files (+1 heads)
73 added 1 changesets with 0 changes to 1 files (+1 heads)
74 1 new phase-divergent changesets
74 1 new phase-divergent changesets
75 new changesets f89bcc95eba5
75 new changesets f89bcc95eba5
76 (run 'hg heads' to see heads, 'hg merge' to merge)
76 (run 'hg heads' to see heads, 'hg merge' to merge)
77
77
78 check that bundle is not affected
78 check that bundle is not affected
79
79
80 $ hg bundle --hidden --rev f89bcc95eba5 --base "f89bcc95eba5^" ../f89bcc95eba5.hg
80 $ hg bundle --hidden --rev f89bcc95eba5 --base "f89bcc95eba5^" ../f89bcc95eba5.hg
81 1 changesets found
81 1 changesets found
82 $ hg --hidden --config extensions.mq= strip --no-backup f89bcc95eba5
82 $ hg --hidden --config extensions.mq= strip --no-backup f89bcc95eba5
83 $ hg unbundle ../f89bcc95eba5.hg
83 $ hg unbundle ../f89bcc95eba5.hg
84 adding changesets
84 adding changesets
85 adding manifests
85 adding manifests
86 adding file changes
86 adding file changes
87 added 1 changesets with 0 changes to 1 files (+1 heads)
87 added 1 changesets with 0 changes to 1 files (+1 heads)
88 (1 other changesets obsolete on arrival)
88 (run 'hg heads' to see heads)
89 (run 'hg heads' to see heads)
89
90
90 check-that bundle can contain markers:
91 check-that bundle can contain markers:
91
92
92 $ hg bundle --hidden --rev f89bcc95eba5 --base "f89bcc95eba5^" ../f89bcc95eba5-obs.hg --config experimental.evolution.bundle-obsmarker=1
93 $ hg bundle --hidden --rev f89bcc95eba5 --base "f89bcc95eba5^" ../f89bcc95eba5-obs.hg --config experimental.evolution.bundle-obsmarker=1
93 1 changesets found
94 1 changesets found
94 $ hg debugbundle ../f89bcc95eba5.hg
95 $ hg debugbundle ../f89bcc95eba5.hg
95 Stream params: {Compression: BZ}
96 Stream params: {Compression: BZ}
96 changegroup -- {nbchanges: 1, version: 02} (mandatory: True)
97 changegroup -- {nbchanges: 1, version: 02} (mandatory: True)
97 f89bcc95eba5174b1ccc3e33a82e84c96e8338ee
98 f89bcc95eba5174b1ccc3e33a82e84c96e8338ee
98 cache:rev-branch-cache -- {} (mandatory: False)
99 cache:rev-branch-cache -- {} (mandatory: False)
99 $ hg debugbundle ../f89bcc95eba5-obs.hg
100 $ hg debugbundle ../f89bcc95eba5-obs.hg
100 Stream params: {Compression: BZ}
101 Stream params: {Compression: BZ}
101 changegroup -- {nbchanges: 1, version: 02} (mandatory: True)
102 changegroup -- {nbchanges: 1, version: 02} (mandatory: True)
102 f89bcc95eba5174b1ccc3e33a82e84c96e8338ee
103 f89bcc95eba5174b1ccc3e33a82e84c96e8338ee
103 cache:rev-branch-cache -- {} (mandatory: False)
104 cache:rev-branch-cache -- {} (mandatory: False)
104 obsmarkers -- {} (mandatory: True)
105 obsmarkers -- {} (mandatory: True)
105 version: 1 (70 bytes)
106 version: 1 (70 bytes)
106 9d73aac1b2ed7d53835eaeec212ed41ea47da53a f89bcc95eba5174b1ccc3e33a82e84c96e8338ee 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
107 9d73aac1b2ed7d53835eaeec212ed41ea47da53a f89bcc95eba5174b1ccc3e33a82e84c96e8338ee 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
107
108
108 $ cd ..
109 $ cd ..
109
110
110 pull does not fetch excessive changesets when common node is hidden (issue4982)
111 pull does not fetch excessive changesets when common node is hidden (issue4982)
111 -------------------------------------------------------------------------------
112 -------------------------------------------------------------------------------
112
113
113 initial repo with server and client matching
114 initial repo with server and client matching
114
115
115 $ hg init pull-hidden-common
116 $ hg init pull-hidden-common
116 $ cd pull-hidden-common
117 $ cd pull-hidden-common
117 $ touch foo
118 $ touch foo
118 $ hg -q commit -A -m initial
119 $ hg -q commit -A -m initial
119 $ echo 1 > foo
120 $ echo 1 > foo
120 $ hg commit -m 1
121 $ hg commit -m 1
121 $ echo 2a > foo
122 $ echo 2a > foo
122 $ hg commit -m 2a
123 $ hg commit -m 2a
123 $ cd ..
124 $ cd ..
124 $ hg clone --pull pull-hidden-common pull-hidden-common-client
125 $ hg clone --pull pull-hidden-common pull-hidden-common-client
125 requesting all changes
126 requesting all changes
126 adding changesets
127 adding changesets
127 adding manifests
128 adding manifests
128 adding file changes
129 adding file changes
129 added 3 changesets with 3 changes to 1 files
130 added 3 changesets with 3 changes to 1 files
130 new changesets 96ee1d7354c4:6a29ed9c68de
131 new changesets 96ee1d7354c4:6a29ed9c68de
131 updating to branch default
132 updating to branch default
132 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
133 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
133
134
134 server obsoletes the old head
135 server obsoletes the old head
135
136
136 $ cd pull-hidden-common
137 $ cd pull-hidden-common
137 $ hg -q up -r 1
138 $ hg -q up -r 1
138 $ echo 2b > foo
139 $ echo 2b > foo
139 $ hg -q commit -m 2b
140 $ hg -q commit -m 2b
140 $ hg debugobsolete 6a29ed9c68defff1a139e5c6fa9696fb1a75783d bec0734cd68e84477ba7fc1d13e6cff53ab70129
141 $ hg debugobsolete 6a29ed9c68defff1a139e5c6fa9696fb1a75783d bec0734cd68e84477ba7fc1d13e6cff53ab70129
141 obsoleted 1 changesets
142 obsoleted 1 changesets
142 $ cd ..
143 $ cd ..
143
144
144 client only pulls down 1 changeset
145 client only pulls down 1 changeset
145
146
146 $ cd pull-hidden-common-client
147 $ cd pull-hidden-common-client
147 $ hg pull --debug
148 $ hg pull --debug
148 pulling from $TESTTMP/pull-hidden-common
149 pulling from $TESTTMP/pull-hidden-common
149 query 1; heads
150 query 1; heads
150 searching for changes
151 searching for changes
151 taking quick initial sample
152 taking quick initial sample
152 query 2; still undecided: 2, sample size is: 2
153 query 2; still undecided: 2, sample size is: 2
153 2 total queries in *.????s (glob)
154 2 total queries in *.????s (glob)
154 1 changesets found
155 1 changesets found
155 list of changesets:
156 list of changesets:
156 bec0734cd68e84477ba7fc1d13e6cff53ab70129
157 bec0734cd68e84477ba7fc1d13e6cff53ab70129
157 listing keys for "bookmarks"
158 listing keys for "bookmarks"
158 bundle2-output-bundle: "HG20", 4 parts total
159 bundle2-output-bundle: "HG20", 4 parts total
159 bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload
160 bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload
160 bundle2-output-part: "listkeys" (params: 1 mandatory) empty payload
161 bundle2-output-part: "listkeys" (params: 1 mandatory) empty payload
161 bundle2-output-part: "phase-heads" 24 bytes payload
162 bundle2-output-part: "phase-heads" 24 bytes payload
162 bundle2-output-part: "cache:rev-branch-cache" (advisory) streamed payload
163 bundle2-output-part: "cache:rev-branch-cache" (advisory) streamed payload
163 bundle2-input-bundle: with-transaction
164 bundle2-input-bundle: with-transaction
164 bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported
165 bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported
165 adding changesets
166 adding changesets
166 add changeset bec0734cd68e
167 add changeset bec0734cd68e
167 adding manifests
168 adding manifests
168 adding file changes
169 adding file changes
169 adding foo revisions
170 adding foo revisions
170 added 1 changesets with 1 changes to 1 files (+1 heads)
171 added 1 changesets with 1 changes to 1 files (+1 heads)
171 bundle2-input-part: total payload size 476
172 bundle2-input-part: total payload size 476
172 bundle2-input-part: "listkeys" (params: 1 mandatory) supported
173 bundle2-input-part: "listkeys" (params: 1 mandatory) supported
173 bundle2-input-part: "phase-heads" supported
174 bundle2-input-part: "phase-heads" supported
174 bundle2-input-part: total payload size 24
175 bundle2-input-part: total payload size 24
175 bundle2-input-part: "cache:rev-branch-cache" (advisory) supported
176 bundle2-input-part: "cache:rev-branch-cache" (advisory) supported
176 bundle2-input-part: total payload size 39
177 bundle2-input-part: total payload size 39
177 bundle2-input-bundle: 3 parts total
178 bundle2-input-bundle: 3 parts total
178 checking for updated bookmarks
179 checking for updated bookmarks
179 updating the branch cache
180 updating the branch cache
180 new changesets bec0734cd68e
181 new changesets bec0734cd68e
181 (run 'hg heads' to see heads, 'hg merge' to merge)
182 (run 'hg heads' to see heads, 'hg merge' to merge)
@@ -1,317 +1,318 b''
1 Check that obsolete properly strip heads
1 Check that obsolete properly strip heads
2 $ cat >> $HGRCPATH << EOF
2 $ cat >> $HGRCPATH << EOF
3 > [phases]
3 > [phases]
4 > # public changeset are not obsolete
4 > # public changeset are not obsolete
5 > publish=false
5 > publish=false
6 > [ui]
6 > [ui]
7 > logtemplate='{node|short} ({phase}) {desc|firstline}\n'
7 > logtemplate='{node|short} ({phase}) {desc|firstline}\n'
8 > [experimental]
8 > [experimental]
9 > evolution.createmarkers=True
9 > evolution.createmarkers=True
10 > EOF
10 > EOF
11 $ mkcommit() {
11 $ mkcommit() {
12 > echo "$1" > "$1"
12 > echo "$1" > "$1"
13 > hg add "$1"
13 > hg add "$1"
14 > hg ci -m "add $1"
14 > hg ci -m "add $1"
15 > }
15 > }
16 $ getid() {
16 $ getid() {
17 > hg id --debug -ir "desc('$1')"
17 > hg id --debug -ir "desc('$1')"
18 > }
18 > }
19
19
20
20
21 $ hg init remote
21 $ hg init remote
22 $ cd remote
22 $ cd remote
23 $ mkcommit base
23 $ mkcommit base
24 $ hg phase --public .
24 $ hg phase --public .
25 $ cd ..
25 $ cd ..
26 $ cp -R remote base
26 $ cp -R remote base
27 $ hg clone remote local
27 $ hg clone remote local
28 updating to branch default
28 updating to branch default
29 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
29 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
30 $ cd local
30 $ cd local
31
31
32 New head replaces old head
32 New head replaces old head
33 ==========================
33 ==========================
34
34
35 setup
35 setup
36 (we add the 1 flags to prevent bumped error during the test)
36 (we add the 1 flags to prevent bumped error during the test)
37
37
38 $ mkcommit old
38 $ mkcommit old
39 $ hg push
39 $ hg push
40 pushing to $TESTTMP/remote
40 pushing to $TESTTMP/remote
41 searching for changes
41 searching for changes
42 adding changesets
42 adding changesets
43 adding manifests
43 adding manifests
44 adding file changes
44 adding file changes
45 added 1 changesets with 1 changes to 1 files
45 added 1 changesets with 1 changes to 1 files
46 $ hg up -q '.^'
46 $ hg up -q '.^'
47 $ mkcommit new
47 $ mkcommit new
48 created new head
48 created new head
49 $ hg debugobsolete --flags 1 `getid old` `getid new`
49 $ hg debugobsolete --flags 1 `getid old` `getid new`
50 obsoleted 1 changesets
50 obsoleted 1 changesets
51 $ hg log -G --hidden
51 $ hg log -G --hidden
52 @ 71e3228bffe1 (draft) add new
52 @ 71e3228bffe1 (draft) add new
53 |
53 |
54 | x c70b08862e08 (draft) add old
54 | x c70b08862e08 (draft) add old
55 |/
55 |/
56 o b4952fcf48cf (public) add base
56 o b4952fcf48cf (public) add base
57
57
58 $ cp -R ../remote ../backup1
58 $ cp -R ../remote ../backup1
59
59
60 old exists remotely as draft. It is obsoleted by new that we now push.
60 old exists remotely as draft. It is obsoleted by new that we now push.
61 Push should not warn about creating new head
61 Push should not warn about creating new head
62
62
63 $ hg push
63 $ hg push
64 pushing to $TESTTMP/remote
64 pushing to $TESTTMP/remote
65 searching for changes
65 searching for changes
66 adding changesets
66 adding changesets
67 adding manifests
67 adding manifests
68 adding file changes
68 adding file changes
69 added 1 changesets with 1 changes to 1 files (+1 heads)
69 added 1 changesets with 1 changes to 1 files (+1 heads)
70
70
71 old head is now public (public local version)
71 old head is now public (public local version)
72 =============================================
72 =============================================
73
73
74 setup
74 setup
75
75
76 $ rm -fr ../remote
76 $ rm -fr ../remote
77 $ cp -R ../backup1 ../remote
77 $ cp -R ../backup1 ../remote
78 $ hg -R ../remote phase --public c70b08862e08
78 $ hg -R ../remote phase --public c70b08862e08
79 $ hg pull -v
79 $ hg pull -v
80 pulling from $TESTTMP/remote
80 pulling from $TESTTMP/remote
81 searching for changes
81 searching for changes
82 no changes found
82 no changes found
83 1 local changesets published
83 1 local changesets published
84 $ hg log -G --hidden
84 $ hg log -G --hidden
85 @ 71e3228bffe1 (draft) add new
85 @ 71e3228bffe1 (draft) add new
86 |
86 |
87 | o c70b08862e08 (public) add old
87 | o c70b08862e08 (public) add old
88 |/
88 |/
89 o b4952fcf48cf (public) add base
89 o b4952fcf48cf (public) add base
90
90
91
91
92 Abort: old will still be an head because it's public.
92 Abort: old will still be an head because it's public.
93
93
94 $ hg push
94 $ hg push
95 pushing to $TESTTMP/remote
95 pushing to $TESTTMP/remote
96 searching for changes
96 searching for changes
97 abort: push creates new remote head 71e3228bffe1!
97 abort: push creates new remote head 71e3228bffe1!
98 (merge or see 'hg help push' for details about pushing new heads)
98 (merge or see 'hg help push' for details about pushing new heads)
99 [255]
99 [255]
100
100
101 old head is now public (public remote version)
101 old head is now public (public remote version)
102 ==============================================
102 ==============================================
103
103
104 TODO: Not implemented yet.
104 TODO: Not implemented yet.
105
105
106 # setup
106 # setup
107 #
107 #
108 # $ rm -fr ../remote
108 # $ rm -fr ../remote
109 # $ cp -R ../backup1 ../remote
109 # $ cp -R ../backup1 ../remote
110 # $ hg -R ../remote phase --public c70b08862e08
110 # $ hg -R ../remote phase --public c70b08862e08
111 # $ hg phase --draft --force c70b08862e08
111 # $ hg phase --draft --force c70b08862e08
112 # $ hg log -G --hidden
112 # $ hg log -G --hidden
113 # @ 71e3228bffe1 (draft) add new
113 # @ 71e3228bffe1 (draft) add new
114 # |
114 # |
115 # | x c70b08862e08 (draft) add old
115 # | x c70b08862e08 (draft) add old
116 # |/
116 # |/
117 # o b4952fcf48cf (public) add base
117 # o b4952fcf48cf (public) add base
118 #
118 #
119 #
119 #
120 #
120 #
121 # Abort: old will still be an head because it's public.
121 # Abort: old will still be an head because it's public.
122 #
122 #
123 # $ hg push
123 # $ hg push
124 # pushing to $TESTTMP/remote
124 # pushing to $TESTTMP/remote
125 # searching for changes
125 # searching for changes
126 # abort: push creates new remote head 71e3228bffe1!
126 # abort: push creates new remote head 71e3228bffe1!
127 # (merge or see 'hg help push' for details about pushing new heads)
127 # (merge or see 'hg help push' for details about pushing new heads)
128 # [255]
128 # [255]
129
129
130 old head is obsolete but replacement is not pushed
130 old head is obsolete but replacement is not pushed
131 ==================================================
131 ==================================================
132
132
133 setup
133 setup
134
134
135 $ rm -fr ../remote
135 $ rm -fr ../remote
136 $ cp -R ../backup1 ../remote
136 $ cp -R ../backup1 ../remote
137 $ hg phase --draft --force '(0::) - 0'
137 $ hg phase --draft --force '(0::) - 0'
138 $ hg up -q '.^'
138 $ hg up -q '.^'
139 $ mkcommit other
139 $ mkcommit other
140 created new head
140 created new head
141 $ hg log -G --hidden
141 $ hg log -G --hidden
142 @ d7d41ccbd4de (draft) add other
142 @ d7d41ccbd4de (draft) add other
143 |
143 |
144 | o 71e3228bffe1 (draft) add new
144 | o 71e3228bffe1 (draft) add new
145 |/
145 |/
146 | x c70b08862e08 (draft) add old
146 | x c70b08862e08 (draft) add old
147 |/
147 |/
148 o b4952fcf48cf (public) add base
148 o b4952fcf48cf (public) add base
149
149
150
150
151 old exists remotely as draft. It is obsoleted by new but we don't push new.
151 old exists remotely as draft. It is obsoleted by new but we don't push new.
152 Push should abort on new head
152 Push should abort on new head
153
153
154 $ hg push -r 'desc("other")'
154 $ hg push -r 'desc("other")'
155 pushing to $TESTTMP/remote
155 pushing to $TESTTMP/remote
156 searching for changes
156 searching for changes
157 abort: push creates new remote head d7d41ccbd4de!
157 abort: push creates new remote head d7d41ccbd4de!
158 (merge or see 'hg help push' for details about pushing new heads)
158 (merge or see 'hg help push' for details about pushing new heads)
159 [255]
159 [255]
160
160
161
161
162
162
163 Both precursors and successors are already know remotely. Descendant adds heads
163 Both precursors and successors are already know remotely. Descendant adds heads
164 ===============================================================================
164 ===============================================================================
165
165
166 setup. (The obsolete marker is known locally only
166 setup. (The obsolete marker is known locally only
167
167
168 $ cd ..
168 $ cd ..
169 $ rm -rf local
169 $ rm -rf local
170 $ hg clone remote local
170 $ hg clone remote local
171 updating to branch default
171 updating to branch default
172 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
172 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
173 $ cd local
173 $ cd local
174 $ mkcommit old
174 $ mkcommit old
175 old already tracked!
175 old already tracked!
176 nothing changed
176 nothing changed
177 [1]
177 [1]
178 $ hg up -q '.^'
178 $ hg up -q '.^'
179 $ mkcommit new
179 $ mkcommit new
180 created new head
180 created new head
181 $ hg push -f
181 $ hg push -f
182 pushing to $TESTTMP/remote
182 pushing to $TESTTMP/remote
183 searching for changes
183 searching for changes
184 adding changesets
184 adding changesets
185 adding manifests
185 adding manifests
186 adding file changes
186 adding file changes
187 added 1 changesets with 1 changes to 1 files (+1 heads)
187 added 1 changesets with 1 changes to 1 files (+1 heads)
188 $ mkcommit desc1
188 $ mkcommit desc1
189 $ hg up -q '.^'
189 $ hg up -q '.^'
190 $ mkcommit desc2
190 $ mkcommit desc2
191 created new head
191 created new head
192 $ hg debugobsolete `getid old` `getid new`
192 $ hg debugobsolete `getid old` `getid new`
193 obsoleted 1 changesets
193 obsoleted 1 changesets
194 $ hg log -G --hidden
194 $ hg log -G --hidden
195 @ 5fe37041cc2b (draft) add desc2
195 @ 5fe37041cc2b (draft) add desc2
196 |
196 |
197 | o a3ef1d111c5f (draft) add desc1
197 | o a3ef1d111c5f (draft) add desc1
198 |/
198 |/
199 o 71e3228bffe1 (draft) add new
199 o 71e3228bffe1 (draft) add new
200 |
200 |
201 | x c70b08862e08 (draft) add old
201 | x c70b08862e08 (draft) add old
202 |/
202 |/
203 o b4952fcf48cf (public) add base
203 o b4952fcf48cf (public) add base
204
204
205 $ hg log -G --hidden -R ../remote
205 $ hg log -G --hidden -R ../remote
206 o 71e3228bffe1 (draft) add new
206 o 71e3228bffe1 (draft) add new
207 |
207 |
208 | o c70b08862e08 (draft) add old
208 | o c70b08862e08 (draft) add old
209 |/
209 |/
210 @ b4952fcf48cf (public) add base
210 @ b4952fcf48cf (public) add base
211
211
212 $ cp -R ../remote ../backup2
212 $ cp -R ../remote ../backup2
213
213
214 Push should not warn about adding new heads. We create one, but we'll delete
214 Push should not warn about adding new heads. We create one, but we'll delete
215 one anyway.
215 one anyway.
216
216
217 $ hg push
217 $ hg push
218 pushing to $TESTTMP/remote
218 pushing to $TESTTMP/remote
219 searching for changes
219 searching for changes
220 adding changesets
220 adding changesets
221 adding manifests
221 adding manifests
222 adding file changes
222 adding file changes
223 added 2 changesets with 2 changes to 2 files (+1 heads)
223 added 2 changesets with 2 changes to 2 files (+1 heads)
224
224
225
225
226 Remote head is unknown but obsoleted by a local changeset
226 Remote head is unknown but obsoleted by a local changeset
227 =========================================================
227 =========================================================
228
228
229 setup
229 setup
230
230
231 $ rm -fr ../remote
231 $ rm -fr ../remote
232 $ cp -R ../backup1 ../remote
232 $ cp -R ../backup1 ../remote
233 $ cd ..
233 $ cd ..
234 $ rm -rf local
234 $ rm -rf local
235 $ hg clone remote local -r 0
235 $ hg clone remote local -r 0
236 adding changesets
236 adding changesets
237 adding manifests
237 adding manifests
238 adding file changes
238 adding file changes
239 added 1 changesets with 1 changes to 1 files
239 added 1 changesets with 1 changes to 1 files
240 new changesets b4952fcf48cf
240 new changesets b4952fcf48cf
241 updating to branch default
241 updating to branch default
242 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
242 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
243 $ cd local
243 $ cd local
244 $ mkcommit new
244 $ mkcommit new
245 $ hg -R ../remote id --debug -r tip
245 $ hg -R ../remote id --debug -r tip
246 c70b08862e0838ea6d7c59c85da2f1ed6c8d67da tip
246 c70b08862e0838ea6d7c59c85da2f1ed6c8d67da tip
247 $ hg id --debug -r tip
247 $ hg id --debug -r tip
248 71e3228bffe1886550777233d6c97bb5a6b2a650 tip
248 71e3228bffe1886550777233d6c97bb5a6b2a650 tip
249 $ hg debugobsolete c70b08862e0838ea6d7c59c85da2f1ed6c8d67da 71e3228bffe1886550777233d6c97bb5a6b2a650
249 $ hg debugobsolete c70b08862e0838ea6d7c59c85da2f1ed6c8d67da 71e3228bffe1886550777233d6c97bb5a6b2a650
250 $ hg log -G --hidden
250 $ hg log -G --hidden
251 @ 71e3228bffe1 (draft) add new
251 @ 71e3228bffe1 (draft) add new
252 |
252 |
253 o b4952fcf48cf (public) add base
253 o b4952fcf48cf (public) add base
254
254
255 $ hg log -G --hidden -R ../remote
255 $ hg log -G --hidden -R ../remote
256 o c70b08862e08 (draft) add old
256 o c70b08862e08 (draft) add old
257 |
257 |
258 @ b4952fcf48cf (public) add base
258 @ b4952fcf48cf (public) add base
259
259
260
260
261 We do not have enought data to take the right decision, we should fail
261 We do not have enought data to take the right decision, we should fail
262
262
263 $ hg push
263 $ hg push
264 pushing to $TESTTMP/remote
264 pushing to $TESTTMP/remote
265 searching for changes
265 searching for changes
266 remote has heads on branch 'default' that are not known locally: c70b08862e08
266 remote has heads on branch 'default' that are not known locally: c70b08862e08
267 abort: push creates new remote head 71e3228bffe1!
267 abort: push creates new remote head 71e3228bffe1!
268 (pull and merge or see 'hg help push' for details about pushing new heads)
268 (pull and merge or see 'hg help push' for details about pushing new heads)
269 [255]
269 [255]
270
270
271 Pulling the missing data makes it work
271 Pulling the missing data makes it work
272
272
273 $ hg pull
273 $ hg pull
274 pulling from $TESTTMP/remote
274 pulling from $TESTTMP/remote
275 searching for changes
275 searching for changes
276 adding changesets
276 adding changesets
277 adding manifests
277 adding manifests
278 adding file changes
278 adding file changes
279 added 1 changesets with 1 changes to 1 files (+1 heads)
279 added 1 changesets with 1 changes to 1 files (+1 heads)
280 (1 other changesets obsolete on arrival)
280 (run 'hg heads' to see heads)
281 (run 'hg heads' to see heads)
281 $ hg push
282 $ hg push
282 pushing to $TESTTMP/remote
283 pushing to $TESTTMP/remote
283 searching for changes
284 searching for changes
284 adding changesets
285 adding changesets
285 adding manifests
286 adding manifests
286 adding file changes
287 adding file changes
287 added 1 changesets with 1 changes to 1 files (+1 heads)
288 added 1 changesets with 1 changes to 1 files (+1 heads)
288
289
289 Old head is pruned without parent data and new unrelated head added
290 Old head is pruned without parent data and new unrelated head added
290 ===================================================================
291 ===================================================================
291
292
292 setup
293 setup
293
294
294 $ cd ..
295 $ cd ..
295 $ rm -R remote local
296 $ rm -R remote local
296 $ cp -R backup1 remote
297 $ cp -R backup1 remote
297 $ hg clone remote local -qr c70b08862e08
298 $ hg clone remote local -qr c70b08862e08
298 $ cd local
299 $ cd local
299 $ hg up -q '.^'
300 $ hg up -q '.^'
300 $ mkcommit new-unrelated
301 $ mkcommit new-unrelated
301 created new head
302 created new head
302 $ hg debugobsolete `getid old`
303 $ hg debugobsolete `getid old`
303 obsoleted 1 changesets
304 obsoleted 1 changesets
304 $ hg log -G --hidden
305 $ hg log -G --hidden
305 @ 350a93b716be (draft) add new-unrelated
306 @ 350a93b716be (draft) add new-unrelated
306 |
307 |
307 | x c70b08862e08 (draft) add old
308 | x c70b08862e08 (draft) add old
308 |/
309 |/
309 o b4952fcf48cf (public) add base
310 o b4952fcf48cf (public) add base
310
311
311
312
312 $ hg push
313 $ hg push
313 pushing to $TESTTMP/remote
314 pushing to $TESTTMP/remote
314 searching for changes
315 searching for changes
315 abort: push creates new remote head 350a93b716be!
316 abort: push creates new remote head 350a93b716be!
316 (merge or see 'hg help push' for details about pushing new heads)
317 (merge or see 'hg help push' for details about pushing new heads)
317 [255]
318 [255]
@@ -1,541 +1,543 b''
1 =============================
1 =============================
2 Test distributed obsolescence
2 Test distributed obsolescence
3 =============================
3 =============================
4
4
5 This file test various cases where data (changeset, phase, obsmarkers) is
5 This file test various cases where data (changeset, phase, obsmarkers) is
6 added to the repository in a specific order. Usually, this order is unlikely
6 added to the repository in a specific order. Usually, this order is unlikely
7 to happen in the local case but can easily happen in the distributed case.
7 to happen in the local case but can easily happen in the distributed case.
8
8
9 $ unset HGUSER
9 $ unset HGUSER
10 $ unset EMAIL
10 $ unset EMAIL
11 $ . $TESTDIR/testlib/obsmarker-common.sh
11 $ . $TESTDIR/testlib/obsmarker-common.sh
12 $ cat >> $HGRCPATH << EOF
12 $ cat >> $HGRCPATH << EOF
13 > [extensions]
13 > [extensions]
14 > rebase =
14 > rebase =
15 > [experimental]
15 > [experimental]
16 > evolution = all
16 > evolution = all
17 > [phases]
17 > [phases]
18 > publish = False
18 > publish = False
19 > [ui]
19 > [ui]
20 > logtemplate= {rev}:{node|short} {desc}{if(obsfate, " [{join(obsfate, "; ")}]")}\n
20 > logtemplate= {rev}:{node|short} {desc}{if(obsfate, " [{join(obsfate, "; ")}]")}\n
21 > EOF
21 > EOF
22
22
23 Check distributed chain building
23 Check distributed chain building
24 ================================
24 ================================
25
25
26 Test case where a changeset is marked as a successor of another local
26 Test case where a changeset is marked as a successor of another local
27 changeset while the successor has already been obsoleted remotely.
27 changeset while the successor has already been obsoleted remotely.
28
28
29 The chain of evolution should seamlessly connect and all but the new version
29 The chain of evolution should seamlessly connect and all but the new version
30 (created remotely) should be seen as obsolete.
30 (created remotely) should be seen as obsolete.
31
31
32 Initial setup
32 Initial setup
33
33
34 $ mkdir distributed-chain-building
34 $ mkdir distributed-chain-building
35 $ cd distributed-chain-building
35 $ cd distributed-chain-building
36 $ hg init server
36 $ hg init server
37 $ cd server
37 $ cd server
38 $ cat << EOF >> .hg/hgrc
38 $ cat << EOF >> .hg/hgrc
39 > [ui]
39 > [ui]
40 > username = server
40 > username = server
41 > EOF
41 > EOF
42 $ mkcommit ROOT
42 $ mkcommit ROOT
43 $ mkcommit c_A0
43 $ mkcommit c_A0
44 $ hg up 'desc("ROOT")'
44 $ hg up 'desc("ROOT")'
45 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
45 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
46 $ mkcommit c_A1
46 $ mkcommit c_A1
47 created new head
47 created new head
48 $ hg up 'desc("ROOT")'
48 $ hg up 'desc("ROOT")'
49 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
49 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
50 $ mkcommit c_B0
50 $ mkcommit c_B0
51 created new head
51 created new head
52 $ hg debugobsolete `getid 'desc("c_A0")'` `getid 'desc("c_A1")'`
52 $ hg debugobsolete `getid 'desc("c_A0")'` `getid 'desc("c_A1")'`
53 obsoleted 1 changesets
53 obsoleted 1 changesets
54 $ hg log -G --hidden -v
54 $ hg log -G --hidden -v
55 @ 3:e5d7dda7cd28 c_B0
55 @ 3:e5d7dda7cd28 c_B0
56 |
56 |
57 | o 2:7f6b0a6f5c25 c_A1
57 | o 2:7f6b0a6f5c25 c_A1
58 |/
58 |/
59 | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000)]
59 | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000)]
60 |/
60 |/
61 o 0:e82fb8d02bbf ROOT
61 o 0:e82fb8d02bbf ROOT
62
62
63 $ hg debugobsolete
63 $ hg debugobsolete
64 e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
64 e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
65 $ cd ..
65 $ cd ..
66
66
67 duplicate the repo for the client:
67 duplicate the repo for the client:
68
68
69 $ cp -R server client
69 $ cp -R server client
70 $ cat << EOF >> client/.hg/hgrc
70 $ cat << EOF >> client/.hg/hgrc
71 > [paths]
71 > [paths]
72 > default = ../server/
72 > default = ../server/
73 > [ui]
73 > [ui]
74 > username = client
74 > username = client
75 > EOF
75 > EOF
76
76
77 server side: create new revision on the server (obsoleting another one)
77 server side: create new revision on the server (obsoleting another one)
78
78
79 $ cd server
79 $ cd server
80 $ hg up 'desc("ROOT")'
80 $ hg up 'desc("ROOT")'
81 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
81 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
82 $ mkcommit c_B1
82 $ mkcommit c_B1
83 created new head
83 created new head
84 $ hg debugobsolete `getid 'desc("c_B0")'` `getid 'desc("c_B1")'`
84 $ hg debugobsolete `getid 'desc("c_B0")'` `getid 'desc("c_B1")'`
85 obsoleted 1 changesets
85 obsoleted 1 changesets
86 $ hg log -G
86 $ hg log -G
87 @ 4:391a2bf12b1b c_B1
87 @ 4:391a2bf12b1b c_B1
88 |
88 |
89 | o 2:7f6b0a6f5c25 c_A1
89 | o 2:7f6b0a6f5c25 c_A1
90 |/
90 |/
91 o 0:e82fb8d02bbf ROOT
91 o 0:e82fb8d02bbf ROOT
92
92
93 $ hg log -G --hidden -v
93 $ hg log -G --hidden -v
94 @ 4:391a2bf12b1b c_B1
94 @ 4:391a2bf12b1b c_B1
95 |
95 |
96 | x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000)]
96 | x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000)]
97 |/
97 |/
98 | o 2:7f6b0a6f5c25 c_A1
98 | o 2:7f6b0a6f5c25 c_A1
99 |/
99 |/
100 | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000)]
100 | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000)]
101 |/
101 |/
102 o 0:e82fb8d02bbf ROOT
102 o 0:e82fb8d02bbf ROOT
103
103
104 $ hg debugobsolete
104 $ hg debugobsolete
105 e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
105 e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
106 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 391a2bf12b1b8b05a72400ae36b26d50a091dc22 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
106 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 391a2bf12b1b8b05a72400ae36b26d50a091dc22 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
107 $ cd ..
107 $ cd ..
108
108
109 client side: create a marker between two common changesets
109 client side: create a marker between two common changesets
110 (client is not aware of the server activity yet)
110 (client is not aware of the server activity yet)
111
111
112 $ cd client
112 $ cd client
113 $ hg debugobsolete `getid 'desc("c_A1")'` `getid 'desc("c_B0")'`
113 $ hg debugobsolete `getid 'desc("c_A1")'` `getid 'desc("c_B0")'`
114 obsoleted 1 changesets
114 obsoleted 1 changesets
115 $ hg log -G
115 $ hg log -G
116 @ 3:e5d7dda7cd28 c_B0
116 @ 3:e5d7dda7cd28 c_B0
117 |
117 |
118 o 0:e82fb8d02bbf ROOT
118 o 0:e82fb8d02bbf ROOT
119
119
120 $ hg log -G --hidden -v
120 $ hg log -G --hidden -v
121 @ 3:e5d7dda7cd28 c_B0
121 @ 3:e5d7dda7cd28 c_B0
122 |
122 |
123 | x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000)]
123 | x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000)]
124 |/
124 |/
125 | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000)]
125 | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000)]
126 |/
126 |/
127 o 0:e82fb8d02bbf ROOT
127 o 0:e82fb8d02bbf ROOT
128
128
129 $ hg debugobsolete
129 $ hg debugobsolete
130 e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
130 e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
131 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'}
131 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'}
132
132
133 client side: pull from the server
133 client side: pull from the server
134 (the new successors should take over)
134 (the new successors should take over)
135
135
136 $ hg up 'desc("ROOT")'
136 $ hg up 'desc("ROOT")'
137 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
137 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
138 $ hg pull
138 $ hg pull
139 pulling from $TESTTMP/distributed-chain-building/server
139 pulling from $TESTTMP/distributed-chain-building/server
140 searching for changes
140 searching for changes
141 adding changesets
141 adding changesets
142 adding manifests
142 adding manifests
143 adding file changes
143 adding file changes
144 added 1 changesets with 1 changes to 1 files (+1 heads)
144 added 1 changesets with 1 changes to 1 files (+1 heads)
145 1 new obsolescence markers
145 1 new obsolescence markers
146 obsoleted 1 changesets
146 obsoleted 1 changesets
147 new changesets 391a2bf12b1b (1 drafts)
147 new changesets 391a2bf12b1b (1 drafts)
148 (run 'hg heads' to see heads)
148 (run 'hg heads' to see heads)
149 $ hg log -G
149 $ hg log -G
150 o 4:391a2bf12b1b c_B1
150 o 4:391a2bf12b1b c_B1
151 |
151 |
152 @ 0:e82fb8d02bbf ROOT
152 @ 0:e82fb8d02bbf ROOT
153
153
154 $ hg log -G --hidden -v
154 $ hg log -G --hidden -v
155 o 4:391a2bf12b1b c_B1
155 o 4:391a2bf12b1b c_B1
156 |
156 |
157 | x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000)]
157 | x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000)]
158 |/
158 |/
159 | x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000)]
159 | x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000)]
160 |/
160 |/
161 | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000)]
161 | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000)]
162 |/
162 |/
163 @ 0:e82fb8d02bbf ROOT
163 @ 0:e82fb8d02bbf ROOT
164
164
165 $ hg debugobsolete
165 $ hg debugobsolete
166 e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
166 e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
167 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'}
167 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'}
168 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 391a2bf12b1b8b05a72400ae36b26d50a091dc22 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
168 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 391a2bf12b1b8b05a72400ae36b26d50a091dc22 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
169
169
170 server side: receive client push
170 server side: receive client push
171 (the other way around, pushing to the server, the obsolete changesets stay
171 (the other way around, pushing to the server, the obsolete changesets stay
172 obsolete on the server side but the marker is sent out.)
172 obsolete on the server side but the marker is sent out.)
173
173
174 $ hg rollback
174 $ hg rollback
175 repository tip rolled back to revision 3 (undo pull)
175 repository tip rolled back to revision 3 (undo pull)
176 $ hg push -f
176 $ hg push -f
177 pushing to $TESTTMP/distributed-chain-building/server
177 pushing to $TESTTMP/distributed-chain-building/server
178 searching for changes
178 searching for changes
179 adding changesets
179 adding changesets
180 adding manifests
180 adding manifests
181 adding file changes
181 adding file changes
182 added 0 changesets with 0 changes to 1 files
182 added 0 changesets with 0 changes to 1 files
183 1 new obsolescence markers
183 1 new obsolescence markers
184 obsoleted 1 changesets
184 obsoleted 1 changesets
185 $ hg -R ../server/ log -G
185 $ hg -R ../server/ log -G
186 @ 4:391a2bf12b1b c_B1
186 @ 4:391a2bf12b1b c_B1
187 |
187 |
188 o 0:e82fb8d02bbf ROOT
188 o 0:e82fb8d02bbf ROOT
189
189
190 $ hg -R ../server/ log -G --hidden -v
190 $ hg -R ../server/ log -G --hidden -v
191 @ 4:391a2bf12b1b c_B1
191 @ 4:391a2bf12b1b c_B1
192 |
192 |
193 | x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000)]
193 | x 3:e5d7dda7cd28 c_B0 [rewritten as 4:391a2bf12b1b by server (at 1970-01-01 00:00 +0000)]
194 |/
194 |/
195 | x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000)]
195 | x 2:7f6b0a6f5c25 c_A1 [rewritten as 3:e5d7dda7cd28 by client (at 1970-01-01 00:00 +0000)]
196 |/
196 |/
197 | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000)]
197 | x 1:e1b46f0f979f c_A0 [rewritten as 2:7f6b0a6f5c25 by server (at 1970-01-01 00:00 +0000)]
198 |/
198 |/
199 o 0:e82fb8d02bbf ROOT
199 o 0:e82fb8d02bbf ROOT
200
200
201 $ hg debugobsolete
201 $ hg debugobsolete
202 e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
202 e1b46f0f979f52748347ff8729c59f2ef56e6fe2 7f6b0a6f5c25345a83870963efd827c1798a5959 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'server'}
203 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'}
203 7f6b0a6f5c25345a83870963efd827c1798a5959 e5d7dda7cd28e6b3f79437e5b8122a38ece0255c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'client'}
204 $ cd ..
204 $ cd ..
205
205
206 Check getting changesets after getting the markers
206 Check getting changesets after getting the markers
207 =================================================
207 =================================================
208
208
209 This test case covers the scenario where commits are received -after- we
209 This test case covers the scenario where commits are received -after- we
210 received some obsolescence markers turning them obsolete.
210 received some obsolescence markers turning them obsolete.
211
211
212 For example, we pull some successors from a repository (with associated
212 For example, we pull some successors from a repository (with associated
213 predecessors marker chain) and then later we pull some intermediate
213 predecessors marker chain) and then later we pull some intermediate
214 precedessors changeset from another repository. Obsolescence markers must
214 precedessors changeset from another repository. Obsolescence markers must
215 apply to the intermediate changeset. They have to be obsolete (and hidden).
215 apply to the intermediate changeset. They have to be obsolete (and hidden).
216
216
217 Avoiding pulling the changeset in the first place is a tricky decision because
217 Avoiding pulling the changeset in the first place is a tricky decision because
218 there could be non-obsolete ancestors that need to be pulled, but the
218 there could be non-obsolete ancestors that need to be pulled, but the
219 discovery cannot currently find these (this is not the case in this tests). In
219 discovery cannot currently find these (this is not the case in this tests). In
220 addition, we could also have to pull the changeset because they have children.
220 addition, we could also have to pull the changeset because they have children.
221 In this case, they would not be hidden (yet) because of the orphan descendant,
221 In this case, they would not be hidden (yet) because of the orphan descendant,
222 but they would still have to be obsolete. (This is not tested in this case
222 but they would still have to be obsolete. (This is not tested in this case
223 either).
223 either).
224
224
225 $ mkdir distributed-chain-building
225 $ mkdir distributed-chain-building
226 $ cd distributed-chain-building
226 $ cd distributed-chain-building
227 $ hg init server
227 $ hg init server
228 $ cd server
228 $ cd server
229 $ cat << EOF >> .hg/hgrc
229 $ cat << EOF >> .hg/hgrc
230 > [ui]
230 > [ui]
231 > username = server
231 > username = server
232 > EOF
232 > EOF
233 $ mkcommit ROOT
233 $ mkcommit ROOT
234 $ cd ..
234 $ cd ..
235 $ hg clone server repo-Alice
235 $ hg clone server repo-Alice
236 updating to branch default
236 updating to branch default
237 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
237 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
238 $ cat << EOF >> repo-Alice/.hg/hgrc
238 $ cat << EOF >> repo-Alice/.hg/hgrc
239 > [ui]
239 > [ui]
240 > username = alice
240 > username = alice
241 > EOF
241 > EOF
242 $ hg clone server repo-Bob
242 $ hg clone server repo-Bob
243 updating to branch default
243 updating to branch default
244 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
244 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
245 $ cat << EOF >> repo-Bob/.hg/hgrc
245 $ cat << EOF >> repo-Bob/.hg/hgrc
246 > [ui]
246 > [ui]
247 > username = bob
247 > username = bob
248 > EOF
248 > EOF
249 $ hg clone server repo-Celeste
249 $ hg clone server repo-Celeste
250 updating to branch default
250 updating to branch default
251 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
251 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
252 $ cat << EOF >> repo-Celeste/.hg/hgrc
252 $ cat << EOF >> repo-Celeste/.hg/hgrc
253 > [ui]
253 > [ui]
254 > username = celeste
254 > username = celeste
255 > EOF
255 > EOF
256
256
257 Create some changesets locally
257 Create some changesets locally
258
258
259 $ cd repo-Alice
259 $ cd repo-Alice
260 $ mkcommit c_A0
260 $ mkcommit c_A0
261 $ mkcommit c_B0
261 $ mkcommit c_B0
262 $ cd ..
262 $ cd ..
263
263
264 Bob pulls from Alice and rewrites them
264 Bob pulls from Alice and rewrites them
265
265
266 $ cd repo-Bob
266 $ cd repo-Bob
267 $ hg pull ../repo-Alice
267 $ hg pull ../repo-Alice
268 pulling from ../repo-Alice
268 pulling from ../repo-Alice
269 searching for changes
269 searching for changes
270 adding changesets
270 adding changesets
271 adding manifests
271 adding manifests
272 adding file changes
272 adding file changes
273 added 2 changesets with 2 changes to 2 files
273 added 2 changesets with 2 changes to 2 files
274 new changesets d33b0a3a6464:ef908e42ce65 (2 drafts)
274 new changesets d33b0a3a6464:ef908e42ce65 (2 drafts)
275 (run 'hg update' to get a working copy)
275 (run 'hg update' to get a working copy)
276 $ hg up 'desc("c_A")'
276 $ hg up 'desc("c_A")'
277 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
277 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
278 $ hg commit --amend -m 'c_A1'
278 $ hg commit --amend -m 'c_A1'
279 1 new orphan changesets
279 1 new orphan changesets
280 $ hg rebase -r 'desc("c_B0")' -d . # no easy way to rewrite the message with the rebase
280 $ hg rebase -r 'desc("c_B0")' -d . # no easy way to rewrite the message with the rebase
281 rebasing 2:ef908e42ce65 "c_B0"
281 rebasing 2:ef908e42ce65 "c_B0"
282 $ hg up
282 $ hg up
283 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
283 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
284 $ hg commit --amend -m 'c_B1'
284 $ hg commit --amend -m 'c_B1'
285 $ hg log -G
285 $ hg log -G
286 @ 5:956063ac4557 c_B1
286 @ 5:956063ac4557 c_B1
287 |
287 |
288 o 3:5b5708a437f2 c_A1
288 o 3:5b5708a437f2 c_A1
289 |
289 |
290 o 0:e82fb8d02bbf ROOT
290 o 0:e82fb8d02bbf ROOT
291
291
292 $ hg log -G --hidden -v
292 $ hg log -G --hidden -v
293 @ 5:956063ac4557 c_B1
293 @ 5:956063ac4557 c_B1
294 |
294 |
295 | x 4:5ffb9e311b35 c_B0 [rewritten using amend as 5:956063ac4557 by bob (at 1970-01-01 00:00 +0000)]
295 | x 4:5ffb9e311b35 c_B0 [rewritten using amend as 5:956063ac4557 by bob (at 1970-01-01 00:00 +0000)]
296 |/
296 |/
297 o 3:5b5708a437f2 c_A1
297 o 3:5b5708a437f2 c_A1
298 |
298 |
299 | x 2:ef908e42ce65 c_B0 [rewritten using rebase as 4:5ffb9e311b35 by bob (at 1970-01-01 00:00 +0000)]
299 | x 2:ef908e42ce65 c_B0 [rewritten using rebase as 4:5ffb9e311b35 by bob (at 1970-01-01 00:00 +0000)]
300 | |
300 | |
301 | x 1:d33b0a3a6464 c_A0 [rewritten using amend as 3:5b5708a437f2 by bob (at 1970-01-01 00:00 +0000)]
301 | x 1:d33b0a3a6464 c_A0 [rewritten using amend as 3:5b5708a437f2 by bob (at 1970-01-01 00:00 +0000)]
302 |/
302 |/
303 o 0:e82fb8d02bbf ROOT
303 o 0:e82fb8d02bbf ROOT
304
304
305 $ hg debugobsolete
305 $ hg debugobsolete
306 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
306 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
307 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'bob'}
307 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'bob'}
308 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
308 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
309 $ cd ..
309 $ cd ..
310
310
311 Celeste pulls from Bob and rewrites them again
311 Celeste pulls from Bob and rewrites them again
312
312
313 $ cd repo-Celeste
313 $ cd repo-Celeste
314 $ hg pull ../repo-Bob
314 $ hg pull ../repo-Bob
315 pulling from ../repo-Bob
315 pulling from ../repo-Bob
316 searching for changes
316 searching for changes
317 adding changesets
317 adding changesets
318 adding manifests
318 adding manifests
319 adding file changes
319 adding file changes
320 added 2 changesets with 2 changes to 2 files
320 added 2 changesets with 2 changes to 2 files
321 3 new obsolescence markers
321 3 new obsolescence markers
322 new changesets 5b5708a437f2:956063ac4557 (2 drafts)
322 new changesets 5b5708a437f2:956063ac4557 (2 drafts)
323 (run 'hg update' to get a working copy)
323 (run 'hg update' to get a working copy)
324 $ hg up 'desc("c_A")'
324 $ hg up 'desc("c_A")'
325 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
325 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
326 $ hg commit --amend -m 'c_A2'
326 $ hg commit --amend -m 'c_A2'
327 1 new orphan changesets
327 1 new orphan changesets
328 $ hg rebase -r 'desc("c_B1")' -d . # no easy way to rewrite the message with the rebase
328 $ hg rebase -r 'desc("c_B1")' -d . # no easy way to rewrite the message with the rebase
329 rebasing 2:956063ac4557 "c_B1"
329 rebasing 2:956063ac4557 "c_B1"
330 $ hg up
330 $ hg up
331 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
331 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
332 $ hg commit --amend -m 'c_B2'
332 $ hg commit --amend -m 'c_B2'
333 $ hg log -G
333 $ hg log -G
334 @ 5:77ae25d99ff0 c_B2
334 @ 5:77ae25d99ff0 c_B2
335 |
335 |
336 o 3:9866d64649a5 c_A2
336 o 3:9866d64649a5 c_A2
337 |
337 |
338 o 0:e82fb8d02bbf ROOT
338 o 0:e82fb8d02bbf ROOT
339
339
340 $ hg log -G --hidden -v
340 $ hg log -G --hidden -v
341 @ 5:77ae25d99ff0 c_B2
341 @ 5:77ae25d99ff0 c_B2
342 |
342 |
343 | x 4:3cf8de21cc22 c_B1 [rewritten using amend as 5:77ae25d99ff0 by celeste (at 1970-01-01 00:00 +0000)]
343 | x 4:3cf8de21cc22 c_B1 [rewritten using amend as 5:77ae25d99ff0 by celeste (at 1970-01-01 00:00 +0000)]
344 |/
344 |/
345 o 3:9866d64649a5 c_A2
345 o 3:9866d64649a5 c_A2
346 |
346 |
347 | x 2:956063ac4557 c_B1 [rewritten using rebase as 4:3cf8de21cc22 by celeste (at 1970-01-01 00:00 +0000)]
347 | x 2:956063ac4557 c_B1 [rewritten using rebase as 4:3cf8de21cc22 by celeste (at 1970-01-01 00:00 +0000)]
348 | |
348 | |
349 | x 1:5b5708a437f2 c_A1 [rewritten using amend as 3:9866d64649a5 by celeste (at 1970-01-01 00:00 +0000)]
349 | x 1:5b5708a437f2 c_A1 [rewritten using amend as 3:9866d64649a5 by celeste (at 1970-01-01 00:00 +0000)]
350 |/
350 |/
351 o 0:e82fb8d02bbf ROOT
351 o 0:e82fb8d02bbf ROOT
352
352
353 $ hg debugobsolete
353 $ hg debugobsolete
354 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
354 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
355 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
355 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
356 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'bob'}
356 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'bob'}
357 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
357 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
358 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'celeste'}
358 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'celeste'}
359 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
359 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
360
360
361 Celeste now pushes to the server
361 Celeste now pushes to the server
362
362
363 (note: it would be enough to just have direct Celeste -> Alice exchange here.
363 (note: it would be enough to just have direct Celeste -> Alice exchange here.
364 However using a central server seems more common)
364 However using a central server seems more common)
365
365
366 $ hg push
366 $ hg push
367 pushing to $TESTTMP/distributed-chain-building/distributed-chain-building/server
367 pushing to $TESTTMP/distributed-chain-building/distributed-chain-building/server
368 searching for changes
368 searching for changes
369 adding changesets
369 adding changesets
370 adding manifests
370 adding manifests
371 adding file changes
371 adding file changes
372 added 2 changesets with 2 changes to 2 files
372 added 2 changesets with 2 changes to 2 files
373 6 new obsolescence markers
373 6 new obsolescence markers
374 $ cd ..
374 $ cd ..
375
375
376 Now Alice pulls from the server, then from Bob
376 Now Alice pulls from the server, then from Bob
377
377
378 Alice first retrieves the new evolution of its changesets and associated markers
378 Alice first retrieves the new evolution of its changesets and associated markers
379 from the server (note: could be from Celeste directly)
379 from the server (note: could be from Celeste directly)
380
380
381 $ cd repo-Alice
381 $ cd repo-Alice
382 $ hg up 'desc(ROOT)'
382 $ hg up 'desc(ROOT)'
383 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
383 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
384 $ hg pull
384 $ hg pull
385 pulling from $TESTTMP/distributed-chain-building/distributed-chain-building/server
385 pulling from $TESTTMP/distributed-chain-building/distributed-chain-building/server
386 searching for changes
386 searching for changes
387 adding changesets
387 adding changesets
388 adding manifests
388 adding manifests
389 adding file changes
389 adding file changes
390 added 2 changesets with 0 changes to 2 files (+1 heads)
390 added 2 changesets with 0 changes to 2 files (+1 heads)
391 6 new obsolescence markers
391 6 new obsolescence markers
392 obsoleted 2 changesets
392 obsoleted 2 changesets
393 new changesets 9866d64649a5:77ae25d99ff0 (2 drafts)
393 new changesets 9866d64649a5:77ae25d99ff0 (2 drafts)
394 (run 'hg heads' to see heads)
394 (run 'hg heads' to see heads)
395 $ hg debugobsolete
395 $ hg debugobsolete
396 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
396 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
397 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
397 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
398 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
398 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
399 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'celeste'}
399 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'celeste'}
400 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
400 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
401 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'bob'}
401 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'bob'}
402
402
403 Then, she pulls from Bob, pulling predecessors of the changeset she has
403 Then, she pulls from Bob, pulling predecessors of the changeset she has
404 already pulled. The changesets are not obsoleted in the Bob repo yet. Their
404 already pulled. The changesets are not obsoleted in the Bob repo yet. Their
405 successors do not exist in Bob repository yet.
405 successors do not exist in Bob repository yet.
406
406
407 $ hg pull ../repo-Bob
407 $ hg pull ../repo-Bob
408 pulling from ../repo-Bob
408 pulling from ../repo-Bob
409 searching for changes
409 searching for changes
410 adding changesets
410 adding changesets
411 adding manifests
411 adding manifests
412 adding file changes
412 adding file changes
413 added 2 changesets with 0 changes to 2 files (+1 heads)
413 added 2 changesets with 0 changes to 2 files (+1 heads)
414 (2 other changesets obsolete on arrival)
414 (run 'hg heads' to see heads)
415 (run 'hg heads' to see heads)
415 $ hg log -G
416 $ hg log -G
416 o 4:77ae25d99ff0 c_B2
417 o 4:77ae25d99ff0 c_B2
417 |
418 |
418 o 3:9866d64649a5 c_A2
419 o 3:9866d64649a5 c_A2
419 |
420 |
420 @ 0:e82fb8d02bbf ROOT
421 @ 0:e82fb8d02bbf ROOT
421
422
422 $ hg debugobsolete
423 $ hg debugobsolete
423 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
424 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
424 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
425 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
425 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
426 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
426 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'celeste'}
427 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'celeste'}
427 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
428 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
428 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'bob'}
429 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'bob'}
429
430
430 Same tests, but change coming from a bundle
431 Same tests, but change coming from a bundle
431 (testing with a bundle is interesting because absolutely no discovery or
432 (testing with a bundle is interesting because absolutely no discovery or
432 decision is made in that case, so receiving the changesets are not an option).
433 decision is made in that case, so receiving the changesets are not an option).
433
434
434 $ hg rollback
435 $ hg rollback
435 repository tip rolled back to revision 4 (undo pull)
436 repository tip rolled back to revision 4 (undo pull)
436 $ hg log -G
437 $ hg log -G
437 o 4:77ae25d99ff0 c_B2
438 o 4:77ae25d99ff0 c_B2
438 |
439 |
439 o 3:9866d64649a5 c_A2
440 o 3:9866d64649a5 c_A2
440 |
441 |
441 @ 0:e82fb8d02bbf ROOT
442 @ 0:e82fb8d02bbf ROOT
442
443
443 $ hg debugobsolete
444 $ hg debugobsolete
444 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
445 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
445 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
446 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
446 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
447 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
447 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'celeste'}
448 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'celeste'}
448 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
449 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
449 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'bob'}
450 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'bob'}
450 $ hg -R ../repo-Bob bundle ../step-1.hg
451 $ hg -R ../repo-Bob bundle ../step-1.hg
451 searching for changes
452 searching for changes
452 2 changesets found
453 2 changesets found
453 $ hg unbundle ../step-1.hg
454 $ hg unbundle ../step-1.hg
454 adding changesets
455 adding changesets
455 adding manifests
456 adding manifests
456 adding file changes
457 adding file changes
457 added 2 changesets with 0 changes to 2 files (+1 heads)
458 added 2 changesets with 0 changes to 2 files (+1 heads)
459 (2 other changesets obsolete on arrival)
458 (run 'hg heads' to see heads)
460 (run 'hg heads' to see heads)
459 $ hg log -G
461 $ hg log -G
460 o 4:77ae25d99ff0 c_B2
462 o 4:77ae25d99ff0 c_B2
461 |
463 |
462 o 3:9866d64649a5 c_A2
464 o 3:9866d64649a5 c_A2
463 |
465 |
464 @ 0:e82fb8d02bbf ROOT
466 @ 0:e82fb8d02bbf ROOT
465
467
466 $ hg log -G --hidden -v
468 $ hg log -G --hidden -v
467 x 6:956063ac4557 c_B1 [rewritten using amend, rebase as 4:77ae25d99ff0 by celeste (at 1970-01-01 00:00 +0000)]
469 x 6:956063ac4557 c_B1 [rewritten using amend, rebase as 4:77ae25d99ff0 by celeste (at 1970-01-01 00:00 +0000)]
468 |
470 |
469 x 5:5b5708a437f2 c_A1 [rewritten using amend as 3:9866d64649a5 by celeste (at 1970-01-01 00:00 +0000)]
471 x 5:5b5708a437f2 c_A1 [rewritten using amend as 3:9866d64649a5 by celeste (at 1970-01-01 00:00 +0000)]
470 |
472 |
471 | o 4:77ae25d99ff0 c_B2
473 | o 4:77ae25d99ff0 c_B2
472 | |
474 | |
473 | o 3:9866d64649a5 c_A2
475 | o 3:9866d64649a5 c_A2
474 |/
476 |/
475 | x 2:ef908e42ce65 c_B0 [rewritten using amend, rebase as 6:956063ac4557 by bob (at 1970-01-01 00:00 +0000)]
477 | x 2:ef908e42ce65 c_B0 [rewritten using amend, rebase as 6:956063ac4557 by bob (at 1970-01-01 00:00 +0000)]
476 | |
478 | |
477 | x 1:d33b0a3a6464 c_A0 [rewritten using amend as 5:5b5708a437f2 by bob (at 1970-01-01 00:00 +0000)]
479 | x 1:d33b0a3a6464 c_A0 [rewritten using amend as 5:5b5708a437f2 by bob (at 1970-01-01 00:00 +0000)]
478 |/
480 |/
479 @ 0:e82fb8d02bbf ROOT
481 @ 0:e82fb8d02bbf ROOT
480
482
481 $ hg debugobsolete
483 $ hg debugobsolete
482 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
484 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 77ae25d99ff07889e181126b1171b94bec8e5227 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
483 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
485 5b5708a437f27665db42c5a261a539a1bcb2a8c2 9866d64649a5d9c5991fe119c7b2c33898114e10 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'celeste'}
484 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
486 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 956063ac4557828781733b2d5677a351ce856f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
485 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'celeste'}
487 956063ac4557828781733b2d5677a351ce856f59 3cf8de21cc2282186857d2266eb6b1f9cb85ecf3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'celeste'}
486 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
488 d33b0a3a64647d79583526be8107802b1f9fedfa 5b5708a437f27665db42c5a261a539a1bcb2a8c2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'bob'}
487 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'bob'}
489 ef908e42ce65ef57f970d799acaddde26f58a4cc 5ffb9e311b35f6ab6f76f667ca5d6e595645481b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'bob'}
488
490
489 $ cd ..
491 $ cd ..
490
492
491 Test pull report consistency
493 Test pull report consistency
492 ============================
494 ============================
493
495
494 obsolete but visible should be reported
496 obsolete but visible should be reported
495 ---------------------------------------
497 ---------------------------------------
496
498
497 Setup
499 Setup
498
500
499 $ hg init repo-a
501 $ hg init repo-a
500 $ cat << EOF >> repo-a/.hg/hgrc
502 $ cat << EOF >> repo-a/.hg/hgrc
501 > [ui]
503 > [ui]
502 > username=test
504 > username=test
503 > EOF
505 > EOF
504 $ cd repo-a
506 $ cd repo-a
505 $ hg debugbuilddag ..
507 $ hg debugbuilddag ..
506 $ hg debugobsolete `getid tip`
508 $ hg debugobsolete `getid tip`
507 obsoleted 1 changesets
509 obsoleted 1 changesets
508 $ cd ../
510 $ cd ../
509 $ hg clone --pull repo-a repo-b
511 $ hg clone --pull repo-a repo-b
510 requesting all changes
512 requesting all changes
511 adding changesets
513 adding changesets
512 adding manifests
514 adding manifests
513 adding file changes
515 adding file changes
514 added 1 changesets with 0 changes to 0 files
516 added 1 changesets with 0 changes to 0 files
515 new changesets 1ea73414a91b (1 drafts)
517 new changesets 1ea73414a91b (1 drafts)
516 updating to branch default
518 updating to branch default
517 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
519 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
518 $ hg -R repo-a up tip --hidden
520 $ hg -R repo-a up tip --hidden
519 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
521 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
520 updated to hidden changeset 66f7d451a68b
522 updated to hidden changeset 66f7d451a68b
521 (hidden revision '66f7d451a68b' is pruned)
523 (hidden revision '66f7d451a68b' is pruned)
522 $ hg -R repo-a branch foo
524 $ hg -R repo-a branch foo
523 marked working directory as branch foo
525 marked working directory as branch foo
524 (branches are permanent and global, did you want a bookmark?)
526 (branches are permanent and global, did you want a bookmark?)
525 $ hg -R repo-a commit -m foo
527 $ hg -R repo-a commit -m foo
526 1 new orphan changesets
528 1 new orphan changesets
527
529
528 Actual test
530 Actual test
529 (BROKEN)
531 (BROKEN)
530
532
531 $ hg -R repo-b pull
533 $ hg -R repo-b pull
532 pulling from $TESTTMP/distributed-chain-building/distributed-chain-building/repo-a
534 pulling from $TESTTMP/distributed-chain-building/distributed-chain-building/repo-a
533 searching for changes
535 searching for changes
534 adding changesets
536 adding changesets
535 adding manifests
537 adding manifests
536 adding file changes
538 adding file changes
537 added 2 changesets with 0 changes to 0 files
539 added 2 changesets with 0 changes to 0 files
538 1 new obsolescence markers
540 1 new obsolescence markers
539 1 new orphan changesets
541 1 new orphan changesets
540 new changesets 66f7d451a68b:95d586532b49 (2 drafts)
542 new changesets 66f7d451a68b:95d586532b49 (2 drafts)
541 (run 'hg update' to get a working copy)
543 (run 'hg update' to get a working copy)
@@ -1,1620 +1,1621 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 (run 'hg heads .' to see heads, 'hg merge' to merge)
809 (run 'hg heads .' to see heads, 'hg merge' to merge)
810 $ for node in `hg log -r 'desc(babar_)' --template '{node}\n'`;
810 $ for node in `hg log -r 'desc(babar_)' --template '{node}\n'`;
811 > do
811 > do
812 > hg debugobsolete $node
812 > hg debugobsolete $node
813 > done
813 > done
814 obsoleted 1 changesets
814 obsoleted 1 changesets
815 obsoleted 1 changesets
815 obsoleted 1 changesets
816 obsoleted 1 changesets
816 obsoleted 1 changesets
817 obsoleted 1 changesets
817 obsoleted 1 changesets
818 obsoleted 1 changesets
818 obsoleted 1 changesets
819 obsoleted 1 changesets
819 obsoleted 1 changesets
820 obsoleted 1 changesets
820 obsoleted 1 changesets
821 obsoleted 1 changesets
821 obsoleted 1 changesets
822 obsoleted 1 changesets
822 obsoleted 1 changesets
823 obsoleted 1 changesets
823 obsoleted 1 changesets
824 obsoleted 1 changesets
824 obsoleted 1 changesets
825 obsoleted 1 changesets
825 obsoleted 1 changesets
826 obsoleted 1 changesets
826 obsoleted 1 changesets
827 obsoleted 1 changesets
827 obsoleted 1 changesets
828 obsoleted 1 changesets
828 obsoleted 1 changesets
829 obsoleted 1 changesets
829 obsoleted 1 changesets
830 obsoleted 1 changesets
830 obsoleted 1 changesets
831 obsoleted 1 changesets
831 obsoleted 1 changesets
832 obsoleted 1 changesets
832 obsoleted 1 changesets
833 obsoleted 1 changesets
833 obsoleted 1 changesets
834 obsoleted 1 changesets
834 obsoleted 1 changesets
835 obsoleted 1 changesets
835 obsoleted 1 changesets
836 obsoleted 1 changesets
836 obsoleted 1 changesets
837 obsoleted 1 changesets
837 obsoleted 1 changesets
838 obsoleted 1 changesets
838 obsoleted 1 changesets
839 obsoleted 1 changesets
839 obsoleted 1 changesets
840 obsoleted 1 changesets
840 obsoleted 1 changesets
841 obsoleted 1 changesets
841 obsoleted 1 changesets
842 obsoleted 1 changesets
842 obsoleted 1 changesets
843 obsoleted 1 changesets
843 obsoleted 1 changesets
844 obsoleted 1 changesets
844 obsoleted 1 changesets
845 obsoleted 1 changesets
845 obsoleted 1 changesets
846 obsoleted 1 changesets
846 obsoleted 1 changesets
847 obsoleted 1 changesets
847 obsoleted 1 changesets
848 obsoleted 1 changesets
848 obsoleted 1 changesets
849 obsoleted 1 changesets
849 obsoleted 1 changesets
850 obsoleted 1 changesets
850 obsoleted 1 changesets
851 obsoleted 1 changesets
851 obsoleted 1 changesets
852 obsoleted 1 changesets
852 obsoleted 1 changesets
853 obsoleted 1 changesets
853 obsoleted 1 changesets
854 obsoleted 1 changesets
854 obsoleted 1 changesets
855 obsoleted 1 changesets
855 obsoleted 1 changesets
856 obsoleted 1 changesets
856 obsoleted 1 changesets
857 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 $ hg up tip
874 $ hg up tip
875 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
875 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
876
876
877 #if serve
877 #if serve
878
878
879 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
879 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
880 $ cat hg.pid >> $DAEMON_PIDS
880 $ cat hg.pid >> $DAEMON_PIDS
881
881
882 check changelog view
882 check changelog view
883
883
884 $ get-with-headers.py --headeronly localhost:$HGPORT 'shortlog/'
884 $ get-with-headers.py --headeronly localhost:$HGPORT 'shortlog/'
885 200 Script output follows
885 200 Script output follows
886
886
887 check graph view
887 check graph view
888
888
889 $ get-with-headers.py --headeronly localhost:$HGPORT 'graph'
889 $ get-with-headers.py --headeronly localhost:$HGPORT 'graph'
890 200 Script output follows
890 200 Script output follows
891
891
892 check filelog view
892 check filelog view
893
893
894 $ get-with-headers.py --headeronly localhost:$HGPORT 'log/'`hg log -r . -T "{node}"`/'babar'
894 $ get-with-headers.py --headeronly localhost:$HGPORT 'log/'`hg log -r . -T "{node}"`/'babar'
895 200 Script output follows
895 200 Script output follows
896
896
897 check filelog view for hidden commits (obsolete ones are hidden here)
897 check filelog view for hidden commits (obsolete ones are hidden here)
898
898
899 $ get-with-headers.py localhost:$HGPORT 'log/'`hg log -r . -T "{node}"`/'babar' | grep obsolete
899 $ get-with-headers.py localhost:$HGPORT 'log/'`hg log -r . -T "{node}"`/'babar' | grep obsolete
900 [1]
900 [1]
901
901
902 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/68'
902 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/68'
903 200 Script output follows
903 200 Script output follows
904 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
904 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
905 404 Not Found
905 404 Not Found
906 [1]
906 [1]
907
907
908 check that web.view config option:
908 check that web.view config option:
909
909
910 $ killdaemons.py hg.pid
910 $ killdaemons.py hg.pid
911 $ cat >> .hg/hgrc << EOF
911 $ cat >> .hg/hgrc << EOF
912 > [web]
912 > [web]
913 > view=all
913 > view=all
914 > EOF
914 > EOF
915 $ wait
915 $ wait
916 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
916 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
917 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
917 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/67'
918 200 Script output follows
918 200 Script output follows
919 $ killdaemons.py hg.pid
919 $ killdaemons.py hg.pid
920
920
921 Checking _enable=False warning if obsolete marker exists
921 Checking _enable=False warning if obsolete marker exists
922
922
923 $ echo '[experimental]' >> $HGRCPATH
923 $ echo '[experimental]' >> $HGRCPATH
924 $ echo "evolution=" >> $HGRCPATH
924 $ echo "evolution=" >> $HGRCPATH
925 $ hg log -r tip
925 $ hg log -r tip
926 68:c15e9edfca13 (draft) [tip ] add celestine
926 68:c15e9edfca13 (draft) [tip ] add celestine
927
927
928 reenable for later test
928 reenable for later test
929
929
930 $ echo '[experimental]' >> $HGRCPATH
930 $ echo '[experimental]' >> $HGRCPATH
931 $ echo "evolution.exchange=True" >> $HGRCPATH
931 $ echo "evolution.exchange=True" >> $HGRCPATH
932 $ echo "evolution.createmarkers=True" >> $HGRCPATH
932 $ echo "evolution.createmarkers=True" >> $HGRCPATH
933
933
934 $ rm access.log errors.log
934 $ rm access.log errors.log
935 #endif
935 #endif
936
936
937 Several troubles on the same changeset (create an unstable and bumped changeset)
937 Several troubles on the same changeset (create an unstable and bumped changeset)
938
938
939 $ hg debugobsolete `getid obsolete_e`
939 $ hg debugobsolete `getid obsolete_e`
940 obsoleted 1 changesets
940 obsoleted 1 changesets
941 2 new orphan changesets
941 2 new orphan changesets
942 $ hg debugobsolete `getid original_c` `getid babar`
942 $ hg debugobsolete `getid original_c` `getid babar`
943 1 new phase-divergent changesets
943 1 new phase-divergent changesets
944 $ hg log --config ui.logtemplate= -r 'phasedivergent() and orphan()'
944 $ hg log --config ui.logtemplate= -r 'phasedivergent() and orphan()'
945 changeset: 7:50c51b361e60
945 changeset: 7:50c51b361e60
946 user: test
946 user: test
947 date: Thu Jan 01 00:00:00 1970 +0000
947 date: Thu Jan 01 00:00:00 1970 +0000
948 instability: orphan, phase-divergent
948 instability: orphan, phase-divergent
949 summary: add babar
949 summary: add babar
950
950
951
951
952 test the "obsolete" templatekw
952 test the "obsolete" templatekw
953
953
954 $ hg log -r 'obsolete()'
954 $ hg log -r 'obsolete()'
955 6:3de5eca88c00 (draft *obsolete*) [ ] add obsolete_e [pruned]
955 6:3de5eca88c00 (draft *obsolete*) [ ] add obsolete_e [pruned]
956
956
957 test the "troubles" templatekw
957 test the "troubles" templatekw
958
958
959 $ hg log -r 'phasedivergent() and orphan()'
959 $ hg log -r 'phasedivergent() and orphan()'
960 7:50c51b361e60 (draft orphan phase-divergent) [ ] add babar
960 7:50c51b361e60 (draft orphan phase-divergent) [ ] add babar
961
961
962 test the default cmdline template
962 test the default cmdline template
963
963
964 $ hg log -T default -r 'phasedivergent()'
964 $ hg log -T default -r 'phasedivergent()'
965 changeset: 7:50c51b361e60
965 changeset: 7:50c51b361e60
966 user: test
966 user: test
967 date: Thu Jan 01 00:00:00 1970 +0000
967 date: Thu Jan 01 00:00:00 1970 +0000
968 instability: orphan, phase-divergent
968 instability: orphan, phase-divergent
969 summary: add babar
969 summary: add babar
970
970
971 $ hg log -T default -r 'obsolete()'
971 $ hg log -T default -r 'obsolete()'
972 changeset: 6:3de5eca88c00
972 changeset: 6:3de5eca88c00
973 parent: 3:6f9641995072
973 parent: 3:6f9641995072
974 user: test
974 user: test
975 date: Thu Jan 01 00:00:00 1970 +0000
975 date: Thu Jan 01 00:00:00 1970 +0000
976 obsolete: pruned
976 obsolete: pruned
977 summary: add obsolete_e
977 summary: add obsolete_e
978
978
979
979
980 test the obsolete labels
980 test the obsolete labels
981
981
982 $ hg log --config ui.logtemplate= --color=debug -r 'phasedivergent()'
982 $ hg log --config ui.logtemplate= --color=debug -r 'phasedivergent()'
983 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
983 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
984 [log.user|user: test]
984 [log.user|user: test]
985 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
985 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
986 [log.instability|instability: orphan, phase-divergent]
986 [log.instability|instability: orphan, phase-divergent]
987 [log.summary|summary: add babar]
987 [log.summary|summary: add babar]
988
988
989
989
990 $ hg log -T default -r 'phasedivergent()' --color=debug
990 $ hg log -T default -r 'phasedivergent()' --color=debug
991 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
991 [log.changeset changeset.draft changeset.unstable instability.orphan instability.phase-divergent|changeset: 7:50c51b361e60]
992 [log.user|user: test]
992 [log.user|user: test]
993 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
993 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
994 [log.instability|instability: orphan, phase-divergent]
994 [log.instability|instability: orphan, phase-divergent]
995 [log.summary|summary: add babar]
995 [log.summary|summary: add babar]
996
996
997
997
998 $ hg log --config ui.logtemplate= --color=debug -r "obsolete()"
998 $ hg log --config ui.logtemplate= --color=debug -r "obsolete()"
999 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
999 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
1000 [log.parent changeset.draft|parent: 3:6f9641995072]
1000 [log.parent changeset.draft|parent: 3:6f9641995072]
1001 [log.user|user: test]
1001 [log.user|user: test]
1002 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
1002 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
1003 [log.obsfate|obsolete: pruned]
1003 [log.obsfate|obsolete: pruned]
1004 [log.summary|summary: add obsolete_e]
1004 [log.summary|summary: add obsolete_e]
1005
1005
1006
1006
1007 $ hg log -T default -r 'obsolete()' --color=debug
1007 $ hg log -T default -r 'obsolete()' --color=debug
1008 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
1008 [log.changeset changeset.draft changeset.obsolete|changeset: 6:3de5eca88c00]
1009 [log.parent changeset.draft|parent: 3:6f9641995072]
1009 [log.parent changeset.draft|parent: 3:6f9641995072]
1010 [log.user|user: test]
1010 [log.user|user: test]
1011 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
1011 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
1012 [log.obsfate|obsolete: pruned]
1012 [log.obsfate|obsolete: pruned]
1013 [log.summary|summary: add obsolete_e]
1013 [log.summary|summary: add obsolete_e]
1014
1014
1015
1015
1016 test summary output
1016 test summary output
1017
1017
1018 $ hg up -r 'phasedivergent() and orphan()'
1018 $ hg up -r 'phasedivergent() and orphan()'
1019 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1019 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1020 $ hg summary
1020 $ hg summary
1021 parent: 7:50c51b361e60 (orphan, phase-divergent)
1021 parent: 7:50c51b361e60 (orphan, phase-divergent)
1022 add babar
1022 add babar
1023 branch: default
1023 branch: default
1024 commit: (clean)
1024 commit: (clean)
1025 update: 2 new changesets (update)
1025 update: 2 new changesets (update)
1026 phases: 4 draft
1026 phases: 4 draft
1027 orphan: 2 changesets
1027 orphan: 2 changesets
1028 phase-divergent: 1 changesets
1028 phase-divergent: 1 changesets
1029 $ hg up -r 'obsolete()'
1029 $ hg up -r 'obsolete()'
1030 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1030 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1031 $ hg summary
1031 $ hg summary
1032 parent: 6:3de5eca88c00 (obsolete)
1032 parent: 6:3de5eca88c00 (obsolete)
1033 add obsolete_e
1033 add obsolete_e
1034 branch: default
1034 branch: default
1035 commit: (clean)
1035 commit: (clean)
1036 update: 3 new changesets (update)
1036 update: 3 new changesets (update)
1037 phases: 4 draft
1037 phases: 4 draft
1038 orphan: 2 changesets
1038 orphan: 2 changesets
1039 phase-divergent: 1 changesets
1039 phase-divergent: 1 changesets
1040
1040
1041 test debugwhyunstable output
1041 test debugwhyunstable output
1042
1042
1043 $ hg debugwhyunstable 50c51b361e60
1043 $ hg debugwhyunstable 50c51b361e60
1044 orphan: obsolete parent 3de5eca88c00aa039da7399a220f4a5221faa585
1044 orphan: obsolete parent 3de5eca88c00aa039da7399a220f4a5221faa585
1045 phase-divergent: immutable predecessor 245bde4270cd1072a27757984f9cda8ba26f08ca
1045 phase-divergent: immutable predecessor 245bde4270cd1072a27757984f9cda8ba26f08ca
1046
1046
1047 test whyunstable template keyword
1047 test whyunstable template keyword
1048
1048
1049 $ hg log -r 50c51b361e60 -T '{whyunstable}\n'
1049 $ hg log -r 50c51b361e60 -T '{whyunstable}\n'
1050 orphan: obsolete parent 3de5eca88c00
1050 orphan: obsolete parent 3de5eca88c00
1051 phase-divergent: immutable predecessor 245bde4270cd
1051 phase-divergent: immutable predecessor 245bde4270cd
1052 $ hg log -r 50c51b361e60 -T '{whyunstable % "{instability}: {reason} {node|shortest}\n"}'
1052 $ hg log -r 50c51b361e60 -T '{whyunstable % "{instability}: {reason} {node|shortest}\n"}'
1053 orphan: obsolete parent 3de5
1053 orphan: obsolete parent 3de5
1054 phase-divergent: immutable predecessor 245b
1054 phase-divergent: immutable predecessor 245b
1055
1055
1056 #if serve
1056 #if serve
1057
1057
1058 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1058 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1059 $ cat hg.pid >> $DAEMON_PIDS
1059 $ cat hg.pid >> $DAEMON_PIDS
1060
1060
1061 check obsolete changeset
1061 check obsolete changeset
1062
1062
1063 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=paper' | grep '<span class="obsolete">'
1063 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=paper' | grep '<span class="obsolete">'
1064 <span class="phase">draft</span> <span class="obsolete">obsolete</span>
1064 <span class="phase">draft</span> <span class="obsolete">obsolete</span>
1065 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=coal' | grep '<span class="obsolete">'
1065 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=coal' | grep '<span class="obsolete">'
1066 <span class="phase">draft</span> <span class="obsolete">obsolete</span>
1066 <span class="phase">draft</span> <span class="obsolete">obsolete</span>
1067 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=gitweb' | grep '<span class="logtags">'
1067 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=gitweb' | grep '<span class="logtags">'
1068 <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="obsoletetag" title="obsolete">obsolete</span> </span>
1068 <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="obsoletetag" title="obsolete">obsolete</span> </span>
1069 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=monoblue' | grep '<span class="logtags">'
1069 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=monoblue' | grep '<span class="logtags">'
1070 <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="obsoletetag" title="obsolete">obsolete</span> </span>
1070 <span class="logtags"><span class="phasetag" title="draft">draft</span> <span class="obsoletetag" title="obsolete">obsolete</span> </span>
1071 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=spartan' | grep 'class="obsolete"'
1071 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(obsolete())&style=spartan' | grep 'class="obsolete"'
1072 <th class="obsolete">obsolete:</th>
1072 <th class="obsolete">obsolete:</th>
1073 <td class="obsolete">pruned by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
1073 <td class="obsolete">pruned by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
1074
1074
1075 check changeset with instabilities
1075 check changeset with instabilities
1076
1076
1077 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=paper' | grep '<span class="instability">'
1077 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=paper' | grep '<span class="instability">'
1078 <span class="phase">draft</span> <span class="instability">orphan</span> <span class="instability">phase-divergent</span>
1078 <span class="phase">draft</span> <span class="instability">orphan</span> <span class="instability">phase-divergent</span>
1079 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=coal' | grep '<span class="instability">'
1079 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=coal' | grep '<span class="instability">'
1080 <span class="phase">draft</span> <span class="instability">orphan</span> <span class="instability">phase-divergent</span>
1080 <span class="phase">draft</span> <span class="instability">orphan</span> <span class="instability">phase-divergent</span>
1081 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=gitweb' | grep '<span class="logtags">'
1081 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=gitweb' | grep '<span class="logtags">'
1082 <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>
1082 <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>
1083 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=monoblue' | grep '<span class="logtags">'
1083 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=monoblue' | grep '<span class="logtags">'
1084 <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>
1084 <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>
1085 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=spartan' | grep 'class="unstable"'
1085 $ get-with-headers.py localhost:$HGPORT 'log?rev=first(phasedivergent())&style=spartan' | grep 'class="unstable"'
1086 <th class="unstable">unstable:</th>
1086 <th class="unstable">unstable:</th>
1087 <td class="unstable">orphan: obsolete parent <a href="/rev/3de5eca88c00?style=spartan">3de5eca88c00</a></td>
1087 <td class="unstable">orphan: obsolete parent <a href="/rev/3de5eca88c00?style=spartan">3de5eca88c00</a></td>
1088 <th class="unstable">unstable:</th>
1088 <th class="unstable">unstable:</th>
1089 <td class="unstable">phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=spartan">245bde4270cd</a></td>
1089 <td class="unstable">phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=spartan">245bde4270cd</a></td>
1090
1090
1091 check explanation for an orphan and phase-divergent changeset
1091 check explanation for an orphan and phase-divergent changeset
1092
1092
1093 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=paper' | egrep '(orphan|phase-divergent):'
1093 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=paper' | egrep '(orphan|phase-divergent):'
1094 <td>orphan: obsolete parent <a href="/rev/3de5eca88c00?style=paper">3de5eca88c00</a><br>
1094 <td>orphan: obsolete parent <a href="/rev/3de5eca88c00?style=paper">3de5eca88c00</a><br>
1095 phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=paper">245bde4270cd</a></td>
1095 phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=paper">245bde4270cd</a></td>
1096 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=coal' | egrep '(orphan|phase-divergent):'
1096 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=coal' | egrep '(orphan|phase-divergent):'
1097 <td>orphan: obsolete parent <a href="/rev/3de5eca88c00?style=coal">3de5eca88c00</a><br>
1097 <td>orphan: obsolete parent <a href="/rev/3de5eca88c00?style=coal">3de5eca88c00</a><br>
1098 phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=coal">245bde4270cd</a></td>
1098 phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=coal">245bde4270cd</a></td>
1099 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=gitweb' | egrep '(orphan|phase-divergent):'
1099 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=gitweb' | egrep '(orphan|phase-divergent):'
1100 <td>orphan: obsolete parent <a class="list" href="/rev/3de5eca88c00?style=gitweb">3de5eca88c00</a></td>
1100 <td>orphan: obsolete parent <a class="list" href="/rev/3de5eca88c00?style=gitweb">3de5eca88c00</a></td>
1101 <td>phase-divergent: immutable predecessor <a class="list" href="/rev/245bde4270cd?style=gitweb">245bde4270cd</a></td>
1101 <td>phase-divergent: immutable predecessor <a class="list" href="/rev/245bde4270cd?style=gitweb">245bde4270cd</a></td>
1102 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=monoblue' | egrep '(orphan|phase-divergent):'
1102 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=monoblue' | egrep '(orphan|phase-divergent):'
1103 <dd>orphan: obsolete parent <a href="/rev/3de5eca88c00?style=monoblue">3de5eca88c00</a></dd>
1103 <dd>orphan: obsolete parent <a href="/rev/3de5eca88c00?style=monoblue">3de5eca88c00</a></dd>
1104 <dd>phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=monoblue">245bde4270cd</a></dd>
1104 <dd>phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=monoblue">245bde4270cd</a></dd>
1105 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=spartan' | egrep '(orphan|phase-divergent):'
1105 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=spartan' | egrep '(orphan|phase-divergent):'
1106 <td class="unstable">orphan: obsolete parent <a href="/rev/3de5eca88c00?style=spartan">3de5eca88c00</a></td>
1106 <td class="unstable">orphan: obsolete parent <a href="/rev/3de5eca88c00?style=spartan">3de5eca88c00</a></td>
1107 <td class="unstable">phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=spartan">245bde4270cd</a></td>
1107 <td class="unstable">phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=spartan">245bde4270cd</a></td>
1108
1108
1109 $ killdaemons.py
1109 $ killdaemons.py
1110
1110
1111 $ rm hg.pid access.log errors.log
1111 $ rm hg.pid access.log errors.log
1112
1112
1113 #endif
1113 #endif
1114
1114
1115 Test incoming/outcoming with changesets obsoleted remotely, known locally
1115 Test incoming/outcoming with changesets obsoleted remotely, known locally
1116 ===============================================================================
1116 ===============================================================================
1117
1117
1118 This test issue 3805
1118 This test issue 3805
1119
1119
1120 $ hg init repo-issue3805
1120 $ hg init repo-issue3805
1121 $ cd repo-issue3805
1121 $ cd repo-issue3805
1122 $ echo "base" > base
1122 $ echo "base" > base
1123 $ hg ci -Am "base"
1123 $ hg ci -Am "base"
1124 adding base
1124 adding base
1125 $ echo "foo" > foo
1125 $ echo "foo" > foo
1126 $ hg ci -Am "A"
1126 $ hg ci -Am "A"
1127 adding foo
1127 adding foo
1128 $ hg clone . ../other-issue3805
1128 $ hg clone . ../other-issue3805
1129 updating to branch default
1129 updating to branch default
1130 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1130 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1131 $ echo "bar" >> foo
1131 $ echo "bar" >> foo
1132 $ hg ci --amend
1132 $ hg ci --amend
1133 $ cd ../other-issue3805
1133 $ cd ../other-issue3805
1134 $ hg log -G
1134 $ hg log -G
1135 @ 1:29f0c6921ddd (draft) [tip ] A
1135 @ 1:29f0c6921ddd (draft) [tip ] A
1136 |
1136 |
1137 o 0:d20a80d4def3 (draft) [ ] base
1137 o 0:d20a80d4def3 (draft) [ ] base
1138
1138
1139 $ hg log -G -R ../repo-issue3805
1139 $ hg log -G -R ../repo-issue3805
1140 @ 2:323a9c3ddd91 (draft) [tip ] A
1140 @ 2:323a9c3ddd91 (draft) [tip ] A
1141 |
1141 |
1142 o 0:d20a80d4def3 (draft) [ ] base
1142 o 0:d20a80d4def3 (draft) [ ] base
1143
1143
1144 $ hg incoming
1144 $ hg incoming
1145 comparing with $TESTTMP/tmpe/repo-issue3805
1145 comparing with $TESTTMP/tmpe/repo-issue3805
1146 searching for changes
1146 searching for changes
1147 2:323a9c3ddd91 (draft) [tip ] A
1147 2:323a9c3ddd91 (draft) [tip ] A
1148 $ hg incoming --bundle ../issue3805.hg
1148 $ hg incoming --bundle ../issue3805.hg
1149 comparing with $TESTTMP/tmpe/repo-issue3805
1149 comparing with $TESTTMP/tmpe/repo-issue3805
1150 searching for changes
1150 searching for changes
1151 2:323a9c3ddd91 (draft) [tip ] A
1151 2:323a9c3ddd91 (draft) [tip ] A
1152 $ hg outgoing
1152 $ hg outgoing
1153 comparing with $TESTTMP/tmpe/repo-issue3805
1153 comparing with $TESTTMP/tmpe/repo-issue3805
1154 searching for changes
1154 searching for changes
1155 1:29f0c6921ddd (draft) [tip ] A
1155 1:29f0c6921ddd (draft) [tip ] A
1156
1156
1157 #if serve
1157 #if serve
1158
1158
1159 $ hg serve -R ../repo-issue3805 -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1159 $ hg serve -R ../repo-issue3805 -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1160 $ cat hg.pid >> $DAEMON_PIDS
1160 $ cat hg.pid >> $DAEMON_PIDS
1161
1161
1162 $ hg incoming http://localhost:$HGPORT
1162 $ hg incoming http://localhost:$HGPORT
1163 comparing with http://localhost:$HGPORT/
1163 comparing with http://localhost:$HGPORT/
1164 searching for changes
1164 searching for changes
1165 2:323a9c3ddd91 (draft) [tip ] A
1165 2:323a9c3ddd91 (draft) [tip ] A
1166 $ hg outgoing http://localhost:$HGPORT
1166 $ hg outgoing http://localhost:$HGPORT
1167 comparing with http://localhost:$HGPORT/
1167 comparing with http://localhost:$HGPORT/
1168 searching for changes
1168 searching for changes
1169 1:29f0c6921ddd (draft) [tip ] A
1169 1:29f0c6921ddd (draft) [tip ] A
1170
1170
1171 $ killdaemons.py
1171 $ killdaemons.py
1172
1172
1173 #endif
1173 #endif
1174
1174
1175 This test issue 3814
1175 This test issue 3814
1176
1176
1177 (nothing to push but locally hidden changeset)
1177 (nothing to push but locally hidden changeset)
1178
1178
1179 $ cd ..
1179 $ cd ..
1180 $ hg init repo-issue3814
1180 $ hg init repo-issue3814
1181 $ cd repo-issue3805
1181 $ cd repo-issue3805
1182 $ hg push -r 323a9c3ddd91 ../repo-issue3814
1182 $ hg push -r 323a9c3ddd91 ../repo-issue3814
1183 pushing to ../repo-issue3814
1183 pushing to ../repo-issue3814
1184 searching for changes
1184 searching for changes
1185 adding changesets
1185 adding changesets
1186 adding manifests
1186 adding manifests
1187 adding file changes
1187 adding file changes
1188 added 2 changesets with 2 changes to 2 files
1188 added 2 changesets with 2 changes to 2 files
1189 1 new obsolescence markers
1189 1 new obsolescence markers
1190 $ hg out ../repo-issue3814
1190 $ hg out ../repo-issue3814
1191 comparing with ../repo-issue3814
1191 comparing with ../repo-issue3814
1192 searching for changes
1192 searching for changes
1193 no changes found
1193 no changes found
1194 [1]
1194 [1]
1195
1195
1196 Test that a local tag blocks a changeset from being hidden
1196 Test that a local tag blocks a changeset from being hidden
1197
1197
1198 $ hg tag -l visible -r 1 --hidden
1198 $ hg tag -l visible -r 1 --hidden
1199 $ hg log -G
1199 $ hg log -G
1200 @ 2:323a9c3ddd91 (draft) [tip ] A
1200 @ 2:323a9c3ddd91 (draft) [tip ] A
1201 |
1201 |
1202 | x 1:29f0c6921ddd (draft *obsolete*) [visible ] A [rewritten using amend as 2:323a9c3ddd91]
1202 | x 1:29f0c6921ddd (draft *obsolete*) [visible ] A [rewritten using amend as 2:323a9c3ddd91]
1203 |/
1203 |/
1204 o 0:d20a80d4def3 (draft) [ ] base
1204 o 0:d20a80d4def3 (draft) [ ] base
1205
1205
1206 Test that removing a local tag does not cause some commands to fail
1206 Test that removing a local tag does not cause some commands to fail
1207
1207
1208 $ hg tag -l -r tip tiptag
1208 $ hg tag -l -r tip tiptag
1209 $ hg tags
1209 $ hg tags
1210 tiptag 2:323a9c3ddd91
1210 tiptag 2:323a9c3ddd91
1211 tip 2:323a9c3ddd91
1211 tip 2:323a9c3ddd91
1212 visible 1:29f0c6921ddd
1212 visible 1:29f0c6921ddd
1213 $ hg --config extensions.strip= strip -r tip --no-backup
1213 $ hg --config extensions.strip= strip -r tip --no-backup
1214 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1214 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1215 $ hg tags
1215 $ hg tags
1216 visible 1:29f0c6921ddd
1216 visible 1:29f0c6921ddd
1217 tip 1:29f0c6921ddd
1217 tip 1:29f0c6921ddd
1218
1218
1219 Test bundle overlay onto hidden revision
1219 Test bundle overlay onto hidden revision
1220
1220
1221 $ cd ..
1221 $ cd ..
1222 $ hg init repo-bundleoverlay
1222 $ hg init repo-bundleoverlay
1223 $ cd repo-bundleoverlay
1223 $ cd repo-bundleoverlay
1224 $ echo "A" > foo
1224 $ echo "A" > foo
1225 $ hg ci -Am "A"
1225 $ hg ci -Am "A"
1226 adding foo
1226 adding foo
1227 $ echo "B" >> foo
1227 $ echo "B" >> foo
1228 $ hg ci -m "B"
1228 $ hg ci -m "B"
1229 $ hg up 0
1229 $ hg up 0
1230 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1230 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1231 $ echo "C" >> foo
1231 $ echo "C" >> foo
1232 $ hg ci -m "C"
1232 $ hg ci -m "C"
1233 created new head
1233 created new head
1234 $ hg log -G
1234 $ hg log -G
1235 @ 2:c186d7714947 (draft) [tip ] C
1235 @ 2:c186d7714947 (draft) [tip ] C
1236 |
1236 |
1237 | o 1:44526ebb0f98 (draft) [ ] B
1237 | o 1:44526ebb0f98 (draft) [ ] B
1238 |/
1238 |/
1239 o 0:4b34ecfb0d56 (draft) [ ] A
1239 o 0:4b34ecfb0d56 (draft) [ ] A
1240
1240
1241
1241
1242 $ hg clone -r1 . ../other-bundleoverlay
1242 $ hg clone -r1 . ../other-bundleoverlay
1243 adding changesets
1243 adding changesets
1244 adding manifests
1244 adding manifests
1245 adding file changes
1245 adding file changes
1246 added 2 changesets with 2 changes to 1 files
1246 added 2 changesets with 2 changes to 1 files
1247 new changesets 4b34ecfb0d56:44526ebb0f98 (2 drafts)
1247 new changesets 4b34ecfb0d56:44526ebb0f98 (2 drafts)
1248 updating to branch default
1248 updating to branch default
1249 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1249 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1250 $ cd ../other-bundleoverlay
1250 $ cd ../other-bundleoverlay
1251 $ echo "B+" >> foo
1251 $ echo "B+" >> foo
1252 $ hg ci --amend -m "B+"
1252 $ hg ci --amend -m "B+"
1253 $ hg log -G --hidden
1253 $ hg log -G --hidden
1254 @ 2:b7d587542d40 (draft) [tip ] B+
1254 @ 2:b7d587542d40 (draft) [tip ] B+
1255 |
1255 |
1256 | x 1:44526ebb0f98 (draft *obsolete*) [ ] B [rewritten using amend as 2:b7d587542d40]
1256 | x 1:44526ebb0f98 (draft *obsolete*) [ ] B [rewritten using amend as 2:b7d587542d40]
1257 |/
1257 |/
1258 o 0:4b34ecfb0d56 (draft) [ ] A
1258 o 0:4b34ecfb0d56 (draft) [ ] A
1259
1259
1260
1260
1261 #if repobundlerepo
1261 #if repobundlerepo
1262 $ hg incoming ../repo-bundleoverlay --bundle ../bundleoverlay.hg
1262 $ hg incoming ../repo-bundleoverlay --bundle ../bundleoverlay.hg
1263 comparing with ../repo-bundleoverlay
1263 comparing with ../repo-bundleoverlay
1264 searching for changes
1264 searching for changes
1265 1:44526ebb0f98 (draft) [ ] B
1265 1:44526ebb0f98 (draft) [ ] B
1266 2:c186d7714947 (draft) [tip ] C
1266 2:c186d7714947 (draft) [tip ] C
1267 $ hg log -G -R ../bundleoverlay.hg
1267 $ hg log -G -R ../bundleoverlay.hg
1268 o 3:c186d7714947 (draft) [tip ] C
1268 o 3:c186d7714947 (draft) [tip ] C
1269 |
1269 |
1270 | @ 2:b7d587542d40 (draft) [ ] B+
1270 | @ 2:b7d587542d40 (draft) [ ] B+
1271 |/
1271 |/
1272 o 0:4b34ecfb0d56 (draft) [ ] A
1272 o 0:4b34ecfb0d56 (draft) [ ] A
1273
1273
1274 #endif
1274 #endif
1275
1275
1276 #if serve
1276 #if serve
1277
1277
1278 Test issue 4506
1278 Test issue 4506
1279
1279
1280 $ cd ..
1280 $ cd ..
1281 $ hg init repo-issue4506
1281 $ hg init repo-issue4506
1282 $ cd repo-issue4506
1282 $ cd repo-issue4506
1283 $ echo "0" > foo
1283 $ echo "0" > foo
1284 $ hg add foo
1284 $ hg add foo
1285 $ hg ci -m "content-0"
1285 $ hg ci -m "content-0"
1286
1286
1287 $ hg up null
1287 $ hg up null
1288 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1288 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1289 $ echo "1" > bar
1289 $ echo "1" > bar
1290 $ hg add bar
1290 $ hg add bar
1291 $ hg ci -m "content-1"
1291 $ hg ci -m "content-1"
1292 created new head
1292 created new head
1293 $ hg up 0
1293 $ hg up 0
1294 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1294 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1295 $ hg graft 1
1295 $ hg graft 1
1296 grafting 1:1c9eddb02162 "content-1" (tip)
1296 grafting 1:1c9eddb02162 "content-1" (tip)
1297
1297
1298 $ hg debugobsolete `hg log -r1 -T'{node}'` `hg log -r2 -T'{node}'`
1298 $ hg debugobsolete `hg log -r1 -T'{node}'` `hg log -r2 -T'{node}'`
1299 obsoleted 1 changesets
1299 obsoleted 1 changesets
1300
1300
1301 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1301 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1302 $ cat hg.pid >> $DAEMON_PIDS
1302 $ cat hg.pid >> $DAEMON_PIDS
1303
1303
1304 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/1'
1304 $ get-with-headers.py --headeronly localhost:$HGPORT 'rev/1'
1305 404 Not Found
1305 404 Not Found
1306 [1]
1306 [1]
1307 $ get-with-headers.py --headeronly localhost:$HGPORT 'file/tip/bar'
1307 $ get-with-headers.py --headeronly localhost:$HGPORT 'file/tip/bar'
1308 200 Script output follows
1308 200 Script output follows
1309 $ get-with-headers.py --headeronly localhost:$HGPORT 'annotate/tip/bar'
1309 $ get-with-headers.py --headeronly localhost:$HGPORT 'annotate/tip/bar'
1310 200 Script output follows
1310 200 Script output follows
1311
1311
1312 $ killdaemons.py
1312 $ killdaemons.py
1313
1313
1314 #endif
1314 #endif
1315
1315
1316 Test heads computation on pending index changes with obsolescence markers
1316 Test heads computation on pending index changes with obsolescence markers
1317 $ cd ..
1317 $ cd ..
1318 $ cat >$TESTTMP/test_extension.py << EOF
1318 $ cat >$TESTTMP/test_extension.py << EOF
1319 > from __future__ import absolute_import
1319 > from __future__ import absolute_import
1320 > from mercurial.i18n import _
1320 > from mercurial.i18n import _
1321 > from mercurial import cmdutil, pycompat, registrar
1321 > from mercurial import cmdutil, pycompat, registrar
1322 > from mercurial.utils import stringutil
1322 > from mercurial.utils import stringutil
1323 >
1323 >
1324 > cmdtable = {}
1324 > cmdtable = {}
1325 > command = registrar.command(cmdtable)
1325 > command = registrar.command(cmdtable)
1326 > @command(b"amendtransient",[], _(b'hg amendtransient [rev]'))
1326 > @command(b"amendtransient",[], _(b'hg amendtransient [rev]'))
1327 > def amend(ui, repo, *pats, **opts):
1327 > def amend(ui, repo, *pats, **opts):
1328 > opts = pycompat.byteskwargs(opts)
1328 > opts = pycompat.byteskwargs(opts)
1329 > opts[b'message'] = b'Test'
1329 > opts[b'message'] = b'Test'
1330 > opts[b'logfile'] = None
1330 > opts[b'logfile'] = None
1331 > cmdutil.amend(ui, repo, repo[b'.'], {}, pats, opts)
1331 > cmdutil.amend(ui, repo, repo[b'.'], {}, pats, opts)
1332 > ui.write(b'%s\n' % stringutil.pprint(repo.changelog.headrevs()))
1332 > ui.write(b'%s\n' % stringutil.pprint(repo.changelog.headrevs()))
1333 > EOF
1333 > EOF
1334 $ cat >> $HGRCPATH << EOF
1334 $ cat >> $HGRCPATH << EOF
1335 > [extensions]
1335 > [extensions]
1336 > testextension=$TESTTMP/test_extension.py
1336 > testextension=$TESTTMP/test_extension.py
1337 > EOF
1337 > EOF
1338 $ hg init repo-issue-nativerevs-pending-changes
1338 $ hg init repo-issue-nativerevs-pending-changes
1339 $ cd repo-issue-nativerevs-pending-changes
1339 $ cd repo-issue-nativerevs-pending-changes
1340 $ mkcommit a
1340 $ mkcommit a
1341 $ mkcommit b
1341 $ mkcommit b
1342 $ hg up ".^"
1342 $ hg up ".^"
1343 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1343 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1344 $ echo aa > a
1344 $ echo aa > a
1345 $ hg amendtransient
1345 $ hg amendtransient
1346 1 new orphan changesets
1346 1 new orphan changesets
1347 [1, 2]
1347 [1, 2]
1348
1348
1349 Test cache consistency for the visible filter
1349 Test cache consistency for the visible filter
1350 1) We want to make sure that the cached filtered revs are invalidated when
1350 1) We want to make sure that the cached filtered revs are invalidated when
1351 bookmarks change
1351 bookmarks change
1352 $ cd ..
1352 $ cd ..
1353 $ cat >$TESTTMP/test_extension.py << EOF
1353 $ cat >$TESTTMP/test_extension.py << EOF
1354 > from __future__ import absolute_import, print_function
1354 > from __future__ import absolute_import, print_function
1355 > import weakref
1355 > import weakref
1356 > from mercurial import (
1356 > from mercurial import (
1357 > bookmarks,
1357 > bookmarks,
1358 > cmdutil,
1358 > cmdutil,
1359 > extensions,
1359 > extensions,
1360 > repoview,
1360 > repoview,
1361 > )
1361 > )
1362 > def _bookmarkchanged(orig, bkmstoreinst, *args, **kwargs):
1362 > def _bookmarkchanged(orig, bkmstoreinst, *args, **kwargs):
1363 > reporef = weakref.ref(bkmstoreinst._repo)
1363 > reporef = weakref.ref(bkmstoreinst._repo)
1364 > def trhook(tr):
1364 > def trhook(tr):
1365 > repo = reporef()
1365 > repo = reporef()
1366 > hidden1 = repoview.computehidden(repo)
1366 > hidden1 = repoview.computehidden(repo)
1367 > hidden = repoview.filterrevs(repo, b'visible')
1367 > hidden = repoview.filterrevs(repo, b'visible')
1368 > if sorted(hidden1) != sorted(hidden):
1368 > if sorted(hidden1) != sorted(hidden):
1369 > print("cache inconsistency")
1369 > print("cache inconsistency")
1370 > bkmstoreinst._repo.currenttransaction().addpostclose(b'test_extension', trhook)
1370 > bkmstoreinst._repo.currenttransaction().addpostclose(b'test_extension', trhook)
1371 > orig(bkmstoreinst, *args, **kwargs)
1371 > orig(bkmstoreinst, *args, **kwargs)
1372 > def extsetup(ui):
1372 > def extsetup(ui):
1373 > extensions.wrapfunction(bookmarks.bmstore, '_recordchange',
1373 > extensions.wrapfunction(bookmarks.bmstore, '_recordchange',
1374 > _bookmarkchanged)
1374 > _bookmarkchanged)
1375 > EOF
1375 > EOF
1376
1376
1377 $ hg init repo-cache-inconsistency
1377 $ hg init repo-cache-inconsistency
1378 $ cd repo-issue-nativerevs-pending-changes
1378 $ cd repo-issue-nativerevs-pending-changes
1379 $ mkcommit a
1379 $ mkcommit a
1380 a already tracked!
1380 a already tracked!
1381 $ mkcommit b
1381 $ mkcommit b
1382 $ hg id
1382 $ hg id
1383 13bedc178fce tip
1383 13bedc178fce tip
1384 $ echo "hello" > b
1384 $ echo "hello" > b
1385 $ hg commit --amend -m "message"
1385 $ hg commit --amend -m "message"
1386 $ hg book bookb -r 13bedc178fce --hidden
1386 $ hg book bookb -r 13bedc178fce --hidden
1387 bookmarking hidden changeset 13bedc178fce
1387 bookmarking hidden changeset 13bedc178fce
1388 (hidden revision '13bedc178fce' was rewritten as: a9b1f8652753)
1388 (hidden revision '13bedc178fce' was rewritten as: a9b1f8652753)
1389 $ hg log -r 13bedc178fce
1389 $ hg log -r 13bedc178fce
1390 4:13bedc178fce (draft *obsolete*) [ bookb] add b [rewritten using amend as 5:a9b1f8652753]
1390 4:13bedc178fce (draft *obsolete*) [ bookb] add b [rewritten using amend as 5:a9b1f8652753]
1391 $ hg book -d bookb
1391 $ hg book -d bookb
1392 $ hg log -r 13bedc178fce
1392 $ hg log -r 13bedc178fce
1393 abort: hidden revision '13bedc178fce' was rewritten as: a9b1f8652753!
1393 abort: hidden revision '13bedc178fce' was rewritten as: a9b1f8652753!
1394 (use --hidden to access hidden revisions)
1394 (use --hidden to access hidden revisions)
1395 [255]
1395 [255]
1396
1396
1397 Empty out the test extension, as it isn't compatible with later parts
1397 Empty out the test extension, as it isn't compatible with later parts
1398 of the test.
1398 of the test.
1399 $ echo > $TESTTMP/test_extension.py
1399 $ echo > $TESTTMP/test_extension.py
1400
1400
1401 Test ability to pull changeset with locally applying obsolescence markers
1401 Test ability to pull changeset with locally applying obsolescence markers
1402 (issue4945)
1402 (issue4945)
1403
1403
1404 $ cd ..
1404 $ cd ..
1405 $ hg init issue4845
1405 $ hg init issue4845
1406 $ cd issue4845
1406 $ cd issue4845
1407
1407
1408 $ echo foo > f0
1408 $ echo foo > f0
1409 $ hg add f0
1409 $ hg add f0
1410 $ hg ci -m '0'
1410 $ hg ci -m '0'
1411 $ echo foo > f1
1411 $ echo foo > f1
1412 $ hg add f1
1412 $ hg add f1
1413 $ hg ci -m '1'
1413 $ hg ci -m '1'
1414 $ echo foo > f2
1414 $ echo foo > f2
1415 $ hg add f2
1415 $ hg add f2
1416 $ hg ci -m '2'
1416 $ hg ci -m '2'
1417
1417
1418 $ echo bar > f2
1418 $ echo bar > f2
1419 $ hg commit --amend --config experimental.evolution.createmarkers=True
1419 $ hg commit --amend --config experimental.evolution.createmarkers=True
1420 $ hg log -G
1420 $ hg log -G
1421 @ 3:b0551702f918 (draft) [tip ] 2
1421 @ 3:b0551702f918 (draft) [tip ] 2
1422 |
1422 |
1423 o 1:e016b03fd86f (draft) [ ] 1
1423 o 1:e016b03fd86f (draft) [ ] 1
1424 |
1424 |
1425 o 0:a78f55e5508c (draft) [ ] 0
1425 o 0:a78f55e5508c (draft) [ ] 0
1426
1426
1427 $ hg log -G --hidden
1427 $ hg log -G --hidden
1428 @ 3:b0551702f918 (draft) [tip ] 2
1428 @ 3:b0551702f918 (draft) [tip ] 2
1429 |
1429 |
1430 | x 2:e008cf283490 (draft *obsolete*) [ ] 2 [rewritten using amend as 3:b0551702f918]
1430 | x 2:e008cf283490 (draft *obsolete*) [ ] 2 [rewritten using amend as 3:b0551702f918]
1431 |/
1431 |/
1432 o 1:e016b03fd86f (draft) [ ] 1
1432 o 1:e016b03fd86f (draft) [ ] 1
1433 |
1433 |
1434 o 0:a78f55e5508c (draft) [ ] 0
1434 o 0:a78f55e5508c (draft) [ ] 0
1435
1435
1436
1436
1437 $ hg strip --hidden -r 2 --config extensions.strip= --config devel.strip-obsmarkers=no
1437 $ hg strip --hidden -r 2 --config extensions.strip= --config devel.strip-obsmarkers=no
1438 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e008cf283490-ede36964-backup.hg
1438 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e008cf283490-ede36964-backup.hg
1439 $ hg debugobsolete
1439 $ hg debugobsolete
1440 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1440 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1441 $ hg log -G
1441 $ hg log -G
1442 @ 2:b0551702f918 (draft) [tip ] 2
1442 @ 2:b0551702f918 (draft) [tip ] 2
1443 |
1443 |
1444 o 1:e016b03fd86f (draft) [ ] 1
1444 o 1:e016b03fd86f (draft) [ ] 1
1445 |
1445 |
1446 o 0:a78f55e5508c (draft) [ ] 0
1446 o 0:a78f55e5508c (draft) [ ] 0
1447
1447
1448 $ hg log -G --hidden
1448 $ hg log -G --hidden
1449 @ 2:b0551702f918 (draft) [tip ] 2
1449 @ 2:b0551702f918 (draft) [tip ] 2
1450 |
1450 |
1451 o 1:e016b03fd86f (draft) [ ] 1
1451 o 1:e016b03fd86f (draft) [ ] 1
1452 |
1452 |
1453 o 0:a78f55e5508c (draft) [ ] 0
1453 o 0:a78f55e5508c (draft) [ ] 0
1454
1454
1455 $ hg debugbundle .hg/strip-backup/e008cf283490-*-backup.hg
1455 $ hg debugbundle .hg/strip-backup/e008cf283490-*-backup.hg
1456 Stream params: {Compression: BZ}
1456 Stream params: {Compression: BZ}
1457 changegroup -- {nbchanges: 1, version: 02} (mandatory: True)
1457 changegroup -- {nbchanges: 1, version: 02} (mandatory: True)
1458 e008cf2834908e5d6b0f792a9d4b0e2272260fb8
1458 e008cf2834908e5d6b0f792a9d4b0e2272260fb8
1459 cache:rev-branch-cache -- {} (mandatory: False)
1459 cache:rev-branch-cache -- {} (mandatory: False)
1460 phase-heads -- {} (mandatory: True)
1460 phase-heads -- {} (mandatory: True)
1461 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 draft
1461 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 draft
1462
1462
1463 #if repobundlerepo
1463 #if repobundlerepo
1464 $ hg pull .hg/strip-backup/e008cf283490-*-backup.hg
1464 $ hg pull .hg/strip-backup/e008cf283490-*-backup.hg
1465 pulling from .hg/strip-backup/e008cf283490-ede36964-backup.hg
1465 pulling from .hg/strip-backup/e008cf283490-ede36964-backup.hg
1466 searching for changes
1466 searching for changes
1467 no changes found
1467 no changes found
1468 #endif
1468 #endif
1469 $ hg debugobsolete
1469 $ hg debugobsolete
1470 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1470 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1471 $ hg log -G
1471 $ hg log -G
1472 @ 2:b0551702f918 (draft) [tip ] 2
1472 @ 2:b0551702f918 (draft) [tip ] 2
1473 |
1473 |
1474 o 1:e016b03fd86f (draft) [ ] 1
1474 o 1:e016b03fd86f (draft) [ ] 1
1475 |
1475 |
1476 o 0:a78f55e5508c (draft) [ ] 0
1476 o 0:a78f55e5508c (draft) [ ] 0
1477
1477
1478 $ hg log -G --hidden
1478 $ hg log -G --hidden
1479 @ 2:b0551702f918 (draft) [tip ] 2
1479 @ 2:b0551702f918 (draft) [tip ] 2
1480 |
1480 |
1481 o 1:e016b03fd86f (draft) [ ] 1
1481 o 1:e016b03fd86f (draft) [ ] 1
1482 |
1482 |
1483 o 0:a78f55e5508c (draft) [ ] 0
1483 o 0:a78f55e5508c (draft) [ ] 0
1484
1484
1485
1485
1486 Testing that strip remove markers:
1486 Testing that strip remove markers:
1487
1487
1488 $ hg strip -r 1 --config extensions.strip=
1488 $ hg strip -r 1 --config extensions.strip=
1489 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1489 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1490 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e016b03fd86f-65ede734-backup.hg
1490 saved backup bundle to $TESTTMP/tmpe/issue4845/.hg/strip-backup/e016b03fd86f-65ede734-backup.hg
1491 $ hg debugobsolete
1491 $ hg debugobsolete
1492 $ hg log -G
1492 $ hg log -G
1493 @ 0:a78f55e5508c (draft) [tip ] 0
1493 @ 0:a78f55e5508c (draft) [tip ] 0
1494
1494
1495 $ hg log -G --hidden
1495 $ hg log -G --hidden
1496 @ 0:a78f55e5508c (draft) [tip ] 0
1496 @ 0:a78f55e5508c (draft) [tip ] 0
1497
1497
1498 $ hg debugbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1498 $ hg debugbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1499 Stream params: {Compression: BZ}
1499 Stream params: {Compression: BZ}
1500 changegroup -- {nbchanges: 2, version: 02} (mandatory: True)
1500 changegroup -- {nbchanges: 2, version: 02} (mandatory: True)
1501 e016b03fd86fcccc54817d120b90b751aaf367d6
1501 e016b03fd86fcccc54817d120b90b751aaf367d6
1502 b0551702f918510f01ae838ab03a463054c67b46
1502 b0551702f918510f01ae838ab03a463054c67b46
1503 cache:rev-branch-cache -- {} (mandatory: False)
1503 cache:rev-branch-cache -- {} (mandatory: False)
1504 obsmarkers -- {} (mandatory: True)
1504 obsmarkers -- {} (mandatory: True)
1505 version: 1 (92 bytes)
1505 version: 1 (92 bytes)
1506 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1506 e008cf2834908e5d6b0f792a9d4b0e2272260fb8 b0551702f918510f01ae838ab03a463054c67b46 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'}
1507 phase-heads -- {} (mandatory: True)
1507 phase-heads -- {} (mandatory: True)
1508 b0551702f918510f01ae838ab03a463054c67b46 draft
1508 b0551702f918510f01ae838ab03a463054c67b46 draft
1509
1509
1510 $ hg unbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1510 $ hg unbundle .hg/strip-backup/e016b03fd86f-*-backup.hg
1511 adding changesets
1511 adding changesets
1512 adding manifests
1512 adding manifests
1513 adding file changes
1513 adding file changes
1514 added 2 changesets with 2 changes to 2 files
1514 added 2 changesets with 2 changes to 2 files
1515 1 new obsolescence markers
1515 1 new obsolescence markers
1516 new changesets e016b03fd86f:b0551702f918 (2 drafts)
1516 new changesets e016b03fd86f:b0551702f918 (2 drafts)
1517 (run 'hg update' to get a working copy)
1517 (run 'hg update' to get a working copy)
1518 $ hg debugobsolete | sort
1518 $ hg debugobsolete | sort
1519 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'}
1520 $ hg log -G
1520 $ hg log -G
1521 o 2:b0551702f918 (draft) [tip ] 2
1521 o 2:b0551702f918 (draft) [tip ] 2
1522 |
1522 |
1523 o 1:e016b03fd86f (draft) [ ] 1
1523 o 1:e016b03fd86f (draft) [ ] 1
1524 |
1524 |
1525 @ 0:a78f55e5508c (draft) [ ] 0
1525 @ 0:a78f55e5508c (draft) [ ] 0
1526
1526
1527 $ hg log -G --hidden
1527 $ hg log -G --hidden
1528 o 2:b0551702f918 (draft) [tip ] 2
1528 o 2:b0551702f918 (draft) [tip ] 2
1529 |
1529 |
1530 o 1:e016b03fd86f (draft) [ ] 1
1530 o 1:e016b03fd86f (draft) [ ] 1
1531 |
1531 |
1532 @ 0:a78f55e5508c (draft) [ ] 0
1532 @ 0:a78f55e5508c (draft) [ ] 0
1533
1533
1534 Test that 'hg debugobsolete --index --rev' can show indices of obsmarkers when
1534 Test that 'hg debugobsolete --index --rev' can show indices of obsmarkers when
1535 only a subset of those are displayed (because of --rev option)
1535 only a subset of those are displayed (because of --rev option)
1536 $ hg init doindexrev
1536 $ hg init doindexrev
1537 $ cd doindexrev
1537 $ cd doindexrev
1538 $ echo a > a
1538 $ echo a > a
1539 $ hg ci -Am a
1539 $ hg ci -Am a
1540 adding a
1540 adding a
1541 $ hg ci --amend -m aa
1541 $ hg ci --amend -m aa
1542 $ echo b > b
1542 $ echo b > b
1543 $ hg ci -Am b
1543 $ hg ci -Am b
1544 adding b
1544 adding b
1545 $ hg ci --amend -m bb
1545 $ hg ci --amend -m bb
1546 $ echo c > c
1546 $ echo c > c
1547 $ hg ci -Am c
1547 $ hg ci -Am c
1548 adding c
1548 adding c
1549 $ hg ci --amend -m cc
1549 $ hg ci --amend -m cc
1550 $ echo d > d
1550 $ echo d > d
1551 $ hg ci -Am d
1551 $ hg ci -Am d
1552 adding d
1552 adding d
1553 $ hg ci --amend -m dd --config experimental.evolution.track-operation=1
1553 $ hg ci --amend -m dd --config experimental.evolution.track-operation=1
1554 $ hg debugobsolete --index --rev "3+7"
1554 $ hg debugobsolete --index --rev "3+7"
1555 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1555 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1556 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1556 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1557 $ hg debugobsolete --index --rev "3+7" -Tjson
1557 $ hg debugobsolete --index --rev "3+7" -Tjson
1558 [
1558 [
1559 {
1559 {
1560 "date": [0, 0],
1560 "date": [0, 0],
1561 "flag": 0,
1561 "flag": 0,
1562 "index": 1,
1562 "index": 1,
1563 "metadata": {"ef1": "1", "operation": "amend", "user": "test"},
1563 "metadata": {"ef1": "1", "operation": "amend", "user": "test"},
1564 "prednode": "6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1",
1564 "prednode": "6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1",
1565 "succnodes": ["d27fb9b066076fd921277a4b9e8b9cb48c95bc6a"]
1565 "succnodes": ["d27fb9b066076fd921277a4b9e8b9cb48c95bc6a"]
1566 },
1566 },
1567 {
1567 {
1568 "date": [0, 0],
1568 "date": [0, 0],
1569 "flag": 0,
1569 "flag": 0,
1570 "index": 3,
1570 "index": 3,
1571 "metadata": {"ef1": "1", "operation": "amend", "user": "test"},
1571 "metadata": {"ef1": "1", "operation": "amend", "user": "test"},
1572 "prednode": "4715cf767440ed891755448016c2b8cf70760c30",
1572 "prednode": "4715cf767440ed891755448016c2b8cf70760c30",
1573 "succnodes": ["7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d"]
1573 "succnodes": ["7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d"]
1574 }
1574 }
1575 ]
1575 ]
1576
1576
1577 Test the --delete option of debugobsolete command
1577 Test the --delete option of debugobsolete command
1578 $ hg debugobsolete --index
1578 $ hg debugobsolete --index
1579 0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1579 0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1580 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1580 1 6fdef60fcbabbd3d50e9b9cbc2a240724b91a5e1 d27fb9b066076fd921277a4b9e8b9cb48c95bc6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1581 2 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1581 2 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1582 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1582 3 4715cf767440ed891755448016c2b8cf70760c30 7ae79c5d60f049c7b0dd02f5f25b9d60aaf7b36d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1583 $ hg debugobsolete --delete 1 --delete 3
1583 $ hg debugobsolete --delete 1 --delete 3
1584 deleted 2 obsolescence markers
1584 deleted 2 obsolescence markers
1585 $ hg debugobsolete
1585 $ hg debugobsolete
1586 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1586 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b f9bd49731b0b175e42992a3c8fa6c678b2bc11f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1587 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1587 1ab51af8f9b41ef8c7f6f3312d4706d870b1fb74 29346082e4a9e27042b62d2da0e2de211c027621 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1588
1588
1589 Test adding changeset after obsmarkers affecting it
1589 Test adding changeset after obsmarkers affecting it
1590 (eg: during pull, or unbundle)
1590 (eg: during pull, or unbundle)
1591
1591
1592 $ mkcommit e
1592 $ mkcommit e
1593 $ hg bundle -r . --base .~1 ../bundle-2.hg
1593 $ hg bundle -r . --base .~1 ../bundle-2.hg
1594 1 changesets found
1594 1 changesets found
1595 $ getid .
1595 $ getid .
1596 $ hg --config extensions.strip= strip -r .
1596 $ hg --config extensions.strip= strip -r .
1597 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1597 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1598 saved backup bundle to $TESTTMP/tmpe/issue4845/doindexrev/.hg/strip-backup/9bc153528424-ee80edd4-backup.hg
1598 saved backup bundle to $TESTTMP/tmpe/issue4845/doindexrev/.hg/strip-backup/9bc153528424-ee80edd4-backup.hg
1599 $ hg debugobsolete 9bc153528424ea266d13e57f9ff0d799dfe61e4b
1599 $ hg debugobsolete 9bc153528424ea266d13e57f9ff0d799dfe61e4b
1600 $ hg unbundle ../bundle-2.hg
1600 $ hg unbundle ../bundle-2.hg
1601 adding changesets
1601 adding changesets
1602 adding manifests
1602 adding manifests
1603 adding file changes
1603 adding file changes
1604 added 1 changesets with 1 changes to 1 files
1604 added 1 changesets with 1 changes to 1 files
1605 (1 other changesets obsolete on arrival)
1605 (run 'hg update' to get a working copy)
1606 (run 'hg update' to get a working copy)
1606 $ hg log -G
1607 $ hg log -G
1607 @ 7:7ae79c5d60f0 (draft) [tip ] dd
1608 @ 7:7ae79c5d60f0 (draft) [tip ] dd
1608 |
1609 |
1609 | o 6:4715cf767440 (draft) [ ] d
1610 | o 6:4715cf767440 (draft) [ ] d
1610 |/
1611 |/
1611 o 5:29346082e4a9 (draft) [ ] cc
1612 o 5:29346082e4a9 (draft) [ ] cc
1612 |
1613 |
1613 o 3:d27fb9b06607 (draft) [ ] bb
1614 o 3:d27fb9b06607 (draft) [ ] bb
1614 |
1615 |
1615 | o 2:6fdef60fcbab (draft) [ ] b
1616 | o 2:6fdef60fcbab (draft) [ ] b
1616 |/
1617 |/
1617 o 1:f9bd49731b0b (draft) [ ] aa
1618 o 1:f9bd49731b0b (draft) [ ] aa
1618
1619
1619
1620
1620 $ cd ..
1621 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now