##// END OF EJS Templates
help: adding a topic on flags...
help: adding a topic on flags This is a short topic to explain how command-line flags can be specified. Some users have been confused by hg offerring different flag syntax than some other libraries, so it'd be nice to point them to this rather than explaining it every time. Differential Revision: https://phab.mercurial-scm.org/D1270

File last commit:

r34201:bab82c43 default
r35036:b0262b25 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()
summary = ' '.join(descs)
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()