Mercurial > hg-stable
annotate tests/bruterebase.py @ 34942:2a774cae3a03 stable
merge: disable path conflict checking by default (issue5716)
We shouldn't ship a severe perf regression in hg update for 4.4.
Differential Revision: https://phab.mercurial-scm.org/D1223
author | Siddharth Agarwal <sid0@fb.com> |
---|---|
date | Tue, 24 Oct 2017 11:15:30 -0700 |
parents | bab82c43c065 |
children | 3b98ffd2dde3 |
rev | line source |
---|---|
33734 | 1 # bruterebase.py - brute force rebase testing |
2 # | |
3 # Copyright 2017 Facebook, Inc. | |
4 # | |
5 # This software may be used and distributed according to the terms of the | |
6 # GNU General Public License version 2 or any later version. | |
7 | |
8 from __future__ import absolute_import | |
9 | |
10 from mercurial import ( | |
11 error, | |
12 registrar, | |
13 revsetlang, | |
14 ) | |
15 | |
16 from hgext import rebase | |
17 | |
34211
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
18 try: |
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
19 xrange |
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
20 except NameError: |
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
21 xrange = range |
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
22 |
33734 | 23 cmdtable = {} |
24 command = registrar.command(cmdtable) | |
25 | |
34211
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
26 @command(b'debugbruterebase') |
33734 | 27 def debugbruterebase(ui, repo, source, dest): |
28 """for every non-empty subset of source, run rebase -r subset -d dest | |
29 | |
30 Print one line summary for each subset. Assume obsstore is enabled. | |
31 """ | |
32 srevs = list(repo.revs(source)) | |
33 | |
34 with repo.wlock(), repo.lock(): | |
35 repolen = len(repo) | |
36 cl = repo.changelog | |
37 | |
38 def getdesc(rev): | |
39 result = cl.changelogrevision(rev).description | |
40 if rev >= repolen: | |
34211
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
41 result += b"'" |
33734 | 42 return result |
43 | |
44 for i in xrange(1, 2 ** len(srevs)): | |
45 subset = [rev for j, rev in enumerate(srevs) if i & (1 << j) != 0] | |
34211
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
46 spec = revsetlang.formatspec(b'%ld', subset) |
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
47 tr = repo.transaction(b'rebase') |
33734 | 48 tr.report = lambda x: 0 # hide "transaction abort" |
49 | |
50 ui.pushbuffer() | |
51 try: | |
52 rebase.rebase(ui, repo, dest=dest, rev=[spec]) | |
53 except error.Abort as ex: | |
34211
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
54 summary = b'ABORT: %s' % ex |
33734 | 55 except Exception as ex: |
34211
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
56 summary = b'CRASH: %s' % ex |
33734 | 57 else: |
58 # short summary about new nodes | |
59 cl = repo.changelog | |
60 descs = [] | |
61 for rev in xrange(repolen, len(repo)): | |
34211
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
62 desc = b'%s:' % getdesc(rev) |
33734 | 63 for prev in cl.parentrevs(rev): |
64 if prev > -1: | |
65 desc += getdesc(prev) | |
66 descs.append(desc) | |
67 descs.sort() | |
68 summary = ' '.join(descs) | |
69 ui.popbuffer() | |
34211
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
70 repo.vfs.tryunlink(b'rebasestate') |
33734 | 71 |
34211
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
72 subsetdesc = b''.join(getdesc(rev) for rev in subset) |
bab82c43c065
bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents:
33734
diff
changeset
|
73 ui.write((b'%s: %s\n') % (subsetdesc.rjust(len(srevs)), summary)) |
33734 | 74 tr.abort() |