annotate tests/bruterebase.py @ 46472:98e39f04d60e

upgrade: implement partial upgrade for upgrading persistent-nodemap Upgrading repositories to use persistent nodemap should be fast and easy as it requires only two things: 1) Updating the requirements 2) Writing a persistent-nodemap on disk For both of the steps above, we don't need to edit existing revlogs. This patch makes upgrade only do the above mentioned two steps if we are only upgarding to use persistent-nodemap feature. Since `nodemap.persist_nodemap()` assumes that there exists a nodemap file for the given revlog if we are trying to call it, this patch adds `force` argument to create a file if does not exist which is true in our upgrade case. The test changes demonstrate that we no longer write nodemap files for manifest after upgrade which I think is desirable. Differential Revision: https://phab.mercurial-scm.org/D9936
author Pulkit Goyal <7895pulkit@gmail.com>
date Mon, 01 Feb 2021 00:02:00 +0530
parents d2e1dcd4490d
children 7a430116f639
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:
45682
d2e1dcd4490d errors: name arguments to Abort constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 43076
diff changeset
55 summary = b'ABORT: %s' % ex.message
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()