# HG changeset patch # User Pierre-Yves David # Date 1454583695 0 # Node ID 3c7f98753e3760c781d9f5f931b8ff366d30a5a1 # Parent dcf145d0ce21beda34ccd57ef8aed7bcb7f1bc44 tests: register expected difference for Mercurial 3.4 diff -r dcf145d0ce21 -r 3c7f98753e37 hgext/directaccess.py --- a/hgext/directaccess.py Thu Feb 04 10:24:26 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,192 +0,0 @@ -""" This extension provides direct access -It is the ability to refer and access hidden sha in commands provided that you -know their value. -For example hg log -r xxx where xxx is a commit has should work whether xxx is -hidden or not as we assume that the user knows what he is doing when referring -to xxx. -""" -from mercurial import extensions -from mercurial import cmdutil -from mercurial import repoview -from mercurial import branchmap -from mercurial import revset -from mercurial import error -from mercurial import commands -from mercurial import hg -from mercurial import util -from mercurial.i18n import _ - -cmdtable = {} -command = cmdutil.command(cmdtable) - -# By default, all the commands have directaccess with warnings -# List of commands that have no directaccess and directaccess with no warning -directaccesslevel = [ - # Format: - # ('nowarning', 'evolve', 'prune'), - # means: no directaccess warning, for the command in evolve named prune - # - # ('error', None, 'serve'), - # means: no directaccess for the command in core named serve - # - # The list is ordered alphabetically by command names, starting with all - # the commands in core then all the commands in the extensions - # - # The general guideline is: - # - remove directaccess warnings for read only commands - # - no direct access for commands with consequences outside of the repo - # - leave directaccess warnings for all the other commands - # - ('nowarning', None, 'annotate'), - ('nowarning', None, 'archive'), - ('nowarning', None, 'bisect'), - ('nowarning', None, 'bookmarks'), - ('nowarning', None, 'bundle'), - ('nowarning', None, 'cat'), - ('nowarning', None, 'diff'), - ('nowarning', None, 'export'), - ('nowarning', None, 'identify'), - ('nowarning', None, 'incoming'), - ('nowarning', None, 'log'), - ('nowarning', None, 'manifest'), - ('error', None, 'outgoing'), # confusing if push errors and not outgoing - ('error', None, 'push'), # destructive - ('nowarning', None, 'revert'), - ('error', None, 'serve'), - ('nowarning', None, 'tags'), - ('nowarning', None, 'unbundle'), - ('nowarning', None, 'update'), -] - -def reposetup(ui, repo): - repo._explicitaccess = set() - -def _computehidden(repo): - hidden = repoview.filterrevs(repo, 'visible') - cl = repo.changelog - dynamic = hidden & repo._explicitaccess - if dynamic: - blocked = cl.ancestors(dynamic, inclusive=True) - hidden = frozenset(r for r in hidden if r not in blocked) - return hidden - -def setupdirectaccess(): - """ Add two new filtername that behave like visible to provide direct access - and direct access with warning. Wraps the commands to setup direct access """ - repoview.filtertable.update({'visible-directaccess-nowarn': _computehidden}) - repoview.filtertable.update({'visible-directaccess-warn': _computehidden}) - branchmap.subsettable['visible-directaccess-nowarn'] = 'visible' - branchmap.subsettable['visible-directaccess-warn'] = 'visible' - - for warn, ext, cmd in directaccesslevel: - try: - cmdtable = extensions.find(ext).cmdtable if ext else commands.table - wrapper = wrapwitherror if warn == 'error' else wrapwithoutwarning - extensions.wrapcommand(cmdtable, cmd, wrapper) - except (error.UnknownCommand, KeyError): - pass - -def wrapwitherror(orig, ui, repo, *args, **kwargs): - if repo and repo.filtername == 'visible-directaccess-warn': - repo = repo.filtered('visible') - return orig(ui, repo, *args, **kwargs) - -def wrapwithoutwarning(orig, ui, repo, *args, **kwargs): - if repo and repo.filtername == 'visible-directaccess-warn': - repo = repo.filtered("visible-directaccess-nowarn") - return orig(ui, repo, *args, **kwargs) - -def uisetup(ui): - """ Change ordering of extensions to ensure that directaccess extsetup comes - after the one of the extensions in the loadsafter list """ - loadsafter = ui.configlist('directaccess','loadsafter') - order = list(extensions._order) - directaccesidx = order.index('directaccess') - - # The min idx for directaccess to load after all the extensions in loadafter - minidxdirectaccess = directaccesidx - - for ext in loadsafter: - try: - minidxdirectaccess = max(minidxdirectaccess, order.index(ext)) - except ValueError: - pass # extension not loaded - - if minidxdirectaccess > directaccesidx: - order.insert(minidxdirectaccess + 1, 'directaccess') - order.remove('directaccess') - extensions._order = order - -def _repository(orig, *args, **kwargs): - """Make visible-directaccess-warn the default filter for new repos""" - repo = orig(*args, **kwargs) - return repo.filtered("visible-directaccess-warn") - -def extsetup(ui): - extensions.wrapfunction(revset, 'posttreebuilthook', _posttreebuilthook) - extensions.wrapfunction(hg, 'repository', _repository) - setupdirectaccess() - -hashre = util.re.compile('[0-9a-fA-F]{1,40}') - -_listtuple = ('symbol', '_list') - -def gethashsymbols(tree): - # Returns the list of symbols of the tree that look like hashes - # for example for the revset 3::abe3ff it will return ('abe3ff') - if not tree: - return [] - - if len(tree) == 2 and tree[0] == "symbol": - try: - int(tree[1]) - return [] - except ValueError as e: - if hashre.match(tree[1]): - return [tree[1]] - return [] - elif tree[0] == "func" and tree[1] == _listtuple: - # the optimiser will group sequence of hash request - result = [] - for entry in tree[2][1].split('\0'): - if hashre.match(entry): - result.append(entry) - return result - elif len(tree) >= 3: - results = [] - for subtree in tree[1:]: - results += gethashsymbols(subtree) - return results - else: - return [] - -def _posttreebuilthook(orig, tree, repo): - # This is use to enabled direct hash access - # We extract the symbols that look like hashes and add them to the - # explicitaccess set - orig(tree, repo) - filternm = "" - if repo is not None: - filternm = repo.filtername - if filternm is not None and filternm.startswith('visible-directaccess'): - prelength = len(repo._explicitaccess) - accessbefore = set(repo._explicitaccess) - repo.symbols = gethashsymbols(tree) - cl = repo.unfiltered().changelog - for node in repo.symbols: - try: - node = cl._partialmatch(node) - except error.LookupError: - node = None - if node is not None: - rev = cl.rev(node) - if rev not in repo.changelog: - repo._explicitaccess.add(rev) - if prelength != len(repo._explicitaccess): - if repo.filtername != 'visible-directaccess-nowarn': - unhiddencommits = repo._explicitaccess - accessbefore - repo.ui.warn( _("Warning: accessing hidden changesets %s " - "for write operation\n") % - (",".join([str(repo.unfiltered()[l]) - for l in unhiddencommits]))) - repo.invalidatevolatilesets() diff -r dcf145d0ce21 -r 3c7f98753e37 hgext/inhibit.py --- a/hgext/inhibit.py Thu Feb 04 10:24:26 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,244 +0,0 @@ -"""reduce the changesets evolution feature scope for early and noob friendly ui - -the full scale changeset evolution have some massive bleeding edge and it is -very easy for people not very intimate with the concept to end up in intricate -situation. in order to get some of the benefit sooner, this extension is -disabling some of the less polished aspect of evolution. it should gradually -get thinner and thinner as changeset evolution will get more polished. this -extension is only recommended for large scale organisations. individual user -should probably stick on using evolution in its current state, understand its -concept and provide feedback - -This extension provides the ability to "inhibit" obsolescence markers. obsolete -revision can be cheaply brought back to life that way. -However as the inhibitor are not fitting in an append only model, this is -incompatible with sharing mutable history. -""" -from mercurial import localrepo -from mercurial import obsolete -from mercurial import extensions -from mercurial import cmdutil -from mercurial import error -from mercurial import scmutil -from mercurial import commands -from mercurial import lock as lockmod -from mercurial import bookmarks -from mercurial import util -from mercurial.i18n import _ - -cmdtable = {} -command = cmdutil.command(cmdtable) - -def _inhibitenabled(repo): - return util.safehasattr(repo, '_obsinhibit') - -def reposetup(ui, repo): - - class obsinhibitedrepo(repo.__class__): - - @localrepo.storecache('obsinhibit') - def _obsinhibit(self): - # XXX we should make sure it is invalidated by transaction failure - obsinhibit = set() - raw = self.svfs.tryread('obsinhibit') - for i in xrange(0, len(raw), 20): - obsinhibit.add(raw[i:i+20]) - return obsinhibit - - def commit(self, *args, **kwargs): - newnode = super(obsinhibitedrepo, self).commit(*args, **kwargs) - if newnode is not None: - _inhibitmarkers(repo, [newnode]) - return newnode - - repo.__class__ = obsinhibitedrepo - -def _update(orig, ui, repo, *args, **kwargs): - """ - When moving to a commit we want to inhibit any obsolete commit affecting - the changeset we are updating to. In other words we don't want any visible - commit to be obsolete. - """ - wlock = None - try: - # Evolve is running a hook on lock release to display a warning message - # if the workind dir's parent is obsolete. - # We take the lock here to make sure that we inhibit the parent before - # that hook get a chance to run. - wlock = repo.wlock() - res = orig(ui, repo, *args, **kwargs) - newhead = repo['.'].node() - _inhibitmarkers(repo, [newhead]) - return res - finally: - lockmod.release(wlock) - -def _bookmarkchanged(orig, bkmstoreinst, *args, **kwargs): - """ Add inhibition markers to every obsolete bookmarks """ - repo = bkmstoreinst._repo - bkmstorenodes = [repo[v].node() for v in bkmstoreinst.values()] - _inhibitmarkers(repo, bkmstorenodes) - return orig(bkmstoreinst, *args, **kwargs) - -def _bookmark(orig, ui, repo, *bookmarks, **opts): - """ Add a -D option to the bookmark command, map it to prune -B """ - haspruneopt = opts.get('prune', False) - if not haspruneopt: - return orig(ui, repo, *bookmarks, **opts) - - # Call prune -B - evolve = extensions.find('evolve') - optsdict = { - 'new': [], - 'succ': [], - 'rev': [], - 'bookmark': bookmarks[0], - 'keep': None, - 'biject': False, - } - evolve.cmdprune(ui, repo, **optsdict) - -# obsolescence inhibitor -######################## - -def _schedulewrite(tr, obsinhibit): - """Make sure on disk content will be updated on transaction commit""" - def writer(fp): - """Serialize the inhibited list to disk. - """ - raw = ''.join(obsinhibit) - fp.write(raw) - tr.addfilegenerator('obsinhibit', ('obsinhibit',), writer) - tr.hookargs['obs_inbihited'] = '1' - -def _filterpublic(repo, nodes): - """filter out inhibitor on public changeset - - Public changesets are already immune to obsolescence""" - getrev = repo.changelog.nodemap.get - getphase = repo._phasecache.phase - return (n for n in repo._obsinhibit - if getrev(n) is not None and getphase(repo, getrev(n))) - -def _inhibitmarkers(repo, nodes): - """add marker inhibitor for all obsolete revision under - - Content of and all mutable ancestors are considered. Marker for - obsolete revision only are created. - """ - if not _inhibitenabled(repo): - return - - newinhibit = repo.set('::%ln and obsolete()', nodes) - if newinhibit: - lock = tr = None - try: - lock = repo.lock() - tr = repo.transaction('obsinhibit') - repo._obsinhibit.update(c.node() for c in newinhibit) - _schedulewrite(tr, _filterpublic(repo, repo._obsinhibit)) - repo.invalidatevolatilesets() - tr.close() - finally: - lockmod.release(tr, lock) - -def _deinhibitmarkers(repo, nodes): - """lift obsolescence inhibition on a set of nodes - - This will be triggered when inhibited nodes received new obsolescence - markers. Otherwise the new obsolescence markers would also be inhibited. - """ - if not _inhibitenabled(repo): - return - - deinhibited = repo._obsinhibit & set(nodes) - if deinhibited: - tr = repo.transaction('obsinhibit') - try: - repo._obsinhibit -= deinhibited - _schedulewrite(tr, _filterpublic(repo, repo._obsinhibit)) - repo.invalidatevolatilesets() - tr.close() - finally: - tr.release() - -def _createmarkers(orig, repo, relations, flag=0, date=None, metadata=None): - """wrap markers create to make sure we de-inhibit target nodes""" - # wrapping transactio to unify the one in each function - lock = tr = None - try: - lock = repo.lock() - tr = repo.transaction('add-obsolescence-marker') - orig(repo, relations, flag, date, metadata) - precs = (r[0].node() for r in relations) - _deinhibitmarkers(repo, precs) - tr.close() - finally: - lockmod.release(tr, lock) - -def transactioncallback(orig, repo, desc, *args, **kwargs): - """ Wrap localrepo.transaction to inhibit new obsolete changes """ - def inhibitposttransaction(transaction): - # At the end of the transaction we catch all the new visible and - # obsolete commit to inhibit them - visibleobsolete = repo.revs('obsolete() - hidden()') - ignoreset = set(getattr(repo, '_rebaseset', [])) - visibleobsolete = list(r for r in visibleobsolete if r not in ignoreset) - if visibleobsolete: - _inhibitmarkers(repo, [repo[r].node() for r in visibleobsolete]) - transaction = orig(repo, desc, *args, **kwargs) - if desc != 'strip' and _inhibitenabled(repo): - transaction.addpostclose('inhibitposttransaction', inhibitposttransaction) - return transaction - -def extsetup(ui): - # lets wrap the computation of the obsolete set - # We apply inhibition there - obsfunc = obsolete.cachefuncs['obsolete'] - def _computeobsoleteset(repo): - """remove any inhibited nodes from the obsolete set - - This will trickle down to other part of mercurial (hidden, log, etc)""" - obs = obsfunc(repo) - if _inhibitenabled(repo): - getrev = repo.changelog.nodemap.get - for n in repo._obsinhibit: - obs.discard(getrev(n)) - return obs - try: - extensions.find('directaccess') - except KeyError: - errormsg = _('cannot use inhibit without the direct access extension\n') - hint = _("(please enable it or inhibit won\'t work)\n") - ui.warn(errormsg) - ui.warn(hint) - return - - # Wrapping this to inhibit obsolete revs resulting from a transaction - extensions.wrapfunction(localrepo.localrepository, - 'transaction', transactioncallback) - - obsolete.cachefuncs['obsolete'] = _computeobsoleteset - # wrap create marker to make it able to lift the inhibition - extensions.wrapfunction(obsolete, 'createmarkers', _createmarkers) - # drop divergence computation since it is incompatible with "light revive" - obsolete.cachefuncs['divergent'] = lambda repo: set() - # drop bumped computation since it is incompatible with "light revive" - obsolete.cachefuncs['bumped'] = lambda repo: set() - # wrap update to make sure that no obsolete commit is visible after an - # update - extensions.wrapcommand(commands.table, 'update', _update) - # There are two ways to save bookmark changes during a transation, we - # wrap both to add inhibition markers. - extensions.wrapfunction(bookmarks.bmstore, 'recordchange', _bookmarkchanged) - extensions.wrapfunction(bookmarks.bmstore, 'write', _bookmarkchanged) - # Add bookmark -D option - entry = extensions.wrapcommand(commands.table, 'bookmark', _bookmark) - entry[1].append(('D','prune',None, - _('delete the bookmark and prune the commits underneath'))) - -@command('debugobsinhibit', [], '') -def cmddebugobsinhibit(ui, repo, *revs): - """inhibit obsolescence markers effect on a set of revs""" - nodes = (repo[r].node() for r in scmutil.revrange(repo, revs)) - _inhibitmarkers(repo, nodes) diff -r dcf145d0ce21 -r 3c7f98753e37 tests/test-amend.t --- a/tests/test-amend.t Thu Feb 04 10:24:26 2016 +0000 +++ b/tests/test-amend.t Thu Feb 04 11:01:35 2016 +0000 @@ -115,7 +115,6 @@ branch: foo commit: 1 unknown (clean) update: (current) - phases: 3 draft Check the help $ hg amend -h diff -r dcf145d0ce21 -r 3c7f98753e37 tests/test-corrupt.t --- a/tests/test-corrupt.t Thu Feb 04 10:24:26 2016 +0000 +++ b/tests/test-corrupt.t Thu Feb 04 11:01:35 2016 +0000 @@ -110,7 +110,8 @@ adding manifests adding file changes added 1 changesets with 2 changes to 2 files - 2 new obsolescence markers + pushing 2 obsolescence markers (161 bytes) + 2 obsolescence markers added $ hg -R ../other verify checking changesets checking manifests diff -r dcf145d0ce21 -r 3c7f98753e37 tests/test-evolve-bumped.t --- a/tests/test-evolve-bumped.t Thu Feb 04 10:24:26 2016 +0000 +++ b/tests/test-evolve-bumped.t Thu Feb 04 11:01:35 2016 +0000 @@ -49,6 +49,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files + pull obsolescence markers (run 'hg update' to get a working copy) $ hg log -r 'draft()' 1:4d1169d82e47@default(draft) modify a @@ -67,6 +68,7 @@ pulling from ../public searching for changes no changes found + pull obsolescence markers 1 new bumped changesets $ hg evolve -a -A --bumped diff -r dcf145d0ce21 -r 3c7f98753e37 tests/test-evolve.t --- a/tests/test-evolve.t Thu Feb 04 10:24:26 2016 +0000 +++ b/tests/test-evolve.t Thu Feb 04 11:01:35 2016 +0000 @@ -474,6 +474,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files + pull obsolescence markers $ cd alpha $ cat << EOF > A @@ -530,7 +531,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - 2 new obsolescence markers + pull obsolescence markers + 2 obsolescence markers added (run 'hg update' to get a working copy) $ hg up 2 files updated, 0 files merged, 0 files removed, 0 files unresolved @@ -592,7 +594,8 @@ $ hg graft -O 7 grafting 7:a5bfd90a2f29 "conflict" (tip) merging 1 - warning: conflicts while merging 1! (edit, then use 'hg resolve --mark') + warning: conflicts during merge. + merging 1 incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts, can't continue (use hg resolve and hg graft --continue) [255] diff -r dcf145d0ce21 -r 3c7f98753e37 tests/test-inhibit.t --- a/tests/test-inhibit.t Thu Feb 04 10:24:26 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,789 +0,0 @@ - $ cat >> $HGRCPATH < [ui] - > logtemplate = {rev}:{node|short} {desc}\n - > [experimental] - > prunestrip=True - > evolution=createmarkers - > [extensions] - > rebase= - > strip= - > EOF - $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH - $ echo "directaccess=$(echo $(dirname $TESTDIR))/hgext/directaccess.py" >> $HGRCPATH - $ echo "inhibit=$(echo $(dirname $TESTDIR))/hgext/inhibit.py" >> $HGRCPATH - $ mkcommit() { - > echo "$1" > "$1" - > hg add "$1" - > hg ci -m "add $1" - > } - - $ hg init inhibit - $ cd inhibit - $ mkcommit cA - $ mkcommit cB - $ mkcommit cC - $ mkcommit cD - $ hg up 'desc(cA)' - 0 files updated, 0 files merged, 3 files removed, 0 files unresolved - $ mkcommit cE - created new head - $ mkcommit cG - $ mkcommit cH - $ mkcommit cJ - $ hg log -G - @ 7:18214586bf78 add cJ - | - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - | o 3:2db36d8066ff add cD - | | - | o 2:7df62a38b9bf add cC - | | - | o 1:02bcbc3f6e56 add cB - |/ - o 0:54ccbc537fc2 add cA - - -plain prune - - $ hg strip 1:: - 3 changesets pruned - $ hg log -G - @ 7:18214586bf78 add cJ - | - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - - $ hg debugobsinhibit --hidden 1:: - $ hg log -G - @ 7:18214586bf78 add cJ - | - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - | o 3:2db36d8066ff add cD - | | - | o 2:7df62a38b9bf add cC - | | - | o 1:02bcbc3f6e56 add cB - |/ - o 0:54ccbc537fc2 add cA - - $ hg strip --hidden 1:: - 3 changesets pruned - $ hg log -G - @ 7:18214586bf78 add cJ - | - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - - -after amend - - $ echo babar > cJ - $ hg commit --amend - $ hg log -G - @ 9:55c73a90e4b4 add cJ - | - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - - $ hg debugobsinhibit --hidden 18214586bf78 - $ hg log -G - @ 9:55c73a90e4b4 add cJ - | - | o 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - - -and no divergence - - $ hg summary - parent: 9:55c73a90e4b4 tip - add cJ - branch: default - commit: (clean) - update: 1 new changesets, 2 branch heads (merge) - phases: 6 draft - -check public revision got cleared -(when adding the second inhibitor, the first one is removed because it is public) - - $ wc -m .hg/store/obsinhibit | sed -e 's/^[ \t]*//' - 20 .hg/store/obsinhibit - $ hg strip 7 - 1 changesets pruned - $ hg debugobsinhibit --hidden 18214586bf78 - $ wc -m .hg/store/obsinhibit | sed -e 's/^[ \t]*//' - 20 .hg/store/obsinhibit - $ hg log -G - @ 9:55c73a90e4b4 add cJ - | - | o 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - - $ hg phase --public 7 - $ hg strip 9 - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at cf5c4f4554ce - 1 changesets pruned - $ hg log -G - o 7:18214586bf78 add cJ - | - @ 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - - $ hg debugobsinhibit --hidden 55c73a90e4b4 - $ wc -m .hg/store/obsinhibit | sed -e 's/^[ \t]*//' - 20 .hg/store/obsinhibit - $ hg log -G - o 9:55c73a90e4b4 add cJ - | - | o 7:18214586bf78 add cJ - |/ - @ 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - -Update should inhibit all related unstable commits - - $ hg update 2 --hidden - 2 files updated, 0 files merged, 3 files removed, 0 files unresolved - $ hg log -G - o 9:55c73a90e4b4 add cJ - | - | o 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - | @ 2:7df62a38b9bf add cC - | | - | o 1:02bcbc3f6e56 add cB - |/ - o 0:54ccbc537fc2 add cA - - - $ hg update 9 - 4 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ hg log -G - @ 9:55c73a90e4b4 add cJ - | - | o 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - | o 2:7df62a38b9bf add cC - | | - | o 1:02bcbc3f6e56 add cB - |/ - o 0:54ccbc537fc2 add cA - - $ hg strip --hidden 1:: - 3 changesets pruned - $ hg log -G - @ 9:55c73a90e4b4 add cJ - | - | o 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - - -Bookmark should inhibit all related unstable commits - $ hg bookmark -r 2 book1 --hidden - $ hg log -G - @ 9:55c73a90e4b4 add cJ - | - | o 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - | o 2:7df62a38b9bf add cC - | | - | o 1:02bcbc3f6e56 add cB - |/ - o 0:54ccbc537fc2 add cA - - -Removing a bookmark with bookmark -D should prune the changes underneath -that are not reachable from another bookmark or head - - $ hg bookmark -r 1 book2 - $ hg bookmark -D book1 --config experimental.evolution=createmarkers #--config to make sure prune is not registered as a command. - bookmark 'book1' deleted - 1 changesets pruned - $ hg log -G - @ 9:55c73a90e4b4 add cJ - | - | o 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - | o 1:02bcbc3f6e56 add cB - |/ - o 0:54ccbc537fc2 add cA - - $ hg bookmark -D book2 - bookmark 'book2' deleted - 1 changesets pruned - $ hg log -G - @ 9:55c73a90e4b4 add cJ - | - | o 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - -Test that direct access make changesets visible - - $ hg export 2db36d8066ff 02bcbc3f6e56 - # HG changeset patch - # User test - # Date 0 0 - # Thu Jan 01 00:00:00 1970 +0000 - # Node ID 2db36d8066ff50e8be3d3e6c2da1ebc0a8381d82 - # Parent 7df62a38b9bf9daf968de235043ba88a8ef43393 - add cD - - diff -r 7df62a38b9bf -r 2db36d8066ff cD - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/cD Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +cD - # HG changeset patch - # User test - # Date 0 0 - # Thu Jan 01 00:00:00 1970 +0000 - # Node ID 02bcbc3f6e56fb2928efec2c6e24472720bf5511 - # Parent 54ccbc537fc2d6845a5d61337c1cfb80d1d2815e - add cB - - diff -r 54ccbc537fc2 -r 02bcbc3f6e56 cB - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/cB Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +cB - -But only with hash - - $ hg export 2db36d8066ff:: - # HG changeset patch - # User test - # Date 0 0 - # Thu Jan 01 00:00:00 1970 +0000 - # Node ID 2db36d8066ff50e8be3d3e6c2da1ebc0a8381d82 - # Parent 7df62a38b9bf9daf968de235043ba88a8ef43393 - add cD - - diff -r 7df62a38b9bf -r 2db36d8066ff cD - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/cD Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +cD - - $ hg export 1 3 - abort: hidden revision '1'! - (use --hidden to access hidden revisions) - [255] - - -Test directaccess in a larger revset - - $ hg log -r '. + .^ + 2db36d8066ff' -T '{node|short}\n' - 55c73a90e4b4 - cf5c4f4554ce - 2db36d8066ff - -With severals hidden sha, rebase of one hidden stack onto another one: - $ hg update -C 0 - 0 files updated, 0 files merged, 4 files removed, 0 files unresolved - $ mkcommit cK - created new head - $ mkcommit cL - $ hg update -C 9 - 4 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ hg log -G - o 11:53a94305e133 add cL - | - o 10:ad78ff7d621f add cK - | - | @ 9:55c73a90e4b4 add cJ - | | - | | o 7:18214586bf78 add cJ - | |/ - | o 6:cf5c4f4554ce add cH - | | - | o 5:5419eb264a33 add cG - | | - | o 4:98065434e5c6 add cE - |/ - o 0:54ccbc537fc2 add cA - - $ hg strip --hidden 10: - 2 changesets pruned - $ hg log -G - @ 9:55c73a90e4b4 add cJ - | - | o 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - - $ hg rebase -s 10 -d 3 - abort: hidden revision '3'! - (use --hidden to access hidden revisions) - [255] - $ hg rebase -r ad78ff7d621f -r 53a94305e133 -d 2db36d8066ff - Warning: accessing hidden changesets 2db36d8066ff for write operation - Warning: accessing hidden changesets ad78ff7d621f,53a94305e133 for write operation - rebasing 10:ad78ff7d621f "add cK" - rebasing 11:53a94305e133 "add cL" - $ hg log -G - o 13:2f7b7704d714 add cL - | - o 12:fe1634cbe235 add cK - | - | @ 9:55c73a90e4b4 add cJ - | | - | | o 7:18214586bf78 add cJ - | |/ - | o 6:cf5c4f4554ce add cH - | | - | o 5:5419eb264a33 add cG - | | - | o 4:98065434e5c6 add cE - | | - o | 3:2db36d8066ff add cD - | | - o | 2:7df62a38b9bf add cC - | | - o | 1:02bcbc3f6e56 add cB - |/ - o 0:54ccbc537fc2 add cA - -Check that amending in the middle of a stack does not show obsolete revs -Since we are doing operation in the middle of the stack we cannot just -have createmarkers as we are creating instability - - $ cat >> $HGRCPATH < [experimental] - > evolution=all - > EOF - - $ hg strip --hidden 1:: - 5 changesets pruned - $ hg log -G - @ 9:55c73a90e4b4 add cJ - | - | o 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - - $ hg up 7 - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ mkcommit cL - $ mkcommit cM - $ mkcommit cN - $ hg log -G - @ 16:a438c045eb37 add cN - | - o 15:2d66e189f5b5 add cM - | - o 14:d66ccb8c5871 add cL - | - | o 9:55c73a90e4b4 add cJ - | | - o | 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - - $ hg up 15 - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo "mmm" >> cM - $ hg amend - $ hg log -G - @ 18:210589181b14 add cM - | - | o 16:a438c045eb37 add cN - | | - | o 15:2d66e189f5b5 add cM - |/ - o 14:d66ccb8c5871 add cL - | - | o 9:55c73a90e4b4 add cJ - | | - o | 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - -Check that rebasing a commit twice makes the commit visible again - - $ hg rebase -d 18 -r 16 --keep - rebasing 16:a438c045eb37 "add cN" - $ hg log -r 14:: -G - o 19:104eed5354c7 add cN - | - @ 18:210589181b14 add cM - | - | o 16:a438c045eb37 add cN - | | - | o 15:2d66e189f5b5 add cM - |/ - o 14:d66ccb8c5871 add cL - | - $ hg strip -r 104eed5354c7 - 1 changesets pruned - $ hg rebase -d 18 -r 16 --keep - rebasing 16:a438c045eb37 "add cN" - $ hg log -r 14:: -G - o 19:104eed5354c7 add cN - | - @ 18:210589181b14 add cM - | - | o 16:a438c045eb37 add cN - | | - | o 15:2d66e189f5b5 add cM - |/ - o 14:d66ccb8c5871 add cL - | - -Test prunestrip - - $ hg book foo -r 104eed5354c7 - $ hg strip -r 210589181b14 - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at d66ccb8c5871 - 2 changesets pruned - $ hg log -r 14:: -G -T '{rev}:{node|short} {desc|firstline} {bookmarks}\n' - o 16:a438c045eb37 add cN - | - o 15:2d66e189f5b5 add cM - | - @ 14:d66ccb8c5871 add cL foo - | - -Check that --hidden used with inhibit does not hide every obsolete commit -We show the log before and after a log -G --hidden, they should be the same - $ hg log -G - o 16:a438c045eb37 add cN - | - o 15:2d66e189f5b5 add cM - | - @ 14:d66ccb8c5871 add cL - | - | o 9:55c73a90e4b4 add cJ - | | - o | 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - - $ hg log -G --hidden - x 19:104eed5354c7 add cN - | - x 18:210589181b14 add cM - | - | x 17:b3c3274523f9 temporary amend commit for 2d66e189f5b5 - | | - | | o 16:a438c045eb37 add cN - | |/ - | o 15:2d66e189f5b5 add cM - |/ - @ 14:d66ccb8c5871 add cL - | - | x 13:2f7b7704d714 add cL - | | - | x 12:fe1634cbe235 add cK - | | - | | x 11:53a94305e133 add cL - | | | - | | x 10:ad78ff7d621f add cK - | | | - | | | o 9:55c73a90e4b4 add cJ - | | | | - +-------x 8:e84f73d9ad36 temporary amend commit for 18214586bf78 - | | | | - o-----+ 7:18214586bf78 add cJ - / / / - | | o 6:cf5c4f4554ce add cH - | | | - | | o 5:5419eb264a33 add cG - | | | - | | o 4:98065434e5c6 add cE - | |/ - x | 3:2db36d8066ff add cD - | | - x | 2:7df62a38b9bf add cC - | | - x | 1:02bcbc3f6e56 add cB - |/ - o 0:54ccbc537fc2 add cA - - - $ hg log -G - o 16:a438c045eb37 add cN - | - o 15:2d66e189f5b5 add cM - | - @ 14:d66ccb8c5871 add cL - | - | o 9:55c73a90e4b4 add cJ - | | - o | 7:18214586bf78 add cJ - |/ - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - - -check that pruning and inhibited node does not confuse anything - - $ hg up --hidden 210589181b14 - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg strip --bundle 210589181b14 - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - saved backup bundle to $TESTTMP/inhibit/.hg/strip-backup/210589181b14-e09c7b88-backup.hg (glob) - $ hg unbundle .hg/strip-backup/210589181b14-e09c7b88-backup.hg # restore state - adding changesets - adding manifests - adding file changes - added 2 changesets with 1 changes to 2 files (+1 heads) - (run 'hg heads' to see heads, 'hg merge' to merge) - - Only allow direct access and check that evolve works like before -(also disable evolve commands to avoid hint about using evolve) - $ cat >> $HGRCPATH < [extensions] - > inhibit=! - > [experimental] - > evolution=createmarkers - > EOF - - $ hg up 15 - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory parent is obsolete! - $ cat >> $HGRCPATH < [experimental] - > evolution=all - > EOF - $ echo "CM" > cM - $ hg amend - $ hg log -G - @ 21:721c3c279519 add cM - | - | o 16:a438c045eb37 add cN - | | - | x 15:2d66e189f5b5 add cM - |/ - o 14:d66ccb8c5871 add cL - | - o 7:18214586bf78 add cJ - | - o 6:cf5c4f4554ce add cH - | - o 5:5419eb264a33 add cG - | - o 4:98065434e5c6 add cE - | - o 0:54ccbc537fc2 add cA - - $ cat >> $HGRCPATH < [extensions] - > EOF - $ echo "inhibit=$(echo $(dirname $TESTDIR))/hgext/inhibit.py" >> $HGRCPATH - -Empty commit - $ hg amend - nothing changed - [1] - -Directaccess should load after some extensions precised in the conf -With no extension specified: - - $ cat >$TESTTMP/test_extension.py << EOF - > from mercurial import extensions - > def uisetup(ui): - > print extensions._order - > EOF - $ cat >> $HGRCPATH << EOF - > [extensions] - > testextension=$TESTTMP/test_extension.py - > EOF - $ hg id - ['rebase', 'strip', 'evolve', 'directaccess', 'inhibit', 'testextension'] - 721c3c279519 tip - -With test_extension specified: - $ cat >> $HGRCPATH << EOF - > [directaccess] - > loadsafter=testextension - > EOF - $ hg id - ['rebase', 'strip', 'evolve', 'inhibit', 'testextension', 'directaccess'] - 721c3c279519 tip - -Inhibit should not work without directaccess - $ cat >> $HGRCPATH < [extensions] - > directaccess=! - > testextension=! - > EOF - $ hg up . - cannot use inhibit without the direct access extension - (please enable it or inhibit won't work) - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ echo "directaccess=$(echo $(dirname $TESTDIR))/hgext/directaccess.py" >> $HGRCPATH - $ cd .. - - -hg push should not allow directaccess unless forced with --hidden -We copy the inhibhit repo to inhibit2 and make some changes to push to inhibit - - $ cp -r inhibit inhibit2 - $ pwd=$(pwd) - $ cd inhibit - $ mkcommit pk - $ hg id - 003a4735afde tip - $ echo "OO" > pk - $ hg amend - $ hg id - 71eb4f100663 tip - -Hidden commits cannot be pushed without --hidden - $ hg push -r 003a4735afde $pwd/inhibit2 - pushing to $TESTTMP/inhibit2 - abort: hidden revision '003a4735afde'! - (use --hidden to access hidden revisions) - [255] - -Visible commits can still be pushed - $ hg push -r 71eb4f100663 $pwd/inhibit2 - pushing to $TESTTMP/inhibit2 - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - 2 new obsolescence markers - -Pulling from a inhibit repo to a non-inhibit repo should work - - $ cd .. - $ hg clone -q inhibit not-inhibit - $ cat >> not-inhibit/.hg/hgrc < [extensions] - > inhibit=! - > directaccess=! - > evolve=! - > EOF - $ cd not-inhibit - $ hg book -d foo - $ hg pull - pulling from $TESTTMP/inhibit - searching for changes - no changes found - adding remote bookmark foo diff -r dcf145d0ce21 -r 3c7f98753e37 tests/test-obsolete.t --- a/tests/test-obsolete.t Thu Feb 04 10:24:26 2016 +0000 +++ b/tests/test-obsolete.t Thu Feb 04 11:01:35 2016 +0000 @@ -184,7 +184,8 @@ adding manifests adding file changes added 5 changesets with 5 changes to 5 files (+1 heads) - 2 new obsolescence markers + pushing 2 obsolescence markers (13? bytes) (glob) + 2 obsolescence markers added $ hg -R ../other-new verify checking changesets checking manifests @@ -238,7 +239,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - 1 new obsolescence markers + pushing 3 obsolescence markers (19? bytes) (glob) + 1 obsolescence markers added $ qlog -R ../other-new 5 - 95de7fc6918d @@ -260,6 +262,8 @@ pushing to ../other-new searching for changes no changes found + pushing 3 obsolescence markers (19? bytes) (glob) + 0 obsolescence markers added [1] $ hg up --hidden -q .^ # 3 @@ -275,8 +279,9 @@ adding manifests adding file changes added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re) - 1 new obsolescence markers - (run 'hg heads .' to see heads, 'hg merge' to merge) + pull obsolescence markers + 1 obsolescence markers added + (run 'hg heads' to see heads, 'hg merge' to merge) $ qlog -R ../other-new 6 - 909a0fb57e5d @@ -365,8 +370,9 @@ adding manifests adding file changes added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re) - 1 new obsolescence markers - (run 'hg heads .' to see heads, 'hg merge' to merge) + pull obsolescence markers + 1 obsolescence markers added + (run 'hg heads' to see heads, 'hg merge' to merge) $ hg up -q 7 # to check rollback update behavior $ qlog @@ -389,7 +395,6 @@ branch: default commit: 1 deleted, 2 unknown (clean) update: 2 new changesets, 2 branch heads (merge) - phases: 4 draft unstable: 1 changesets $ qlog 6 @@ -539,7 +544,8 @@ adding manifests adding file changes added 2 changesets with 1 changes to [12] files (re) - 3 new obsolescence markers + pushing 7 obsolescence markers (49? bytes) (glob) + 3 obsolescence markers added $ hg up -q 10 $ mkcommit "obsol_d'''" created new head @@ -551,7 +557,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - 1 new obsolescence markers + pushing 8 obsolescence markers (55? bytes) (glob) + 1 obsolescence markers added $ cd .. check bumped detection @@ -663,7 +670,6 @@ branch: default commit: (clean) update: (2|9|11) new changesets, (3|9|10) branch heads \(merge\) (re) - phases: 3 draft bumped: 1 changesets $ hg debugobsolete `getid a7a6f2b5d8a5` `getid 50f11e5e3a63` $ hg log -r 'divergent()' diff -r dcf145d0ce21 -r 3c7f98753e37 tests/test-sharing.t --- a/tests/test-sharing.t Thu Feb 04 10:24:26 2016 +0000 +++ b/tests/test-sharing.t Thu Feb 04 11:01:35 2016 +0000 @@ -46,6 +46,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files + pull obsolescence markers 1 files updated, 0 files merged, 0 files removed, 0 files unresolved Let's commit a preliminary change and push it to ``test-repo`` for @@ -87,7 +88,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - 2 new obsolescence markers + pull obsolescence markers + 2 obsolescence markers added 1 files updated, 0 files merged, 0 files removed, 0 files unresolved Figure SG03 @@ -138,7 +140,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - 4 new obsolescence markers + pushing 4 obsolescence markers (36? bytes) (glob) + 4 obsolescence markers added Now that the fix is public, we cannot amend it any more. $ hg amend -m 'fix bug 37' @@ -158,6 +161,8 @@ pushing to ../dev-repo searching for changes no changes found + pushing 4 obsolescence markers (36? bytes) (glob) + 0 obsolescence markers added [1] $ hg -R ../dev-repo shortlog -r 'draft()' @@ -191,6 +196,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files + pushing 4 obsolescence markers (36? bytes) (glob) + 0 obsolescence markers added exporting bookmark bug15 $ hg -R ../review bookmarks bug15 2:f91e97234c2b @@ -206,7 +213,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - 2 new obsolescence markers + pushing 6 obsolescence markers (55? bytes) (glob) + 2 obsolescence markers added updating bookmark bug15 $ hg -R ../review bookmarks bug15 3:cbdfbd5a5db2 @@ -233,6 +241,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) + pushing 4 obsolescence markers (36? bytes) (glob) + 0 obsolescence markers added exporting bookmark featureX $ hg -R ../review bookmarks bug15 3:cbdfbd5a5db2 @@ -249,7 +259,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - 2 new obsolescence markers + pushing 6 obsolescence markers (55? bytes) (glob) + 2 obsolescence markers added updating bookmark featureX Bob receives second review, amends, and pushes to public: @@ -263,7 +274,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - 4 new obsolescence markers + pushing 8 obsolescence markers (73? bytes) (glob) + 4 obsolescence markers added $ hg -R ../public bookmarks no bookmarks set $ hg push ../review @@ -274,7 +286,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - 2 new obsolescence markers + pushing 8 obsolescence markers (73? bytes) (glob) + 2 obsolescence markers added updating bookmark featureX $ hg -R ../review bookmarks bug15 3:cbdfbd5a5db2 @@ -344,7 +357,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - 4 new obsolescence markers + pull obsolescence markers + 4 obsolescence markers added (run 'hg heads' to see heads, 'hg merge' to merge) $ hg log -G -q -r 'head()' o 5:540ba8f317e6 @@ -374,7 +388,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - 3 new obsolescence markers + pushing 11 obsolescence markers (* bytes) (glob) + 3 obsolescence markers added $ hg push ../review pushing to ../review searching for changes @@ -382,7 +397,8 @@ adding manifests adding file changes added 1 changesets with 0 changes to 1 files - 1 new obsolescence markers + pushing 11 obsolescence markers (* bytes) (glob) + 1 obsolescence markers added updating bookmark bug15 Figure SG08: review and public changesets after Alice pushes. @@ -444,6 +460,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files + pull obsolescence markers + 0 obsolescence markers added 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo 'better fix (alice)' >> file1 $ hg amend -u alice -m 'fix bug 24 (v2 by alice)' @@ -471,7 +489,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - 2 new obsolescence markers + pull obsolescence markers + 2 obsolescence markers added (run 'hg heads' to see heads, 'hg merge' to merge) 2 new divergent changesets diff -r dcf145d0ce21 -r 3c7f98753e37 tests/test-stabilize-conflict.t --- a/tests/test-stabilize-conflict.t Thu Feb 04 10:24:26 2016 +0000 +++ b/tests/test-stabilize-conflict.t Thu Feb 04 11:01:35 2016 +0000 @@ -127,7 +127,8 @@ move:[5] babar count up to fifteen atop:[7] babar count up to ten merging babar - warning: conflicts while merging babar! (edit, then use 'hg resolve --mark') + warning: conflicts during merge. + merging babar incomplete! (edit conflicts, then use 'hg resolve --mark') evolve failed! fix conflict and run "hg evolve --continue" or use "hg update -C" to abort abort: unresolved merge conflicts (see hg help resolve) diff -r dcf145d0ce21 -r 3c7f98753e37 tests/test-stabilize-result.t --- a/tests/test-stabilize-result.t Thu Feb 04 10:24:26 2016 +0000 +++ b/tests/test-stabilize-result.t Thu Feb 04 11:01:35 2016 +0000 @@ -82,7 +82,8 @@ move:[5] newer a atop:[7] changea merging a - warning: conflicts while merging a! (edit, then use 'hg resolve --mark') + warning: conflicts during merge. + merging a incomplete! (edit conflicts, then use 'hg resolve --mark') evolve failed! fix conflict and run "hg evolve --continue" or use "hg update -C" to abort abort: unresolved merge conflicts (see hg help resolve) @@ -306,7 +307,6 @@ branch: default commit: (clean) update: 2 new changesets, 2 branch heads (merge) - phases: 3 draft $ hg export . # HG changeset patch # User test @@ -357,7 +357,8 @@ with: [21] More addition base: [15] More addition merging a - warning: conflicts while merging a! (edit, then use 'hg resolve --mark') + warning: conflicts during merge. + merging a incomplete! (edit conflicts, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon abort: merge conflict between several amendments (this is not automated yet) diff -r dcf145d0ce21 -r 3c7f98753e37 tests/test-tutorial.t --- a/tests/test-tutorial.t Thu Feb 04 10:24:26 2016 +0000 +++ b/tests/test-tutorial.t Thu Feb 04 11:01:35 2016 +0000 @@ -224,6 +224,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) + pull obsolescence markers (run 'hg heads' to see heads, 'hg merge' to merge) I now have a new heads. Note that this remote head is immutable @@ -405,7 +406,8 @@ adding manifests adding file changes added 3 changesets with 3 changes to 1 files - 6 new obsolescence markers + pushing 6 obsolescence markers (52? bytes) (glob) + 6 obsolescence markers added for simplicity sake we get the bathroom change in line again @@ -525,7 +527,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - 1 new obsolescence markers + pull obsolescence markers + 1 obsolescence markers added (run 'hg update' to get a working copy) $ hg log -G o 75954b8cd933 (public): bathroom stuff @@ -582,7 +585,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - 1 new obsolescence markers + pull obsolescence markers + 1 obsolescence markers added (run 'hg update' to get a working copy) $ hg log -G o 75954b8cd933 (draft): bathroom stuff @@ -642,6 +646,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) + pull obsolescence markers + 0 obsolescence markers added (run 'hg heads' to see heads, 'hg merge' to merge) 1 new unstable changesets @@ -731,7 +737,8 @@ adding manifests adding file changes added 2 changesets with 2 changes to 1 files (+1 heads) - 3 new obsolescence markers + pushing 10 obsolescence markers (87? bytes) (glob) + 3 obsolescence markers added remote get a warning that current working directory is based on an obsolete changeset @@ -740,6 +747,8 @@ pulling from $TESTTMP/local (glob) searching for changes no changes found + pull obsolescence markers + 0 obsolescence markers added working directory parent is obsolete! (use "hg evolve" to update to its successor) @@ -772,6 +781,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files + pull obsolescence markers + 0 obsolescence markers added (run 'hg update' to get a working copy) $ hg log -G o 99f039c5ec9e (draft): SPAM SPAM SPAM diff -r dcf145d0ce21 -r 3c7f98753e37 tests/test-uncommit.t --- a/tests/test-uncommit.t Thu Feb 04 10:24:26 2016 +0000 +++ b/tests/test-uncommit.t Thu Feb 04 11:01:35 2016 +0000 @@ -138,6 +138,7 @@ $ hg branch foo marked working directory as branch foo + (branches are permanent and global, did you want a bookmark?) $ hg mv ff f $ hg mv h i $ hg rm j diff -r dcf145d0ce21 -r 3c7f98753e37 tests/test-wireproto-bundle1.t --- a/tests/test-wireproto-bundle1.t Thu Feb 04 10:24:26 2016 +0000 +++ b/tests/test-wireproto-bundle1.t Thu Feb 04 11:01:35 2016 +0000 @@ -50,6 +50,7 @@ adding manifests adding file changes added 2 changesets with 2 changes to 2 files + pull obsolescence markers (run 'hg update' to get a working copy) $ hg push -R ../other pushing to ssh://user@dummy/server @@ -69,7 +70,8 @@ remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files (+1 heads) - remote: 2 new obsolescence markers + pushing 2 obsolescence markers (18? bytes) (glob) + remote: 2 obsolescence markers added $ hg push pushing to ssh://user@dummy/server searching for changes @@ -86,8 +88,9 @@ adding manifests adding file changes added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re) - 2 new obsolescence markers - (run 'hg heads' to see heads, 'hg merge' to merge) + pull obsolescence markers + 2 obsolescence markers added + (run 'hg heads' to see heads) $ hg -R ../other pull pulling from ssh://user@dummy/server searching for changes