##// END OF EJS Templates
scmutil: make shortest() respect disambiguation revset...
scmutil: make shortest() respect disambiguation revset The previous patch would let you use a shorter prefix if the prefix is unique within a configured revset. However, that's not very useful if there's no simple way of knowing what that shorter prefix is. This patch adapts the shortest() template function to use the shorter prefixes for nodes in the configured revset. This is currently extremely slow, because it calculates the revset for each call to shortest(). To make this faster, the next patch will start caching the revset instance. Ideally we'd cache a prefix tree instance instead. Differential Revision: https://phab.mercurial-scm.org/D4038

File last commit:

r36497:3b98ffd2 default
r38879:6f7c9527 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()