annotate tests/bruterebase.py @ 44209:ae4d729eb3c8

tests: add test showing crash when shelving ghosted rename target When you `hg rename` a file and then delete the rename target, `hg shelve` will give you a traceback. Note that the shelve succeeds and the shelve is correct, it's just the update to the parent that fails (i.e. to the parent of the commit that was created for the shelve). This can be squashed into the next commit if the reviewer prefers. Differential Revision: https://phab.mercurial-scm.org/D8045
author Martin von Zweigbergk <martinvonz@google.com>
date Wed, 29 Jan 2020 23:05:02 -0800
parents 2372284d9457
children d2e1dcd4490d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33708
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
1 # bruterebase.py - brute force rebase testing
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
2 #
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
3 # Copyright 2017 Facebook, Inc.
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
4 #
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
5 # This software may be used and distributed according to the terms of the
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
6 # GNU General Public License version 2 or any later version.
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
7
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
8 from __future__ import absolute_import
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
9
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
10 from mercurial import (
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
11 error,
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
12 registrar,
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
13 revsetlang,
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
14 )
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
15
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
16 from hgext import rebase
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
17
34204
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
18 try:
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
19 xrange
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
20 except NameError:
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
21 xrange = range
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
22
33708
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
23 cmdtable = {}
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
24 command = registrar.command(cmdtable)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
25
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39683
diff changeset
26
34204
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
27 @command(b'debugbruterebase')
33708
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
28 def debugbruterebase(ui, repo, source, dest):
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
29 """for every non-empty subset of source, run rebase -r subset -d dest
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
30
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
31 Print one line summary for each subset. Assume obsstore is enabled.
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
32 """
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
33 srevs = list(repo.revs(source))
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
34
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
35 with repo.wlock(), repo.lock():
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
36 repolen = len(repo)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
37 cl = repo.changelog
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
38
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
39 def getdesc(rev):
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
40 result = cl.changelogrevision(rev).description
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
41 if rev >= repolen:
34204
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
42 result += b"'"
33708
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
43 return result
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
44
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
45 for i in xrange(1, 2 ** len(srevs)):
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
46 subset = [rev for j, rev in enumerate(srevs) if i & (1 << j) != 0]
34204
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
47 spec = revsetlang.formatspec(b'%ld', subset)
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
48 tr = repo.transaction(b'rebase')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39683
diff changeset
49 tr._report = lambda x: 0 # hide "transaction abort"
33708
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
50
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
51 ui.pushbuffer()
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
52 try:
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
53 rebase.rebase(ui, repo, dest=dest, rev=[spec])
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
54 except error.Abort as ex:
34204
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
55 summary = b'ABORT: %s' % ex
33708
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
56 except Exception as ex:
34204
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
57 summary = b'CRASH: %s' % ex
33708
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
58 else:
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
59 # short summary about new nodes
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
60 cl = repo.changelog
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
61 descs = []
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
62 for rev in xrange(repolen, len(repo)):
34204
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
63 desc = b'%s:' % getdesc(rev)
33708
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
64 for prev in cl.parentrevs(rev):
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
65 if prev > -1:
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
66 desc += getdesc(prev)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
67 descs.append(desc)
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
68 descs.sort()
36479
3b98ffd2dde3 py3: add a missing b'' in tests/bruterebase.py
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34204
diff changeset
69 summary = b' '.join(descs)
33708
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
70 ui.popbuffer()
34204
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
71 repo.vfs.tryunlink(b'rebasestate')
33708
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
72
34204
bab82c43c065 bruterebase: port to python 3
Augie Fackler <raf@durin42.com>
parents: 33708
diff changeset
73 subsetdesc = b''.join(getdesc(rev) for rev in subset)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39683
diff changeset
74 ui.write(b'%s: %s\n' % (subsetdesc.rjust(len(srevs)), summary))
33708
71b77b61ed60 test-rebase: add a brute force test
Jun Wu <quark@fb.com>
parents:
diff changeset
75 tr.abort()