Mercurial > evolve
changeset 1117:98f4e356a431
merge with stable
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Thu, 02 Oct 2014 14:16:32 -0500 |
parents | d4977b04ef98 (diff) cc19b6400dae (current diff) |
children | fbc400c1b022 |
files | hgext/evolve.py |
diffstat | 34 files changed, 431 insertions(+), 922 deletions(-) [+] |
line wrap: on
line diff
--- a/README Tue Sep 30 10:27:54 2014 -0500 +++ b/README Thu Oct 02 14:16:32 2014 -0500 @@ -57,6 +57,10 @@ Changelog ========= +5.0.0 -- + +- drop compat with Mercurial pre 3.2 + 4.2.0 -- - uncommit: add a --rev argument
--- a/hgext/evolve.py Tue Sep 30 10:27:54 2014 -0500 +++ b/hgext/evolve.py Thu Oct 02 14:16:32 2014 -0500 @@ -19,7 +19,7 @@ - improves some aspect of the early implementation in Mercurial core ''' -testedwith = '3.0.1 3.1' +testedwith = '' buglink = 'http://bz.selenic.com/' import sys, os @@ -97,19 +97,6 @@ ##################################################################### -### Compatibility with core ### -##################################################################### - - -def retractboundary(repo, tr, targetphase, nodes): - """Older mercurial version does not move phase within a transaction""" - try: - return phases.retractboundary(repo, tr, targetphase, nodes) - except TypeError: - return phases.retractboundary(repo, targetphase, nodes) - - -##################################################################### ### Extension helper ### ##################################################################### @@ -362,120 +349,6 @@ if not opts.get('user') and opts.get('current_user'): opts['user'] = ui.username() - -createmarkers = obsolete.createmarkers -if not util.safehasattr(obsolete.obsstore, 'relevantmarkers'): - - @eh.wrapfunction(mercurial.obsolete, 'createmarkers') - def _createmarkers(orig, repo, relations, *args, **kwargs): - """register parent information at prune time""" - # every time this test is run, a kitten is slain. - # Change it as soon as possible - if '[,{metadata}]' in orig.__doc__: - relations = list(relations) - for idx, rel in enumerate(relations): - prec = rel[0] - sucs = rel[1] - if not sucs: - meta = {} - if 2 < len(rel): - meta.update(rel[2]) - for i, p in enumerate(prec.parents(), 1): - meta['p%i' % i] = p.hex() - relations[idx] = (prec, sucs, meta) - return orig(repo, relations, *args, **kwargs) - - def createmarkers(*args, **kwargs): - return obsolete.createmarkers(*args, **kwargs) - - class pruneobsstore(obsolete.obsstore): - - def __init__(self, *args, **kwargs): - self.prunedchildren = {} - return super(pruneobsstore, self).__init__(*args, **kwargs) - - def _load(self, markers): - markers = self._prunedetectingmarkers(markers) - return super(pruneobsstore, self)._load(markers) - - - def _prunedetectingmarkers(self, markers): - for m in markers: - if not m[1]: # no successors - meta = obsolete.decodemeta(m[3]) - if 'p1' in meta: - p1 = node.bin(meta['p1']) - self.prunedchildren.setdefault(p1, set()).add(m) - if 'p2' in meta: - p2 = node.bin(meta['p2']) - self.prunedchildren.setdefault(p2, set()).add(m) - yield m - - obsolete.obsstore = pruneobsstore - - @eh.addattr(obsolete.obsstore, 'relevantmarkers') - def relevantmarkers(self, nodes): - """return a set of all obsolescence marker relevant to a set of node. - - "relevant" to a set of node mean: - - - marker that use this changeset as successors - - prune marker of direct children on this changeset. - - recursive application of the two rules on precursors of these markers - - It a set so you cannot rely on order""" - seennodes = set(nodes) - seenmarkers = set() - pendingnodes = set(nodes) - precursorsmarkers = self.precursors - prunedchildren = self.prunedchildren - while pendingnodes: - direct = set() - for current in pendingnodes: - direct.update(precursorsmarkers.get(current, ())) - direct.update(prunedchildren.get(current, ())) - direct -= seenmarkers - pendingnodes = set([m[0] for m in direct]) - seenmarkers |= direct - pendingnodes -= seennodes - seennodes |= pendingnodes - return seenmarkers - -@command('debugobsoleterelevant', - [], - 'REVSET') -def debugobsoleterelevant(ui, repo, *revsets): - """print allobsolescence marker relevant to a set of revision""" - nodes = [ctx.node() for ctx in repo.set('%lr', revsets)] - markers = repo.obsstore.relevantmarkers(nodes) - for rawmarker in sorted(markers): - marker = obsolete.marker(repo, rawmarker) - cmdutil.showmarker(ui, marker) - - -##################################################################### -### Critical fix ### -##################################################################### - -@eh.wrapfunction(mercurial.obsolete, '_readmarkers') -def safereadmarkers(orig, data): - """safe maker wrapper to remove nullid succesors - - Nullid successors was created by older version of evolve. - """ - nb = 0 - for marker in orig(data): - if nullid in marker[1]: - marker = (marker[0], - tuple(s for s in marker[1] if s != nullid), - marker[2], - marker[3]) - nb += 1 - yield marker - if nb: - e = sys.stderr - print >> e, 'repo contains %i invalid obsolescence markers' % nb - getrevs = obsolete.getrevs ##################################################################### @@ -859,7 +732,7 @@ isexec='x' in flags, copied=copied.get(path)) return mctx - raise IOError() + return None message = cmdutil.logmessage(repo.ui, commitopts) if not message: @@ -906,7 +779,7 @@ if not orig.p2().rev() == node.nullrev: raise util.Abort( 'no support for evolving merge changesets yet', - hint="Redo the merge and use `hg prune` to obsolete the old one") + hint="Redo the merge and use `hg prune <old> --succ <new>` to obsolete the old one") destbookmarks = repo.nodebookmarks(dest.node()) nodesrc = orig.node() destphase = repo[nodesrc].phase() @@ -954,12 +827,12 @@ raise oldbookmarks = repo.nodebookmarks(nodesrc) if nodenew is not None: - retractboundary(repo, tr, destphase, [nodenew]) - createmarkers(repo, [(repo[nodesrc], (repo[nodenew],))]) + phases.retractboundary(repo, tr, destphase, [nodenew]) + obsolete.createmarkers(repo, [(repo[nodesrc], (repo[nodenew],))]) for book in oldbookmarks: repo._bookmarks[book] = nodenew else: - createmarkers(repo, [(repo[nodesrc], ())]) + obsolete.createmarkers(repo, [(repo[nodesrc], ())]) # Behave like rebase, move bookmarks to dest for book in oldbookmarks: repo._bookmarks[book] = dest.node() @@ -1524,7 +1397,7 @@ tmpid = relocate(repo, bumped, prec.p1()) if tmpid is not None: tmpctx = repo[tmpid] - createmarkers(repo, [(bumped, (tmpctx,))]) + obsolete.createmarkers(repo, [(bumped, (tmpctx,))]) except MergeFailure: repo.opener.write('graftstate', bumped.hex() + '\n') repo.ui.write_err(_('evolution failed!\n')) @@ -1551,7 +1424,7 @@ isexec='x' in flags, copied=copied.get(path)) return mctx - raise IOError() + return None text = 'bumped update to %s:\n\n' % prec text += bumped.description() @@ -1566,11 +1439,11 @@ newid = repo.commitctx(new) if newid is None: - createmarkers(repo, [(tmpctx, ())]) + obsolete.createmarkers(repo, [(tmpctx, ())]) newid = prec.node() else: - retractboundary(repo, tr, bumped.phase(), [newid]) - createmarkers(repo, [(tmpctx, (repo[newid],))], + phases.retractboundary(repo, tr, bumped.phase(), [newid]) + obsolete.createmarkers(repo, [(tmpctx, (repo[newid],))], flag=obsolete.bumpedfix) bmupdate(newid) tr.close() @@ -1578,7 +1451,9 @@ finally: tr.release() # reroute the working copy parent to the new changeset + repo.dirstate.beginparentchange() repo.dirstate.setparents(newid, node.nullid) + repo.dirstate.endparentchange() def _solvedivergent(ui, repo, divergent, dryrun=False, confirm=False, progresscb=None): @@ -1666,7 +1541,9 @@ if progresscb: progresscb() tr = repo.transaction('stabilize-divergent') try: + repo.dirstate.beginparentchange() repo.dirstate.setparents(divergent.node(), node.nullid) + repo.dirstate.endparentchange() oldlen = len(repo) amend(ui, repo, message='', logfile='') if oldlen == len(repo): @@ -1674,8 +1551,8 @@ # no changes else: new = repo['.'] - createmarkers(repo, [(other, (new,))]) - retractboundary(repo, tr, other.phase(), [new.node()]) + obsolete.createmarkers(repo, [(other, (new,))]) + phases.retractboundary(repo, tr, other.phase(), [new.node()]) tr.close() finally: tr.release() @@ -1879,7 +1756,7 @@ relations = [(p, (s,)) for p, s in zip(precs, sucs)] # create markers - createmarkers(repo, relations, metadata=metadata) + obsolete.createmarkers(repo, relations, metadata=metadata) # informs that changeset have been pruned ui.status(_('%i changesets pruned\n') % len(precs)) @@ -1992,7 +1869,7 @@ if path in redirect: return filectxfn(repo, memctx, path, contentctx=target, redirect=()) if path not in contentctx: - raise IOError() + return None fctx = contentctx[path] flags = fctx.flags() mctx = memfilectx(repo, fctx.path(), fctx.data(), @@ -2113,10 +1990,12 @@ raise util.Abort(_('nothing to uncommit'), hint=_("use --all to uncommit all files")) # Move local changes on filtered changeset - createmarkers(repo, [(old, (repo[newid],))]) - retractboundary(repo, tr, oldphase, [newid]) + obsolete.createmarkers(repo, [(old, (repo[newid],))]) + phases.retractboundary(repo, tr, oldphase, [newid]) + repo.dirstate.beginparentchange() repo.dirstate.setparents(newid, node.nullid) _uncommitdirstate(repo, old, match) + repo.dirstate.endparentchange() updatebookmarks(newid) if not repo[newid].files(): ui.warn(_("new changeset is empty\n")) @@ -2144,7 +2023,7 @@ oldbookmarks.extend(repo.nodebookmarks(old.node())) markers.append((old, (new,))) if markers: - createmarkers(repo, markers) + obsolete.createmarkers(repo, markers) for book in oldbookmarks: repo._bookmarks[book] = new.node() if oldbookmarks: @@ -2199,10 +2078,12 @@ # store touched version to help potential children newmapping[ctx.node()] = new if not duplicate: - createmarkers(repo, [(ctx, (repo[new],))]) - retractboundary(repo, tr, ctx.phase(), [new]) + obsolete.createmarkers(repo, [(ctx, (repo[new],))]) + phases.retractboundary(repo, tr, ctx.phase(), [new]) if ctx in repo[None].parents(): + repo.dirstate.beginparentchange() repo.dirstate.setparents(new, node.nullid) + repo.dirstate.endparentchange() tr.close() finally: tr.release() @@ -2303,8 +2184,8 @@ newid, unusedvariable = rewrite(repo, root, allctx, head, [root.p1().node(), root.p2().node()], commitopts=commitopts) - retractboundary(repo, tr, targetphase, [newid]) - createmarkers(repo, [(ctx, (repo[newid],)) + phases.retractboundary(repo, tr, targetphase, [newid]) + obsolete.createmarkers(repo, [(ctx, (repo[newid],)) for ctx in allctx]) tr.close() finally: @@ -2380,37 +2261,146 @@ topic = 'OBSEXC' ui.progress(topic, *args, **kwargs) +if getattr(exchange, '_pushdiscoveryobsmarkers', None) is not None: + @eh.wrapfunction(exchange, '_pushdiscoveryobsmarkers') + def _pushdiscoveryobsmarkers(orig, pushop): + if (obsolete._enabled + and pushop.repo.obsstore + and 'obsolete' in pushop.remote.listkeys('namespaces')): + repo = pushop.repo + obsexcmsg(repo.ui, "computing relevant nodes\n") + revs = list(repo.revs('::%ln', pushop.futureheads)) + unfi = repo.unfiltered() + cl = unfi.changelog + if not pushop.remote.capable('_evoext_obshash_0'): + # do not trust core yet + # return orig(pushop) + nodes = [cl.node(r) for r in revs] + if nodes: + obsexcmsg(repo.ui, "computing markers relevant to %i nodes\n" + % len(nodes)) + pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes) + else: + obsexcmsg(repo.ui, "markers already in sync\n") + pushop.outobsmarkers = [] + pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes) + return + common = [] + obsexcmsg(repo.ui, "looking for common markers in %i nodes\n" + % len(revs)) + commonrevs = list(unfi.revs('::%ln', pushop.outgoing.commonheads)) + common = findcommonobsmarkers(pushop.ui, unfi, pushop.remote, commonrevs) + + revs = list(unfi.revs('%ld - (::%ln)', revs, common)) + nodes = [cl.node(r) for r in revs] + if nodes: + obsexcmsg(repo.ui, "computing markers relevant to %i nodes\n" + % len(nodes)) + pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes) + else: + obsexcmsg(repo.ui, "markers already in sync\n") + pushop.outobsmarkers = [] + +@eh.wrapfunction(wireproto, 'capabilities') +def discocapabilities(orig, repo, proto): + """wrapper to advertise new capability""" + caps = orig(repo, proto) + if obsolete._enabled: + caps += ' _evoext_obshash_0' + return caps + +@eh.extsetup +def _installobsmarkersdiscovery(ui): + hgweb_mod.perms['evoext_obshash'] = 'pull' + # wrap command content + oldcap, args = wireproto.commands['capabilities'] + def newcap(repo, proto): + return discocapabilities(oldcap, repo, proto) + wireproto.commands['capabilities'] = (newcap, args) + wireproto.commands['evoext_obshash'] = (srv_obshash, 'nodes') + if getattr(exchange, '_pushdiscoveryobsmarkers', None) is None: + ui.warn('evolve: your mercurial version is too old\n' + 'evolve: (running in degraded mode, push will includes all markers)\n') + else: + olddisco = exchange.pushdiscoverymapping['obsmarker'] + def newdisco(pushop): + _pushdiscoveryobsmarkers(olddisco, pushop) + exchange.pushdiscoverymapping['obsmarker'] = newdisco + +### Set discovery START + +from mercurial import dagutil +from mercurial import setdiscovery + +def _obshash(repo, nodes): + hashs = _obsrelsethashtree(repo) + nm = repo.changelog.nodemap + revs = [nm.get(n) for n in nodes] + return [r is None and nullid or hashs[r][1] for r in revs] + +def srv_obshash(repo, proto, nodes): + return wireproto.encodelist(_obshash(repo, wireproto.decodelist(nodes))) + +@eh.addattr(localrepo.localpeer, 'evoext_obshash') +def local_obshash(peer, nodes): + return _obshash(peer._repo, nodes) + +@eh.addattr(wireproto.wirepeer, 'evoext_obshash') +def peer_obshash(self, nodes): + d = self._call("evoext_obshash", nodes=wireproto.encodelist(nodes)) + try: + return wireproto.decodelist(d) + except ValueError: + self._abort(error.ResponseError(_("unexpected response:"), d)) + +def findcommonobsmarkers(ui, local, remote, probeset, + initialsamplesize=100, + fullsamplesize=200): + # from discovery + roundtrips = 0 + cl = local.changelog + dag = dagutil.revlogdag(cl) + localhash = _obsrelsethashtree(local) + missing = set() + common = set() + undecided = set(probeset) + _takefullsample = setdiscovery._takefullsample + + while undecided: + + ui.note(_("sampling from both directions\n")) + sample = _takefullsample(dag, undecided, size=fullsamplesize) + + roundtrips += 1 + ui.debug("query %i; still undecided: %i, sample size is: %i\n" + % (roundtrips, len(undecided), len(sample))) + # indices between sample and externalized version must match + sample = list(sample) + remotehash = remote.evoext_obshash(dag.externalizeall(sample)) + + yesno = [localhash[ix][1] == remotehash[si] + for si, ix in enumerate(sample)] + + commoninsample = set(n for i, n in enumerate(sample) if yesno[i]) + common.update(dag.ancestorset(commoninsample, common)) + + missinginsample = [n for i, n in enumerate(sample) if not yesno[i]] + missing.update(dag.descendantset(missinginsample, missing)) + + undecided.difference_update(missing) + undecided.difference_update(common) + + + result = dag.headsetofconnecteds(common) + ui.debug("%d total queries\n" % roundtrips) + + if not result: + return set([nullid]) + return dag.externalizeall(result) _pushkeyescape = getattr(obsolete, '_pushkeyescape', None) -if _pushkeyescape is None: - _maxpayload = 5300 - def _pushkeyescape(markers): - """encode markers into a dict suitable for pushkey exchange - - - binary data are base86 encoded - - splited in chunk less than 5300 bytes""" - parts = [] - currentlen = _maxpayload * 2 # ensure we create a new part - for marker in markers: - nextdata = obsolete._encodeonemarker(marker) - if (len(nextdata) + currentlen > _maxpayload): - currentpart = [] - currentlen = 0 - parts.append(currentpart) - currentpart.append(nextdata) - currentlen += len(nextdata) - keys = {} - for idx, part in enumerate(reversed(parts)): - data = ''.join([_pack('>B', 0)] + part) - keys['dump%i' % idx] = base85.b85encode(data) - return keys - -def _encodemarkersstream(fp, markers): - fp.write(_pack('>B', 0)) - for mark in markers: - fp.write(obsolete._encodeonemarker(mark)) class pushobsmarkerStringIO(StringIO): """hacky string io for progress""" @@ -2419,7 +2409,7 @@ def length(self): return len(self.getvalue()) - def read(self, size): + def read(self, size=None): obsexcprg(self.ui, self.tell(), unit="bytes", total=self.length) return StringIO.read(self, size) @@ -2429,137 +2419,6 @@ yield d d = self.read(4096) -bundle2partsgenerators = getattr(exchange, 'bundle2partsgenerators', None) - - -if bundle2partsgenerators is not None: - - def _pushb2phases(pushop, bundler): - """adds phases update to the main bundle2 push""" - outgoing = pushop.outgoing - unfi = pushop.repo.unfiltered() - remotephases = pushop.remote.listkeys('phases') - publishing = remotephases.get('publishing', False) - ana = phases.analyzeremotephases(pushop.repo, - outgoing.commonheads, - remotephases) - pheads, droots = ana - revset = 'heads((%ln::%ln))' - if not publishing: - revset += ' and public()' - # Get the list of all revs draft on remote by public here. - # XXX Beware that revset break if droots is not strictly - # XXX root we may want to ensure it is but it is costly - fallback = list(unfi.set(revset, droots, outgoing.commonheads)) - if not outgoing.missing: - future = fallback - else: - # adds changeset we are going to push as draft - # - # should not be necessary for pushblishing server, but because of - # an issue fixed in xxxxx we have to do it anyway. - fdroots = list(unfi.set('roots(%ln + %ln::)', outgoing.missing, droots)) - fdroots = [f.node() for f in fdroots] - future = list(unfi.set(revset, fdroots, outgoing.missingheads)) - - b2caps = bundle2.bundle2caps(pushop.remote) - if 'b2x:pushkey' not in b2caps: - return - pushop.stepsdone.add('phases') - part2node = [] - enc = pushkey.encode - for newremotehead in future: - part = bundler.newpart('b2x:pushkey') - part.addparam('namespace', enc('phases')) - part.addparam('key', enc(newremotehead.hex())) - part.addparam('old', enc(str(phases.draft))) - part.addparam('new', enc(str(phases.public))) - part2node.append((part.id, newremotehead)) - def handlereply(op): - for partid, pnode in part2node: - partrep = op.records.getreplies(partid) - results = partrep['pushkey'] - assert len(results) <= 1 - msg = None - if not results: - msg = _('server ignored update of %s to public!\n') % pnode - elif not int(results[0]['return']): - msg = _('updating %s to public failed!\n') % pnode - if msg is not None: - pushop.ui.warn(msg) - return handlereply - - def _pushb2obsmarker(pushop, bundler): - """adds obsmarker to the main bundle2 push""" - repo = pushop.repo - remote = pushop.remote - if ('obsmarkers' not in pushop.stepsdone - and (obsolete._enabled and repo.obsstore and - 'obsolete' in remote.listkeys('namespaces')) - and remote.capable('_evoext_b2x_obsmarkers_0')): - # - pushop.stepsdone.add('obsmarkers') - markers = _obsmarkersdiscovery(pushop) - if not markers: - obsexcmsg(repo.ui, "no marker to push\n") - obsexcmsg(repo.ui, "DONE\n") - return - obsdata = pushobsmarkerStringIO() - _encodemarkersstream(obsdata, markers) - obsdata.seek(0) - obsdata.ui = repo.ui - obsexcmsg(repo.ui, "pushing %i obsolescence markers (%i bytes)\n" - % (len(markers), len(obsdata.getvalue())), - True) - bundler.newpart('EVOLVE:B2X:OBSMARKERV1', data=obsdata) - def callback(op): - obsexcprg(repo.ui, None) - obsexcmsg(repo.ui, "DONE\n") - return callback - bundle2partsgenerators.append(_pushb2phases) - bundle2partsgenerators.append(_pushb2obsmarker) - - -def _obsmarkersdiscovery(pushop): - """return the list of marker that needs to be pushed to the server - - When used before (or at the same time) the changegroup have been pushed, it - returns the value as if the planned changegroup was succesful. Othewise it - use te actual common heads to decide whats needs to be pushed. - """ - repo = pushop.repo - remote = pushop.remote - unfi = repo.unfiltered() - cl = unfi.changelog - commonheads = pushop.commonheads - if commonheads is None: - if pushop.revs is None: - commonheads = pushop.outgoing.commonheads - sch = set(commonheads) - commonheads.extend(h for h in pushop.outgoing.missingheads - if h not in sch) - else: - commonheads = pushop.outgoing.missingheads - if (obsolete._enabled and repo.obsstore and - 'obsolete' in remote.listkeys('namespaces')): - obsexcmsg(repo.ui, "computing relevant nodes\n") - revs = unfi.revs('::%ln', commonheads) - common = [] - if remote.capable('_evoext_obshash_0'): - obsexcmsg(repo.ui, "looking for common markers in %i nodes\n" - % len(revs)) - common = findcommonobsmarkers(pushop.ui, unfi, remote, revs) - revs = list(unfi.revs('%ld - (::%ln)', revs, common)) - nodes = [cl.node(r) for r in revs] - if nodes: - obsexcmsg(repo.ui, "computing markers relevant to %i nodes\n" - % len(nodes)) - markers = repo.obsstore.relevantmarkers(nodes) - else: - obsexcmsg(repo.ui, "markers already in sync\n") - markers = [] - return markers - @eh.wrapfunction(exchange, '_pushobsolete') def _pushobsolete(orig, pushop): """utility function to push obsolete markers to a remote""" @@ -2568,6 +2427,8 @@ if 'obsmarkers' in stepsdone: return stepsdone.add('obsmarkers') + if pushop.ret == 0: + return pushop.ui.debug('try to push obsolete markers to remote\n') repo = pushop.repo remote = pushop.remote @@ -2575,35 +2436,13 @@ cl = unfi.changelog if (obsolete._enabled and repo.obsstore and 'obsolete' in remote.listkeys('namespaces')): - markers = _obsmarkersdiscovery(pushop) + markers = pushop.outobsmarkers if not markers: obsexcmsg(repo.ui, "no marker to push\n") - elif remote.capable('_evoext_b2x_obsmarkers_0'): - obsdata = pushobsmarkerStringIO() - _encodemarkersstream(obsdata, markers) - obsdata.seek(0) - obsdata.ui = repo.ui - obsexcmsg(repo.ui, "pushing %i obsolescence markers (%i bytes)\n" - % (len(markers), len(obsdata.getvalue())), - True) - bundler = bundle2.bundle20(pushop.ui, {}) - capsblob = bundle2.encodecaps(pushop.repo.bundle2caps) - bundler.addpart(bundle2.bundlepart('b2x:replycaps', data=capsblob)) - cgpart = bundle2.bundlepart('EVOLVE:B2X:OBSMARKERV1', data=obsdata) - bundler.addpart(cgpart) - stream = util.chunkbuffer(bundler.getchunks()) - try: - reply = pushop.remote.unbundle(stream, ['force'], 'push') - except bundle2.UnknownPartError, exc: - raise util.Abort('missing support for %s' % exc) - try: - op = bundle2.processbundle(pushop.repo, reply) - except bundle2.UnknownPartError, exc: - raise util.Abort('missing support for %s' % exc) - obsexcprg(repo.ui, None) elif remote.capable('_evoext_pushobsmarkers_0'): obsdata = pushobsmarkerStringIO() - _encodemarkersstream(obsdata, markers) + for chunk in obsolete.encodemarkers(markers, True): + obsdata.write(chunk) obsdata.seek(0) obsdata.ui = repo.ui obsexcmsg(repo.ui, "pushing %i obsolescence markers (%i bytes)\n" @@ -2655,6 +2494,28 @@ self.ui.status(_('remote: '), l) return ret +@eh.wrapfunction(localrepo.localrepository, '_restrictcapabilities') +def local_pushobsmarker_capabilities(orig, repo, caps): + caps = orig(repo, caps) + caps.add('_evoext_pushobsmarkers_0') + return caps + +@eh.addattr(localrepo.localpeer, 'evoext_pushobsmarkers_0') +def local_pushobsmarkers(peer, obsfile): + data = obsfile.read() + lock = peer._repo.lock() + try: + tr = peer._repo.transaction('pushkey: obsolete markers') + try: + new = peer._repo.obsstore.mergemarkers(tr, data) + if new is not None: + obsexcmsg(peer._repo.ui, "%i obsolescence markers added\n" % new, True) + tr.close() + finally: + tr.release() + finally: + lock.release() + peer._repo.hook('evolve_pushobsmarkers') def srv_pushobsmarkers(repo, proto): """wireprotocol command""" @@ -2667,7 +2528,9 @@ try: tr = repo.transaction('pushkey: obsolete markers') try: - repo.obsstore.mergemarkers(tr, data) + new = repo.obsstore.mergemarkers(tr, data) + if new is not None: + obsexcmsg(repo.ui, "%i obsolescence markers added\n" % new, True) tr.close() finally: tr.release() @@ -2676,34 +2539,7 @@ repo.hook('evolve_pushobsmarkers') return wireproto.pushres(0) -@bundle2.parthandler('evolve:b2x:obsmarkerv1') -def handleobsmarkerv1(op, inpart): - """add a stream of obsmarker to the repo""" - tr = op.gettransaction() - advparams = dict(inpart.advisoryparams) - length = advparams.get('totalbytes') - if length is None: - obsdata = inpart.read() - else: - length = int(length) - data = StringIO() - current = 0 - obsexcprg(op.repo.ui, current, unit="bytes", total=length) - while current < length: - readsize = min(length-current, 4096) - data.write(inpart.read(readsize)) - current += readsize - obsexcprg(op.repo.ui, current, unit="bytes", total=length) - obsexcprg(op.repo.ui, None) - obsdata = data.getvalue() - totalsize = len(obsdata) - old = len(op.repo.obsstore._all) - op.repo.obsstore.mergemarkers(tr, obsdata) - new = len(op.repo.obsstore._all) - old - op.records.add('evo_obsmarkers', {'new': new, 'bytes': totalsize}) - tr.hookargs['evolve_new_obsmarkers'] = str(new) - -def _buildpullobsmerkersboundaries(pullop): +def _buildpullobsmarkersboundaries(pullop): """small funtion returning the argument for pull markers call may to contains 'heads' and 'common'. skip the key for None. @@ -2712,7 +2548,7 @@ cl = pullop.repo.changelog remote = pullop.remote unfi = repo.unfiltered() - revs = unfi.revs('::%ln', pullop.pulledsubset) + revs = unfi.revs('::%ln', pullop.common) common = [nullid] if remote.capable('_evoext_obshash_0'): obsexcmsg(repo.ui, "looking for common markers in %i nodes\n" @@ -2722,46 +2558,49 @@ @eh.uisetup def addgetbundleargs(self): - if gboptsmap is not None: - gboptsmap['evo_obsmarker'] = 'plain' - gboptsmap['evo_obscommon'] = 'plain' - gboptsmap['evo_obsheads'] = 'plain' - else: - gboptslist.append('evo_obsheads') - gboptslist.append('evo_obscommon') - gboptslist.append('evo_obsmarker') + gboptsmap['evo_obscommon'] = 'nodes' - +@eh.wrapfunction(exchange, '_pullbundle2extraprepare') +def _addobscommontob2pull(orig, pullop, kwargs): + ret = orig(pullop, kwargs) + if 'obsmarkers' in kwargs and pullop.remote.capable('_evoext_getbundle_obscommon'): + boundaries = _buildpullobsmarkersboundaries(pullop) + common = boundaries['common'] + if common != [nullid]: + kwargs['evo_obscommon'] = common + return ret -@eh.wrapfunction(exchange, '_getbundleextrapart') -def _getbundleextrapart(orig, bundler, repo, source, **kwargs): - if int(kwargs.pop('evo_obsmarker', False)): - common = kwargs.pop('evo_obscommon') - common = wireproto.decodelist(common) - heads = kwargs.pop('evo_obsheads') - heads = wireproto.decodelist(heads) - obsdata = _getobsmarkersstream(repo, common=common, heads=heads) - if len(obsdata.getvalue()) > 5: - advparams = [('totalbytes', str(len(obsdata.getvalue())))] - obspart = bundle2.bundlepart('EVOLVE:B2X:OBSMARKERV1', - advisoryparams=advparams, - data=obsdata) - bundler.addpart(obspart) - orig(bundler, repo, source) +if getattr(exchange, '_getbundleobsmarkerpart', None) is not None: + @eh.wrapfunction(exchange, '_getbundleobsmarkerpart') + def _getbundleobsmarkerpart(orig, bundler, repo, source, heads=None, common=None, + bundlecaps=None, **kwargs): + if 'evo_obscommon' not in kwargs: + return orig(bundler, repo, source, heads, common, bundlecaps, **kwargs) + + if kwargs.get('obsmarkers', False): + if heads is None: + heads = repo.heads() + obscommon = kwargs.get('evo_obscommon', ()) + obsset = repo.set('::%ln - ::%ln', heads, obscommon) + subset = [c.node() for c in obsset] + markers = repo.obsstore.relevantmarkers(subset) + exchange.buildobsmarkerspart(bundler, markers) + @eh.wrapfunction(exchange, '_pullobsolete') def _pullobsolete(orig, pullop): if not obsolete._enabled: return None - b2xpull = pullop.remote.capable('_evoext_b2x_obsmarkers_0') + if 'obsmarkers' not in pullop.todosteps: + return None wirepull = pullop.remote.capable('_evoext_pullobsmarkers_0') - if not (b2xpull or wirepull): + if not wirepull: return orig(pullop) if 'obsolete' not in pullop.remote.listkeys('namespaces'): return None # remote opted out of obsolescence marker exchange tr = None ui = pullop.repo.ui - boundaries = _buildpullobsmerkersboundaries(pullop) + boundaries = _buildpullobsmarkersboundaries(pullop) if not set(boundaries['heads']) - set(boundaries['common']): obsexcmsg(ui, "nothing to pull\n") return None @@ -2769,33 +2608,7 @@ obsexcmsg(ui, "pull obsolescence markers\n", True) new = 0 - if b2xpull: - kwargs = {'bundlecaps': set(['HG2X'])} - capsblob = bundle2.encodecaps(pullop.repo.bundle2caps) - kwargs['bundlecaps'].add('bundle2=' + urllib.quote(capsblob)) - kwargs['heads'] = [nullid] - kwargs['common'] = [nullid] - kwargs['evo_obsmarker'] = '1' - kwargs['evo_obscommon'] = wireproto.encodelist(boundaries['common']) - kwargs['evo_obsheads'] = wireproto.encodelist(boundaries['heads']) - bundle = pullop.remote.getbundle('pull', **kwargs) - try: - op = bundle2.processbundle(pullop.repo, bundle, pullop.gettransaction) - except bundle2.UnknownPartError, exc: - raise util.Abort('missing support for %s' % exc) - bytes = new = 0 - for entry in op.records['evo_obsmarkers']: - bytes += entry.get('bytes', 0) - new += entry.get('new', 0) - if 5 < bytes: - obsexcmsg(ui, "merging obsolescence markers (%i bytes)\n" - % bytes) - obsexcmsg(ui, "%i obsolescence markers added\n" % new, True) - tr = op.gettransaction() - else: - obsexcmsg(ui, "no unknown remote markers\n") - obsexcmsg(ui, "DONE\n") - elif wirepull: + if wirepull: obsdata = pullop.remote.evoext_pullobsmarkers_0(**boundaries) obsdata = obsdata.read() if len(obsdata) > 5: @@ -2830,7 +2643,8 @@ nodes = [c.node() for c in repo.set(revset, *args)] markers = repo.obsstore.relevantmarkers(nodes) obsdata = StringIO() - _encodemarkersstream(obsdata, markers) + for chunk in obsolete.encodemarkers(markers, True): + obsdata.write(chunk) obsdata.seek(0) return obsdata @@ -2898,7 +2712,7 @@ sha.update(p) tmarkers = repo.obsstore.relevantmarkers([ctx.node()]) if tmarkers: - bmarkers = [obsolete._encodeonemarker(m) for m in tmarkers] + bmarkers = [obsolete._fm0encodeonemarker(m) for m in tmarkers] bmarkers.sort() for m in bmarkers: entry += 1 @@ -2921,77 +2735,6 @@ ui.status('%s %s\n' % (node.hex(chg), node.hex(obs))) -### Set discovery START - -import random -from mercurial import dagutil -from mercurial import setdiscovery - -def _obshash(repo, nodes): - hashs = _obsrelsethashtree(repo) - nm = repo.changelog.nodemap - return [hashs[nm.get(n)][1] for n in nodes] - -def srv_obshash(repo, proto, nodes): - return wireproto.encodelist(_obshash(repo, wireproto.decodelist(nodes))) - -@eh.addattr(localrepo.localpeer, 'evoext_obshash') -def local_obshash(peer, nodes): - return _obshash(peer._repo, nodes) - -@eh.addattr(wireproto.wirepeer, 'evoext_obshash') -def peer_obshash(self, nodes): - d = self._call("evoext_obshash", nodes=wireproto.encodelist(nodes)) - try: - return wireproto.decodelist(d) - except ValueError: - self._abort(error.ResponseError(_("unexpected response:"), d)) - -def findcommonobsmarkers(ui, local, remote, probeset, - initialsamplesize=100, - fullsamplesize=200): - # from discovery - roundtrips = 0 - cl = local.changelog - dag = dagutil.revlogdag(cl) - localhash = _obsrelsethashtree(local) - missing = set() - common = set() - undecided = set(probeset) - _takefullsample = setdiscovery._takefullsample - - while undecided: - - ui.note(_("sampling from both directions\n")) - sample = _takefullsample(dag, undecided, size=fullsamplesize) - - roundtrips += 1 - ui.debug("query %i; still undecided: %i, sample size is: %i\n" - % (roundtrips, len(undecided), len(sample))) - # indices between sample and externalized version must match - sample = list(sample) - remotehash = remote.evoext_obshash(dag.externalizeall(sample)) - - yesno = [localhash[ix][1] == remotehash[si] - for si, ix in enumerate(sample)] - - commoninsample = set(n for i, n in enumerate(sample) if yesno[i]) - common.update(dag.ancestorset(commoninsample, common)) - - missinginsample = [n for i, n in enumerate(sample) if not yesno[i]] - missing.update(dag.descendantset(missinginsample, missing)) - - undecided.difference_update(missing) - undecided.difference_update(common) - - - result = dag.headsetofconnecteds(common) - ui.debug("%d total queries\n" % roundtrips) - - if not result: - return set([nullid]) - return dag.externalizeall(result) - @eh.wrapfunction(wireproto, 'capabilities') def capabilities(orig, repo, proto): """wrapper to advertise new capability""" @@ -3000,17 +2743,15 @@ caps += ' _evoext_pushobsmarkers_0' caps += ' _evoext_pullobsmarkers_0' caps += ' _evoext_obshash_0' - caps += ' _evoext_b2x_obsmarkers_0' + caps += ' _evoext_getbundle_obscommon' return caps @eh.extsetup def _installwireprotocol(ui): localrepo.moderncaps.add('_evoext_pullobsmarkers_0') - localrepo.moderncaps.add('_evoext_b2x_obsmarkers_0') hgweb_mod.perms['evoext_pushobsmarkers_0'] = 'push' hgweb_mod.perms['evoext_pullobsmarkers_0'] = 'pull' - hgweb_mod.perms['evoext_obshash'] = 'pull' wireproto.commands['evoext_pushobsmarkers_0'] = (srv_pushobsmarkers, '') wireproto.commands['evoext_pullobsmarkers_0'] = (srv_pullobsmarkers, '*') # wrap command content @@ -3018,4 +2759,3 @@ def newcap(repo, proto): return capabilities(oldcap, repo, proto) wireproto.commands['capabilities'] = (newcap, args) - wireproto.commands['evoext_obshash'] = (srv_obshash, 'nodes')
--- a/hgext/simple4server.py Tue Sep 30 10:27:54 2014 -0500 +++ b/hgext/simple4server.py Thu Oct 02 14:16:32 2014 -0500 @@ -75,15 +75,6 @@ repo.hook('evolve_pushobsmarkers') return wireproto.pushres(0) -# from mercurial.obsolete: 19e9478c1a22 -def _encodemarkersstream(fp, markers): - """write a binary version of a set of markers - - Includes the initial version number""" - fp.write(_pack('>B', 0)) - for mark in markers: - fp.write(obsolete._encodeonemarker(mark)) - # from evolve extension: 1a23c7c52a43 def _getobsmarkersstream(repo, heads=None, common=None): """Get a binary stream for all markers relevant to `::<heads> - ::<common>` @@ -104,7 +95,8 @@ nodes = [c.node() for c in repo.set(revset, *args)] markers = repo.obsstore.relevantmarkers(nodes) obsdata = StringIO() - _encodemarkersstream(obsdata, markers) + for chunk in obsolete.encodemarkers(markers, True): + obsdata.write(chunk) obsdata.seek(0) return obsdata @@ -208,7 +200,7 @@ sha.update(p) tmarkers = repo.obsstore.relevantmarkers([ctx.node()]) if tmarkers: - bmarkers = [obsolete._encodeonemarker(m) for m in tmarkers] + bmarkers = [obsolete._fm0encodeonemarker(m) for m in tmarkers] bmarkers.sort() for m in bmarkers: entry += 1 @@ -226,7 +218,8 @@ (special case so that all empty are hashed as nullid)""" hashs = _obsrelsethashtree(repo) nm = repo.changelog.nodemap - return [hashs[nm.get(n)][1] for n in nodes] + revs = [nm.get(n) for n in nodes] + return [r is None and node.nullid or hashs[r][1] for r in revs] # from evolve extension: 1a23c7c52a43 def srv_obshash(repo, proto, nodes): @@ -244,22 +237,28 @@ caps += ' _evoext_pushobsmarkers_0' caps += ' _evoext_pullobsmarkers_0' caps += ' _evoext_obshash_0' - caps += ' _evoext_b2x_obsmarkers_0' + caps += ' _evoext_getbundle_obscommon' return caps +def _getbundleobsmarkerpart(orig, bundler, repo, source, heads=None, common=None, + bundlecaps=None, **kwargs): + if 'evo_obscommon' not in kwargs: + return orig(bundler, repo, source, heads, common, bundlecaps, **kwargs) + + if kwargs.get('obsmarkers', False): + if heads is None: + heads = repo.heads() + obscommon = kwargs.get('evo_obscommon', ()) + obsset = repo.set('::%ln - ::%ln', heads, obscommon) + subset = [c.node() for c in obsset] + markers = repo.obsstore.relevantmarkers(subset) + exchange.buildobsmarkerspart(bundler, markers) # from evolve extension: 10867a8e27c6 # heavily modified def extsetup(ui): localrepo.moderncaps.add('_evoext_b2x_obsmarkers_0') - if gboptsmap is not None: - gboptsmap['evo_obsmarker'] = 'plain' - gboptsmap['evo_obscommon'] = 'plain' - gboptsmap['evo_obsheads'] = 'plain' - else: - gboptslist.append('evo_obsheads') - gboptslist.append('evo_obscommon') - gboptslist.append('evo_obsmarker') + gboptsmap['evo_obscommon'] = 'nodes' if not util.safehasattr(obsolete.obsstore, 'relevantmarkers'): obsolete.obsstore = pruneobsstore obsolete.obsstore.relevantmarkers = relevantmarkers @@ -269,7 +268,7 @@ wireproto.commands['evoext_pushobsmarkers_0'] = (srv_pushobsmarkers, '') wireproto.commands['evoext_pullobsmarkers_0'] = (srv_pullobsmarkers, '*') # wrap module content - extensions.wrapfunction(exchange, '_getbundleextrapart', _getbundleextrapart) + extensions.wrapfunction(exchange, '_pullbundle2extraprepare', _getbundleobsmarkerpart) extensions.wrapfunction(wireproto, 'capabilities', capabilities) # wrap command content oldcap, args = wireproto.commands['capabilities'] @@ -281,47 +280,3 @@ extensions.wrapfunction(pushkey, '_nslist', _nslist) pushkey._namespaces['namespaces'] = (lambda *x: False, pushkey._nslist) - -#from evolve extension -@bundle2.parthandler('evolve:b2x:obsmarkerv1') -def handleobsmarkerv1(op, inpart): - """add a stream of obsmarker to the repo""" - tr = op.gettransaction() - advparams = dict(inpart.advisoryparams) - length = advparams.get('totalbytes') - if length is None: - obsdata = inpart.read() - else: - length = int(length) - data = StringIO() - current = 0 - op.ui.progress('OBSEXC', current, unit="bytes", total=length) - while current < length: - readsize = min(length-current, 4096) - data.write(inpart.read(readsize)) - current += readsize - op.ui.progress('OBSEXC', current, unit="bytes", total=length) - op.ui.progress('OBSEXC', None) - obsdata = data.getvalue() - totalsize = len(obsdata) - old = len(op.repo.obsstore._all) - op.repo.obsstore.mergemarkers(tr, obsdata) - new = len(op.repo.obsstore._all) - old - op.records.add('evo_obsmarkers', {'new': new, 'bytes': totalsize}) - tr.hookargs['evolve_new_obsmarkers'] = str(new) - -#from evolve extension -def _getbundleextrapart(orig, bundler, repo, source, **kwargs): - if int(kwargs.pop('evo_obsmarker', False)): - common = kwargs.pop('evo_obscommon') - common = wireproto.decodelist(common) - heads = kwargs.pop('evo_obsheads') - heads = wireproto.decodelist(heads) - obsdata = _getobsmarkersstream(repo, common=common, heads=heads) - if len(obsdata.getvalue()) > 5: - advparams = [('totalbytes', str(len(obsdata.getvalue())))] - obspart = bundle2.bundlepart('EVOLVE:B2X:OBSMARKERV1', - advisoryparams=advparams, - data=obsdata) - bundler.addpart(obspart) - orig(bundler, repo, source)
--- a/tests/_exc-util.sh Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/_exc-util.sh Thu Oct 02 14:16:32 2014 -0500 @@ -12,7 +12,8 @@ publish=False [experimental] -verbose-obsolescence-exchange=true +verbose-obsolescence-exchange=false +bundle2-exp=true [alias] debugobsolete=debugobsolete -d '0 0'
--- a/tests/test-corrupt.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-corrupt.t Thu Oct 02 14:16:32 2014 -0500 @@ -112,6 +112,7 @@ adding file changes added 1 changesets with 2 changes to 2 files pushing 2 obsolescence markers (147 bytes) + 2 obsolescence markers added $ hg -R ../other verify checking changesets checking manifests
--- a/tests/test-evolve.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-evolve.t Thu Oct 02 14:16:32 2014 -0500 @@ -697,9 +697,8 @@ 1 successors: 10 2 successors: 0 more than 2 successors: 0 - average meta length: 27 + average meta length: 9 available keys: - date: 10 user: 10 disconnected clusters: 1 any known node: 1
--- a/tests/test-exchange-A1.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-A1.t Thu Oct 02 14:16:32 2014 -0500 @@ -68,14 +68,11 @@ ## pushing "A" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 obsolescence markers (65 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files + remote: 1 new obsolescence markers ## post push state # obstore: main aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -89,10 +86,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (65 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main @@ -118,14 +112,11 @@ ## pushing from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 obsolescence markers (65 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files + remote: 1 new obsolescence markers ## post push state # obstore: main aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -139,10 +130,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (65 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main @@ -227,14 +215,11 @@ ## pushing "B" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 2 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 1 obsolescence markers (65 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 2 changesets with 2 changes to 2 files + remote: 1 new obsolescence markers ## post push state # obstore: main aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -248,10 +233,7 @@ adding manifests adding file changes added 2 changesets with 2 changes to 2 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (65 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main @@ -274,14 +256,11 @@ ## pushing from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 2 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 1 obsolescence markers (65 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 2 changesets with 2 changes to 2 files + remote: 1 new obsolescence markers ## post push state # obstore: main aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -295,10 +274,7 @@ adding manifests adding file changes added 2 changesets with 2 changes to 2 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (65 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main
--- a/tests/test-exchange-A2.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-A2.t Thu Oct 02 14:16:32 2014 -0500 @@ -76,14 +76,11 @@ ## pushing "A" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 obsolescence markers (65 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files + remote: 1 new obsolescence markers ## post push state # obstore: main aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -98,10 +95,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (65 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main
--- a/tests/test-exchange-A3.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-A3.t Thu Oct 02 14:16:32 2014 -0500 @@ -88,14 +88,11 @@ ## pushing "A1" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 obsolescence markers (65 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files + remote: 1 new obsolescence markers ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -110,10 +107,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (65 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main @@ -192,14 +186,11 @@ ## pushing "A1" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files (+1 heads) - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 obsolescence markers (65 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files (+1 heads) + remote: 1 new obsolescence markers ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -214,10 +205,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 2 files (+1 heads) - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (65 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers (run 'hg heads' to see heads, 'hg merge' to merge) 1 new unstable changesets ## post pull state
--- a/tests/test-exchange-A4.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-A4.t Thu Oct 02 14:16:32 2014 -0500 @@ -81,14 +81,11 @@ ## pushing "B" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 2 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 1 obsolescence markers (65 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 2 changesets with 2 changes to 2 files + remote: 1 new obsolescence markers ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -103,10 +100,7 @@ adding manifests adding file changes added 2 changesets with 2 changes to 2 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (65 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main
--- a/tests/test-exchange-A5.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-A5.t Thu Oct 02 14:16:32 2014 -0500 @@ -88,14 +88,11 @@ ## pushing "B1" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 obsolescence markers (65 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files + remote: 1 new obsolescence markers ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f 8c0a98c8372212c6efde4bfdcef006f27ff759d3 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -111,10 +108,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (65 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main
--- a/tests/test-exchange-A6.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-A6.t Thu Oct 02 14:16:32 2014 -0500 @@ -80,10 +80,7 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 obsolescence markers (65 bytes) - OBSEXC: DONE + remote: 1 new obsolescence markers ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -93,10 +90,7 @@ ## pulling "e5ea8f9c7314" from main into pulldest pulling from main no changes found - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (65 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers ## post pull state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -119,10 +113,7 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 1 obsolescence markers (65 bytes) - OBSEXC: DONE + remote: 1 new obsolescence markers ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -133,10 +124,7 @@ pulling from main searching for changes no changes found - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (65 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers ## post pull state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-A7.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-A7.t Thu Oct 02 14:16:32 2014 -0500 @@ -60,10 +60,6 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 1 nodes - OBSEXC: no marker to push - OBSEXC: DONE ## post push state # obstore: main aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -72,9 +68,6 @@ ## pulling "a9bdc8b26820" from main into pulldest pulling from main no changes found - OBSEXC: pull obsolescence markers - OBSEXC: no unknown remote markers - OBSEXC: DONE ## post pull state # obstore: main aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-B1.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-B1.t Thu Oct 02 14:16:32 2014 -0500 @@ -67,14 +67,11 @@ ## pushing "A" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 obsolescence markers (89 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files + remote: 1 new obsolescence markers ## post push state # obstore: main f6fbb35d8ac958bbe70035e4c789c18471cdc0af 0 {f5bc6836db60e308a17ba08bf050154ba9c4fad7} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -88,10 +85,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (89 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main @@ -114,14 +108,11 @@ ## pushing from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 1 obsolescence markers (89 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files + remote: 1 new obsolescence markers ## post push state # obstore: main f6fbb35d8ac958bbe70035e4c789c18471cdc0af 0 {f5bc6836db60e308a17ba08bf050154ba9c4fad7} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -135,10 +126,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (89 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main
--- a/tests/test-exchange-B2.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-B2.t Thu Oct 02 14:16:32 2014 -0500 @@ -63,10 +63,7 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 1 obsolescence markers (89 bytes) - OBSEXC: DONE + remote: 1 new obsolescence markers ## post push state # obstore: main f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -76,10 +73,7 @@ ## pulling "a9bdc8b26820" from main into pulldest pulling from main no changes found - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (89 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers ## post pull state # obstore: main f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -102,10 +96,7 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 1 obsolescence markers (89 bytes) - OBSEXC: DONE + remote: 1 new obsolescence markers ## post push state # obstore: main f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -116,10 +107,7 @@ pulling from main searching for changes no changes found - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (89 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers ## post pull state # obstore: main f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-B3.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-B3.t Thu Oct 02 14:16:32 2014 -0500 @@ -75,14 +75,10 @@ ## pushing "A" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: no marker to push - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files ## post push state # obstore: main e56289ab6378dc752fd7965f8bf66b58bda740bd 0 {35b1839966785d5703a01607229eea932db42f87} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -95,9 +91,6 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - OBSEXC: pull obsolescence markers - OBSEXC: no unknown remote markers - OBSEXC: DONE (run 'hg update' to get a working copy) ## post pull state # obstore: main
--- a/tests/test-exchange-B4.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-B4.t Thu Oct 02 14:16:32 2014 -0500 @@ -41,17 +41,17 @@ $ hg push ../pushdest pushing to ../pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 2 files + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 2 changesets with 2 changes to 2 files $ hg push ../pulldest pushing to ../pulldest searching for changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 2 files + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 2 changesets with 2 changes to 2 files $ hg update -q 0 $ mkcommit C created new head @@ -89,10 +89,7 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 1 obsolescence markers (89 bytes) - OBSEXC: DONE + remote: 1 new obsolescence markers ## post push state # obstore: main 7f7f229b13a629a5b20581c6cb723f4e2ca54bed 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -102,10 +99,7 @@ ## pulling "a9bdc8b26820" from main into pulldest pulling from main no changes found - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (89 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers ## post pull state # obstore: main 7f7f229b13a629a5b20581c6cb723f4e2ca54bed 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -128,10 +122,7 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 1 obsolescence markers (89 bytes) - OBSEXC: DONE + remote: 1 new obsolescence markers ## post push state # obstore: main 7f7f229b13a629a5b20581c6cb723f4e2ca54bed 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -142,10 +133,7 @@ pulling from main searching for changes no changes found - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (89 bytes) - OBSEXC: 1 obsolescence markers added - OBSEXC: DONE + 1 new obsolescence markers ## post pull state # obstore: main 7f7f229b13a629a5b20581c6cb723f4e2ca54bed 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-B5.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-B5.t Thu Oct 02 14:16:32 2014 -0500 @@ -87,14 +87,11 @@ ## pushing "B" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 2 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 2 obsolescence markers (153 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 2 changesets with 2 changes to 2 files + remote: 2 new obsolescence markers ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -110,10 +107,7 @@ adding manifests adding file changes added 2 changesets with 2 changes to 2 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (153 bytes) - OBSEXC: 2 obsolescence markers added - OBSEXC: DONE + 2 new obsolescence markers (run 'hg update' to get a working copy) 1 new unstable changesets ## post pull state @@ -142,14 +136,11 @@ ## pushing "B" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 2 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 3 nodes - OBSEXC: pushing 2 obsolescence markers (153 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 2 changesets with 2 changes to 2 files + remote: 2 new obsolescence markers ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -165,10 +156,7 @@ adding manifests adding file changes added 2 changesets with 2 changes to 2 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (153 bytes) - OBSEXC: 2 obsolescence markers added - OBSEXC: DONE + 2 new obsolescence markers (run 'hg update' to get a working copy) 1 new unstable changesets ## post pull state
--- a/tests/test-exchange-B6.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-B6.t Thu Oct 02 14:16:32 2014 -0500 @@ -75,10 +75,7 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 2 obsolescence markers (153 bytes) - OBSEXC: DONE + remote: 2 new obsolescence markers ## post push state # obstore: main 962ecf6b1afc94e15c7e48fdfb76ef8abd11372b f6298a8ac3a4b78bbeae5f1d3dc5bc3c3812f0f3 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -90,10 +87,7 @@ ## pulling "a9bdc8b26820" from main into pulldest pulling from main no changes found - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (153 bytes) - OBSEXC: 2 obsolescence markers added - OBSEXC: DONE + 2 new obsolescence markers ## post pull state # obstore: main 962ecf6b1afc94e15c7e48fdfb76ef8abd11372b f6298a8ac3a4b78bbeae5f1d3dc5bc3c3812f0f3 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-B7.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-B7.t Thu Oct 02 14:16:32 2014 -0500 @@ -67,10 +67,6 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 1 nodes - OBSEXC: no marker to push - OBSEXC: DONE ## post push state # obstore: main f6fbb35d8ac958bbe70035e4c789c18471cdc0af 0 {f5bc6836db60e308a17ba08bf050154ba9c4fad7} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -79,9 +75,6 @@ ## pulling "a9bdc8b26820" from main into pulldest pulling from main no changes found - OBSEXC: pull obsolescence markers - OBSEXC: no unknown remote markers - OBSEXC: DONE ## post pull state # obstore: main f6fbb35d8ac958bbe70035e4c789c18471cdc0af 0 {f5bc6836db60e308a17ba08bf050154ba9c4fad7} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-C1.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-C1.t Thu Oct 02 14:16:32 2014 -0500 @@ -70,10 +70,7 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 2 obsolescence markers (177 bytes) - OBSEXC: DONE + remote: 2 new obsolescence markers ## post push state # obstore: main f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -85,10 +82,7 @@ ## pulling "a9bdc8b26820" from main into pulldest pulling from main no changes found - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (177 bytes) - OBSEXC: 2 obsolescence markers added - OBSEXC: DONE + 2 new obsolescence markers ## post pull state # obstore: main f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -115,10 +109,7 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 2 obsolescence markers (177 bytes) - OBSEXC: DONE + remote: 2 new obsolescence markers ## post push state # obstore: main f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -131,10 +122,7 @@ pulling from main searching for changes no changes found - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (177 bytes) - OBSEXC: 2 obsolescence markers added - OBSEXC: DONE + 2 new obsolescence markers ## post pull state # obstore: main f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-C2.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-C2.t Thu Oct 02 14:16:32 2014 -0500 @@ -76,14 +76,11 @@ ## pushing "A1" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 2 obsolescence markers (153 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files + remote: 2 new obsolescence markers ## post push state # obstore: main 06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -99,10 +96,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (153 bytes) - OBSEXC: 2 obsolescence markers added - OBSEXC: DONE + 2 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main @@ -129,14 +123,11 @@ ## pushing from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 2 obsolescence markers (153 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files + remote: 2 new obsolescence markers ## post push state # obstore: main 06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -152,10 +143,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (153 bytes) - OBSEXC: 2 obsolescence markers added - OBSEXC: DONE + 2 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main
--- a/tests/test-exchange-C3.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-C3.t Thu Oct 02 14:16:32 2014 -0500 @@ -83,10 +83,7 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 3 obsolescence markers (241 bytes) - OBSEXC: DONE + remote: 3 new obsolescence markers ## post push state # obstore: main 06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -100,10 +97,7 @@ ## pulling "a9bdc8b26820" from main into pulldest pulling from main no changes found - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (241 bytes) - OBSEXC: 3 obsolescence markers added - OBSEXC: DONE + 3 new obsolescence markers ## post pull state # obstore: main 06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -134,10 +128,7 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 3 obsolescence markers (241 bytes) - OBSEXC: DONE + remote: 3 new obsolescence markers ## post push state # obstore: main 06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -152,10 +143,7 @@ pulling from main searching for changes no changes found - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (241 bytes) - OBSEXC: 3 obsolescence markers added - OBSEXC: DONE + 3 new obsolescence markers ## post pull state # obstore: main 06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-C4.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-C4.t Thu Oct 02 14:16:32 2014 -0500 @@ -90,10 +90,7 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 2 obsolescence markers (153 bytes) - OBSEXC: DONE + remote: 2 new obsolescence markers ## post push state # obstore: main 7f7f229b13a629a5b20581c6cb723f4e2ca54bed 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -106,10 +103,7 @@ ## pulling "a9bdc8b26820" from main into pulldest pulling from main no changes found - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (153 bytes) - OBSEXC: 2 obsolescence markers added - OBSEXC: DONE + 2 new obsolescence markers ## post pull state # obstore: main 7f7f229b13a629a5b20581c6cb723f4e2ca54bed 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-D1.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-D1.t Thu Oct 02 14:16:32 2014 -0500 @@ -70,14 +70,11 @@ ## pushing "A1" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 2 obsolescence markers (153 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files + remote: 2 new obsolescence markers ## post push state # obstore: main 06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -93,10 +90,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (153 bytes) - OBSEXC: 2 obsolescence markers added - OBSEXC: DONE + 2 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main
--- a/tests/test-exchange-D2.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-D2.t Thu Oct 02 14:16:32 2014 -0500 @@ -67,10 +67,7 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 1 nodes - OBSEXC: pushing 2 obsolescence markers (153 bytes) - OBSEXC: DONE + remote: 2 new obsolescence markers ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -83,10 +80,7 @@ pulling from main searching for changes no changes found - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (153 bytes) - OBSEXC: 2 obsolescence markers added - OBSEXC: DONE + 2 new obsolescence markers ## post pull state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-D3.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-D3.t Thu Oct 02 14:16:32 2014 -0500 @@ -72,10 +72,6 @@ pushing to pushdest searching for changes no changes found - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 1 nodes - OBSEXC: no marker to push - OBSEXC: DONE ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f 6aa67a7b4baa6fb41b06aed38d5b1201436546e2 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -85,9 +81,6 @@ ## pulling "a9bdc8b26820" from main into pulldest pulling from main no changes found - OBSEXC: pull obsolescence markers - OBSEXC: no unknown remote markers - OBSEXC: DONE ## post pull state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f 6aa67a7b4baa6fb41b06aed38d5b1201436546e2 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-D4.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-exchange-D4.t Thu Oct 02 14:16:32 2014 -0500 @@ -85,14 +85,11 @@ ## pushing "A1" from main to pushdest pushing to pushdest searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - OBSEXC: computing relevant nodes - OBSEXC: computing markers relevant to 2 nodes - OBSEXC: pushing 2 obsolescence markers (129 bytes) - OBSEXC: DONE + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files + remote: 2 new obsolescence markers ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -110,10 +107,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - OBSEXC: pull obsolescence markers - OBSEXC: merging obsolescence markers (129 bytes) - OBSEXC: 2 obsolescence markers added - OBSEXC: DONE + 2 new obsolescence markers (run 'hg update' to get a working copy) ## post pull state # obstore: main
--- a/tests/test-obsolete.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-obsolete.t Thu Oct 02 14:16:32 2014 -0500 @@ -184,6 +184,7 @@ adding file changes added 5 changesets with 5 changes to 5 files (+1 heads) pushing 2 obsolescence markers (129 bytes) + 2 obsolescence markers added $ hg -R ../other-new verify checking changesets checking manifests @@ -238,6 +239,7 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) pushing 3 obsolescence markers (193 bytes) + 1 obsolescence markers added $ qlog -R ../other-new 5 - 95de7fc6918d @@ -260,6 +262,7 @@ searching for changes no changes found pushing 3 obsolescence markers (193 bytes) + 0 obsolescence markers added [1] $ hg up --hidden -q .^ # 3 @@ -539,6 +542,7 @@ adding file changes added 2 changesets with 1 changes to [12] files (re) pushing 7 obsolescence markers (467 bytes) + 3 obsolescence markers added $ hg up -q 10 $ mkcommit "obsol_d'''" created new head @@ -551,6 +555,7 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) pushing 8 obsolescence markers (531 bytes) + 1 obsolescence markers added $ cd .. check bumped detection @@ -814,18 +819,18 @@ Simple rewrite - $ hg --hidden debugobsoleterelevant 3 + $ hg --hidden debugobsolete --rev 3 4538525df7e2b9f09423636c61ef63a4cb872a2d 0d3f46688ccc6e756c7e96cf64c391c411309597 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} simple rewrite with a prune attached to it - $ hg debugobsoleterelevant 15 + $ hg debugobsolete --rev 15 0b1b6dd009c037985363e2290a0b579819f659db 705ab2a6b72e2cd86edb799ebe15f2695f86143e 0 (*) {'user': 'test'} (glob) 33d458d86621f3186c40bfccd77652f4a122743e 0 {0b1b6dd009c037985363e2290a0b579819f659db} (*) {'user': 'test'} (glob) Transitive rewrite - $ hg --hidden debugobsoleterelevant 8 + $ hg --hidden debugobsolete --rev 8 909a0fb57e5d909f353d89e394ffd7e0890fec88 159dfc9fa5d334d7e03a0aecfc7f7ab4c3431fea 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} 95de7fc6918dea4c9c8d5382f50649794b474c4a 909a0fb57e5d909f353d89e394ffd7e0890fec88 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} a7a6f2b5d8a54b81bc7aa2fba2934ad6d700a79e 95de7fc6918dea4c9c8d5382f50649794b474c4a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-prune.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-prune.t Thu Oct 02 14:16:32 2014 -0500 @@ -273,9 +273,8 @@ 1 successors: 0 2 successors: 0 more than 2 successors: 0 - average meta length: (27|71) (re) + average meta length: 9 available keys: - date: 4 user: 4 disconnected clusters: 4 any known node: 4
--- a/tests/test-sharing.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-sharing.t Thu Oct 02 14:16:32 2014 -0500 @@ -113,6 +113,7 @@ adding file changes added 1 changesets with 1 changes to 1 files pushing 4 obsolescence markers (341 bytes) + 4 obsolescence markers added Figure SG05 $ hg -R ../public shortlog -G
--- a/tests/test-simple4server.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-simple4server.t Thu Oct 02 14:16:32 2014 -0500 @@ -29,6 +29,7 @@ no changes found updating to branch default 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cat ./errors.log $ echo "[extensions]" >> ./client/.hg/hgrc $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> ./client/.hg/hgrc $ cp -r client other @@ -50,6 +51,7 @@ pulling from http://localhost:$HGPORT/ searching for changes no changes found + $ cat ../errors.log $ hg pull -R ../other pulling from http://localhost:$HGPORT/ requesting all changes @@ -59,19 +61,21 @@ added 2 changesets with 2 changes to 2 files pull obsolescence markers (run 'hg update' to get a working copy) + $ cat ../errors.log $ hg push -R ../other pushing to http://localhost:$HGPORT/ searching for changes no changes found [1] + $ cat ../errors.log Capacity testing =================== $ curl --silent http://localhost:$HGPORT/?cmd=hello - capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_b2x_obsmarkers_0 + capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_getbundle_obscommon $ curl --silent http://localhost:$HGPORT/?cmd=capabilities - lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_b2x_obsmarkers_0 (no-eol) + lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_getbundle_obscommon (no-eol) $ curl --silent "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort bookmarks @@ -92,11 +96,13 @@ remote: adding file changes remote: added 1 changesets with 1 changes to 1 files (+1 heads) pushing 2 obsolescence markers (171 bytes) + $ cat ../errors.log $ hg push pushing to http://localhost:$HGPORT/ searching for changes no changes found [1] + $ cat ../errors.log Pull ============= @@ -111,10 +117,12 @@ pull obsolescence markers 2 obsolescence markers added (run 'hg heads' to see heads) + $ cat ../errors.log $ hg -R ../other pull pulling from http://localhost:$HGPORT/ searching for changes no changes found + $ cat ../errors.log $ cd .. @@ -128,9 +136,9 @@ obsolete phases $ curl --silent http://localhost:$HGPORT/?cmd=hello - capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_b2x_obsmarkers_0 + capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_getbundle_obscommon $ curl --silent http://localhost:$HGPORT/?cmd=capabilities - lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_b2x_obsmarkers_0 (no-eol) + lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_getbundle_obscommon (no-eol) $ echo '[__temporary__]' >> server/.hg/hgrc $ echo 'advertiseobsolete=False' >> server/.hg/hgrc @@ -158,6 +166,6 @@ obsolete phases $ curl --silent http://localhost:$HGPORT/?cmd=hello - capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_b2x_obsmarkers_0 + capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_getbundle_obscommon $ curl --silent http://localhost:$HGPORT/?cmd=capabilities - lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_b2x_obsmarkers_0 (no-eol) + lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_getbundle_obscommon (no-eol)
--- a/tests/test-tutorial.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-tutorial.t Thu Oct 02 14:16:32 2014 -0500 @@ -404,6 +404,7 @@ adding file changes added 3 changesets with 3 changes to 1 files pushing 6 obsolescence markers (487 bytes) + 6 obsolescence markers added for simplicity sake we get the bathroom change in line again @@ -511,6 +512,7 @@ $ cd ../remote $ hg -R ../local/ showconfig phases + [1] the localrepo does not have any specific configuration for `phases.publish`. It is ``true`` by default. @@ -733,6 +735,7 @@ adding file changes added 2 changesets with 2 changes to 1 files (+1 heads) pushing 10 obsolescence markers (803 bytes) + 3 obsolescence markers added remote get a warning that current working directory is based on an obsolete changeset
--- a/tests/test-wireproto.t Tue Sep 30 10:27:54 2014 -0500 +++ b/tests/test-wireproto.t Thu Oct 02 14:16:32 2014 -0500 @@ -72,6 +72,7 @@ remote: adding file changes remote: added 1 changesets with 1 changes to 1 files (+1 heads) pushing 2 obsolescence markers (171 bytes) + remote: 2 obsolescence markers added $ hg push pushing to ssh://user@dummy/server searching for changes