##// END OF EJS Templates
shelve: directly handle the initial parent alignment...
shelve: directly handle the initial parent alignment Shelve is currently sub-contracting some of its work to the rebase extension. In order to make shelve more independent and flexible we would like shelve to handle the parent alignment directly. After this change, we no longer need to use rebase in shelve. Differential Revision: https://phab.mercurial-scm.org/D3693

File last commit:

r36497:3b98ffd2 default
r38637:c829749e default
Show More
bruterebase.py
74 lines | 2.2 KiB | text/x-python | PythonLexer
Jun Wu
test-rebase: add a brute force test...
r33674 # bruterebase.py - brute force rebase testing
#
# Copyright 2017 Facebook, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from __future__ import absolute_import
from mercurial import (
error,
registrar,
revsetlang,
)
from hgext import rebase
Augie Fackler
bruterebase: port to python 3
r34201 try:
xrange
except NameError:
xrange = range
Jun Wu
test-rebase: add a brute force test...
r33674 cmdtable = {}
command = registrar.command(cmdtable)
Augie Fackler
bruterebase: port to python 3
r34201 @command(b'debugbruterebase')
Jun Wu
test-rebase: add a brute force test...
r33674 def debugbruterebase(ui, repo, source, dest):
"""for every non-empty subset of source, run rebase -r subset -d dest
Print one line summary for each subset. Assume obsstore is enabled.
"""
srevs = list(repo.revs(source))
with repo.wlock(), repo.lock():
repolen = len(repo)
cl = repo.changelog
def getdesc(rev):
result = cl.changelogrevision(rev).description
if rev >= repolen:
Augie Fackler
bruterebase: port to python 3
r34201 result += b"'"
Jun Wu
test-rebase: add a brute force test...
r33674 return result
for i in xrange(1, 2 ** len(srevs)):
subset = [rev for j, rev in enumerate(srevs) if i & (1 << j) != 0]
Augie Fackler
bruterebase: port to python 3
r34201 spec = revsetlang.formatspec(b'%ld', subset)
tr = repo.transaction(b'rebase')
Jun Wu
test-rebase: add a brute force test...
r33674 tr.report = lambda x: 0 # hide "transaction abort"
ui.pushbuffer()
try:
rebase.rebase(ui, repo, dest=dest, rev=[spec])
except error.Abort as ex:
Augie Fackler
bruterebase: port to python 3
r34201 summary = b'ABORT: %s' % ex
Jun Wu
test-rebase: add a brute force test...
r33674 except Exception as ex:
Augie Fackler
bruterebase: port to python 3
r34201 summary = b'CRASH: %s' % ex
Jun Wu
test-rebase: add a brute force test...
r33674 else:
# short summary about new nodes
cl = repo.changelog
descs = []
for rev in xrange(repolen, len(repo)):
Augie Fackler
bruterebase: port to python 3
r34201 desc = b'%s:' % getdesc(rev)
Jun Wu
test-rebase: add a brute force test...
r33674 for prev in cl.parentrevs(rev):
if prev > -1:
desc += getdesc(prev)
descs.append(desc)
descs.sort()
Pulkit Goyal
py3: add a missing b'' in tests/bruterebase.py...
r36497 summary = b' '.join(descs)
Jun Wu
test-rebase: add a brute force test...
r33674 ui.popbuffer()
Augie Fackler
bruterebase: port to python 3
r34201 repo.vfs.tryunlink(b'rebasestate')
Jun Wu
test-rebase: add a brute force test...
r33674
Augie Fackler
bruterebase: port to python 3
r34201 subsetdesc = b''.join(getdesc(rev) for rev in subset)
ui.write((b'%s: %s\n') % (subsetdesc.rjust(len(srevs)), summary))
Jun Wu
test-rebase: add a brute force test...
r33674 tr.abort()