Mercurial > hg
annotate tests/simplestorerepo.py @ 37346:45a4799174a1
tests: disallow using simple store repo with bundlerepo
bundlerepo is... going to be difficult to port to an alternate
store because it assumes revlogs for storage and essentially
overlays the contents of a bundle onto a fake revlog-like
primitive. It will be a good test case for our eventual new
storage interface.
Refactoring bundlerepo to make it work with non-revlog storage is
going to be a bit of work. So for now, let's refuse to use the
simple store repo when a bundlerepo is in play.
A new test requirement advertising support for treating bundle
files as repo instances has been added. Some tests have been
made conditional on this feature. Additional tests will be
annotated in subsequent commits.
Having positive opt-in to repo features will be simpler in the
long run because it will allow multiple storage backends to
declare feature support and we won't have to annotate each test
with the set of repo backends that are supported. Again, we'll
probably want better integration between repo features and
tests. But this is the easiest we can do at the moment.
Differential Revision: https://phab.mercurial-scm.org/D3060
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 04 Apr 2018 11:44:38 -0700 |
parents | d62d2e346acf |
children | dd2753729853 |
rev | line source |
---|---|
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1 # simplestorerepo.py - Extension that swaps in alternate repository storage. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
2 # |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
3 # Copyright 2018 Gregory Szorc <gregory.szorc@gmail.com> |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
4 # |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
7 |
37338
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37337
diff
changeset
|
8 # To use this with the test suite: |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37337
diff
changeset
|
9 # |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37337
diff
changeset
|
10 # $ HGREPOFEATURES="simplestore" ./run-tests.py \ |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37337
diff
changeset
|
11 # --extra-config-opt extensions.simplestore=`pwd`/simplestorerepo.py |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37337
diff
changeset
|
12 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
13 from __future__ import absolute_import |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
14 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
15 from mercurial.i18n import _ |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
16 from mercurial.node import ( |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
17 bin, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
18 hex, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
19 nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
20 nullrev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
21 ) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
22 from mercurial.thirdparty import ( |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
23 cbor, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
24 ) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
25 from mercurial import ( |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
26 ancestor, |
37346
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37341
diff
changeset
|
27 bundlerepo, |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
28 error, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
29 filelog, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
30 mdiff, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
31 pycompat, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
32 revlog, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
33 ) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
34 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
35 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
36 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
37 # be specifying the version(s) of Mercurial they are tested with, or |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
38 # leave the attribute unspecified. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
39 testedwith = 'ships-with-hg-core' |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
40 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
41 def validatenode(node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
42 if isinstance(node, int): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
43 raise ValueError('expected node; got int') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
44 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
45 if len(node) != 20: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
46 raise ValueError('expected 20 byte node') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
47 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
48 def validaterev(rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
49 if not isinstance(rev, int): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
50 raise ValueError('expected int') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
51 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
52 class filestorage(object): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
53 """Implements storage for a tracked path. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
54 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
55 Data is stored in the VFS in a directory corresponding to the tracked |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
56 path. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
57 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
58 Index data is stored in an ``index`` file using CBOR. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
59 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
60 Fulltext data is stored in files having names of the node. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
61 """ |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
62 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
63 def __init__(self, svfs, path): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
64 self._svfs = svfs |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
65 self._path = path |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
66 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
67 self._storepath = b'/'.join([b'data', path]) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
68 self._indexpath = b'/'.join([self._storepath, b'index']) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
69 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
70 indexdata = self._svfs.tryread(self._indexpath) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
71 if indexdata: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
72 indexdata = cbor.loads(indexdata) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
73 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
74 self._indexdata = indexdata or [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
75 self._indexbynode = {} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
76 self._indexbyrev = {} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
77 self.index = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
78 self._refreshindex() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
79 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
80 # This is used by changegroup code :/ |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
81 self._generaldelta = True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
82 self.storedeltachains = False |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
83 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
84 self.version = 1 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
85 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
86 def _refreshindex(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
87 self._indexbynode.clear() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
88 self._indexbyrev.clear() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
89 self.index = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
90 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
91 for i, entry in enumerate(self._indexdata): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
92 self._indexbynode[entry[b'node']] = entry |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
93 self._indexbyrev[i] = entry |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
94 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
95 self._indexbynode[nullid] = { |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
96 b'node': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
97 b'p1': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
98 b'p2': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
99 b'linkrev': nullrev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 b'flags': 0, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
101 } |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
102 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
103 self._indexbyrev[nullrev] = { |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
104 b'node': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
105 b'p1': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
106 b'p2': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
107 b'linkrev': nullrev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
108 b'flags': 0, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
109 } |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
110 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
111 for i, entry in enumerate(self._indexdata): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
112 p1rev, p2rev = self.parentrevs(self.rev(entry[b'node'])) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
113 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
114 # start, length, rawsize, chainbase, linkrev, p1, p2, node |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
115 self.index.append((0, 0, 0, -1, entry[b'linkrev'], p1rev, p2rev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
116 entry[b'node'])) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
117 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
118 self.index.append((0, 0, 0, -1, -1, -1, -1, nullid)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
119 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
120 def __len__(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
121 return len(self._indexdata) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
122 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
123 def __iter__(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
124 return iter(range(len(self))) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
125 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
126 def revs(self, start=0, stop=None): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
127 step = 1 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
128 if stop is not None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
129 if start > stop: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
130 step = -1 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
131 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
132 stop += step |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
133 else: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
134 stop = len(self) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
135 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
136 return range(start, stop, step) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
137 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
138 def parents(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
139 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
140 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
141 if node not in self._indexbynode: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
142 raise KeyError('unknown node') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
143 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
144 entry = self._indexbynode[node] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
145 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
146 return entry[b'p1'], entry[b'p2'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
147 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
148 def parentrevs(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
149 p1, p2 = self.parents(self._indexbyrev[rev][b'node']) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
150 return self.rev(p1), self.rev(p2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
151 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
152 def rev(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
153 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
154 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
155 # Will raise KeyError. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
156 self._indexbynode[node] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
157 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
158 for rev, entry in self._indexbyrev.items(): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
159 if entry[b'node'] == node: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
160 return rev |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
161 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
162 raise error.ProgrammingError('this should not occur') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
163 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
164 def node(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
165 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
166 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
167 return self._indexbyrev[rev][b'node'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
168 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
169 def lookup(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
170 if isinstance(node, int): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
171 return self.node(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
172 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
173 if len(node) == 20: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
174 try: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
175 self.rev(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
176 return node |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
177 except LookupError: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
178 pass |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
179 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
180 try: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
181 rev = int(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
182 if '%d' % rev != node: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
183 raise ValueError |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
184 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
185 if rev < 0: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
186 rev = len(self) + rev |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
187 if rev < 0 or rev >= len(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
188 raise ValueError |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
189 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
190 return self.node(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
191 except (ValueError, OverflowError): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
192 pass |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
193 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
194 if len(node) == 40: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
195 try: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
196 rawnode = bin(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
197 self.rev(rawnode) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
198 return rawnode |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
199 except (TypeError, LookupError): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
200 pass |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
201 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
202 raise LookupError(node, self._path, _('invalid lookup input')) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
203 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
204 def linkrev(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
205 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
206 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
207 return self._indexbyrev[rev][b'linkrev'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
208 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
209 def flags(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
210 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
211 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
212 return self._indexbyrev[rev][b'flags'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
213 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
214 def deltaparent(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
215 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
216 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
217 p1node = self.parents(self.node(rev))[0] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
218 return self.rev(p1node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
219 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
220 def candelta(self, baserev, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
221 validaterev(baserev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
222 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
223 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
224 if ((self.flags(baserev) & revlog.REVIDX_RAWTEXT_CHANGING_FLAGS) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
225 or (self.flags(rev) & revlog.REVIDX_RAWTEXT_CHANGING_FLAGS)): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
226 return False |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
227 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
228 return True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
229 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
230 def rawsize(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
231 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
232 node = self.node(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
233 return len(self.revision(node, raw=True)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
234 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
235 def _processflags(self, text, flags, operation, raw=False): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
236 if flags == 0: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
237 return text, True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
238 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
239 validatehash = True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
240 # Depending on the operation (read or write), the order might be |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
241 # reversed due to non-commutative transforms. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
242 orderedflags = revlog.REVIDX_FLAGS_ORDER |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
243 if operation == 'write': |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
244 orderedflags = reversed(orderedflags) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
245 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
246 for flag in orderedflags: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
247 # If a flagprocessor has been registered for a known flag, apply the |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
248 # related operation transform and update result tuple. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
249 if flag & flags: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
250 vhash = True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
251 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
252 if flag not in revlog._flagprocessors: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
253 message = _("missing processor for flag '%#x'") % (flag) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
254 raise revlog.RevlogError(message) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
255 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
256 processor = revlog._flagprocessors[flag] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
257 if processor is not None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
258 readtransform, writetransform, rawtransform = processor |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
259 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
260 if raw: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
261 vhash = rawtransform(self, text) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
262 elif operation == 'read': |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
263 text, vhash = readtransform(self, text) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
264 else: # write operation |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
265 text, vhash = writetransform(self, text) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
266 validatehash = validatehash and vhash |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
267 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
268 return text, validatehash |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
269 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
270 def checkhash(self, text, node, p1=None, p2=None, rev=None): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
271 if p1 is None and p2 is None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
272 p1, p2 = self.parents(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
273 if node != revlog.hash(text, p1, p2): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
274 raise error.RevlogError(_("integrity check failed on %s") % |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
275 self._path) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
276 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
277 def revision(self, node, raw=False): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
278 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
279 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
280 if node == nullid: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
281 return b'' |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
282 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
283 self._indexbynode[node] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
284 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
285 rev = self.rev(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
286 flags = self.flags(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
287 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
288 path = b'/'.join([self._storepath, hex(node)]) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
289 rawtext = self._svfs.read(path) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
290 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
291 text, validatehash = self._processflags(rawtext, flags, 'read', raw=raw) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
292 if validatehash: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
293 self.checkhash(text, node, rev=rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
294 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
295 return text |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
296 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
297 def read(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
298 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
299 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
300 revision = self.revision(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
301 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
302 if not revision.startswith(b'\1\n'): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
303 return revision |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
304 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
305 start = revision.index(b'\1\n', 2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
306 return revision[start + 2:] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
307 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
308 def renamed(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
309 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
310 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
311 if self.parents(node)[0] != nullid: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
312 return False |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
313 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
314 fulltext = self.revision(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
315 m = filelog.parsemeta(fulltext)[0] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
316 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
317 if m and 'copy' in m: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
318 return m['copy'], bin(m['copyrev']) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
319 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
320 return False |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
321 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
322 def cmp(self, node, text): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
323 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
324 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
325 t = text |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
326 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
327 if text.startswith(b'\1\n'): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
328 t = b'\1\n\1\n' + text |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
329 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
330 p1, p2 = self.parents(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
331 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
332 if revlog.hash(t, p1, p2) == node: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
333 return False |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
334 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
335 if self.iscensored(self.rev(node)): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
336 return text != b'' |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
337 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
338 if self.renamed(node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
339 t2 = self.read(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
340 return t2 != text |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
341 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
342 return True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
343 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
344 def size(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
345 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
346 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
347 node = self._indexbyrev[rev][b'node'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
348 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
349 if self.renamed(node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
350 return len(self.read(node)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
351 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
352 if self.iscensored(rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
353 return 0 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
354 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
355 return len(self.revision(node)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
356 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
357 def iscensored(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
358 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
359 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
360 return self.flags(rev) & revlog.REVIDX_ISCENSORED |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
361 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
362 def commonancestorsheads(self, a, b): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
363 validatenode(a) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
364 validatenode(b) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
365 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
366 a = self.rev(a) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
367 b = self.rev(b) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
368 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
369 ancestors = ancestor.commonancestorsheads(self.parentrevs, a, b) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
370 return pycompat.maplist(self.node, ancestors) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
371 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
372 def descendants(self, revs): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
373 # This is a copy of revlog.descendants() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
374 first = min(revs) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
375 if first == nullrev: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
376 for i in self: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
377 yield i |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
378 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
379 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
380 seen = set(revs) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
381 for i in self.revs(start=first + 1): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
382 for x in self.parentrevs(i): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
383 if x != nullrev and x in seen: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
384 seen.add(i) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
385 yield i |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
386 break |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
387 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
388 # Required by verify. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
389 def files(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
390 entries = self._svfs.listdir(self._storepath) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
391 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
392 # Strip out undo.backup.* files created as part of transaction |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
393 # recording. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
394 entries = [f for f in entries if not f.startswith('undo.backup.')] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
395 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
396 return [b'/'.join((self._storepath, f)) for f in entries] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
397 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
398 # Required by verify. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
399 def checksize(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
400 return 0, 0 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
401 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
402 def add(self, text, meta, transaction, linkrev, p1, p2): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
403 if meta or text.startswith(b'\1\n'): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
404 text = filelog.packmeta(meta, text) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
405 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
406 return self.addrevision(text, transaction, linkrev, p1, p2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
407 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
408 def addrevision(self, text, transaction, linkrev, p1, p2, node=None, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
409 flags=0): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
410 validatenode(p1) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
411 validatenode(p2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
412 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
413 if flags: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
414 node = node or revlog.hash(text, p1, p2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
415 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
416 rawtext, validatehash = self._processflags(text, flags, 'write') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
417 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
418 node = node or revlog.hash(text, p1, p2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
419 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
420 if node in self._indexbynode: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
421 return node |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
422 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
423 if validatehash: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
424 self.checkhash(rawtext, node, p1=p1, p2=p2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
425 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
426 path = b'/'.join([self._storepath, hex(node)]) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
427 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
428 self._svfs.write(path, text) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
429 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
430 self._indexdata.append({ |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
431 b'node': node, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
432 b'p1': p1, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
433 b'p2': p2, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
434 b'linkrev': linkrev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
435 b'flags': flags, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
436 }) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
437 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
438 self._reflectindexupdate() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
439 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
440 return node |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
441 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
442 def _reflectindexupdate(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
443 self._refreshindex() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
444 self._svfs.write(self._indexpath, cbor.dumps(self._indexdata)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
445 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
446 def addgroup(self, deltas, linkmapper, transaction, addrevisioncb=None): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
447 nodes = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
448 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
449 transaction.addbackup(self._indexpath) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
450 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
451 for node, p1, p2, linknode, deltabase, delta, flags in deltas: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
452 linkrev = linkmapper(linknode) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
453 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
454 nodes.append(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
455 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
456 if node in self._indexbynode: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
457 continue |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
458 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
459 # Need to resolve the fulltext from the delta base. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
460 if deltabase == nullid: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
461 text = mdiff.patch(b'', delta) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
462 else: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
463 text = mdiff.patch(self.revision(deltabase), delta) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
464 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
465 self.addrevision(text, transaction, linkrev, p1, p2, flags) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
466 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
467 if addrevisioncb: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
468 addrevisioncb(self, node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
469 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
470 return nodes |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
471 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
472 def revdiff(self, rev1, rev2): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
473 validaterev(rev1) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
474 validaterev(rev2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
475 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
476 node1 = self.node(rev1) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
477 node2 = self.node(rev2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
478 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
479 return mdiff.textdiff(self.revision(node1, raw=True), |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
480 self.revision(node2, raw=True)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
481 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
482 def headrevs(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
483 # Assume all revisions are heads by default. |
37341
d62d2e346acf
simplestorerepo: avoid shadowing dict in list comprehension over dict
Augie Fackler <augie@google.com>
parents:
37338
diff
changeset
|
484 revishead = {rev: True for rev in self._indexbyrev} |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
485 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
486 for rev, entry in self._indexbyrev.items(): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
487 # Unset head flag for all seen parents. |
37341
d62d2e346acf
simplestorerepo: avoid shadowing dict in list comprehension over dict
Augie Fackler <augie@google.com>
parents:
37338
diff
changeset
|
488 revishead[self.rev(entry[b'p1'])] = False |
d62d2e346acf
simplestorerepo: avoid shadowing dict in list comprehension over dict
Augie Fackler <augie@google.com>
parents:
37338
diff
changeset
|
489 revishead[self.rev(entry[b'p2'])] = False |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
490 |
37341
d62d2e346acf
simplestorerepo: avoid shadowing dict in list comprehension over dict
Augie Fackler <augie@google.com>
parents:
37338
diff
changeset
|
491 return [rev for rev, ishead in sorted(revishead.items()) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
492 if ishead] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
493 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
494 def heads(self, start=None, stop=None): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
495 # This is copied from revlog.py. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
496 if start is None and stop is None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
497 if not len(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
498 return [nullid] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
499 return [self.node(r) for r in self.headrevs()] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
500 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
501 if start is None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
502 start = nullid |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
503 if stop is None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
504 stop = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
505 stoprevs = set([self.rev(n) for n in stop]) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
506 startrev = self.rev(start) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
507 reachable = {startrev} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
508 heads = {startrev} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
509 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
510 parentrevs = self.parentrevs |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
511 for r in self.revs(start=startrev + 1): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
512 for p in parentrevs(r): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
513 if p in reachable: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
514 if r not in stoprevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
515 reachable.add(r) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
516 heads.add(r) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
517 if p in heads and p not in stoprevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
518 heads.remove(p) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
519 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
520 return [self.node(r) for r in heads] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
521 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
522 def children(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
523 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
524 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
525 # This is a copy of revlog.children(). |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
526 c = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
527 p = self.rev(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
528 for r in self.revs(start=p + 1): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
529 prevs = [pr for pr in self.parentrevs(r) if pr != nullrev] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
530 if prevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
531 for pr in prevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
532 if pr == p: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
533 c.append(self.node(r)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
534 elif p == nullrev: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
535 c.append(self.node(r)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
536 return c |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
537 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
538 def getstrippoint(self, minlink): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
539 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
540 # This is largely a copy of revlog.getstrippoint(). |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
541 brokenrevs = set() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
542 strippoint = len(self) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
543 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
544 heads = {} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
545 futurelargelinkrevs = set() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
546 for head in self.headrevs(): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
547 headlinkrev = self.linkrev(head) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
548 heads[head] = headlinkrev |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
549 if headlinkrev >= minlink: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
550 futurelargelinkrevs.add(headlinkrev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
551 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
552 # This algorithm involves walking down the rev graph, starting at the |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
553 # heads. Since the revs are topologically sorted according to linkrev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
554 # once all head linkrevs are below the minlink, we know there are |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
555 # no more revs that could have a linkrev greater than minlink. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
556 # So we can stop walking. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
557 while futurelargelinkrevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
558 strippoint -= 1 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
559 linkrev = heads.pop(strippoint) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
560 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
561 if linkrev < minlink: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
562 brokenrevs.add(strippoint) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
563 else: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
564 futurelargelinkrevs.remove(linkrev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
565 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
566 for p in self.parentrevs(strippoint): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
567 if p != nullrev: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
568 plinkrev = self.linkrev(p) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
569 heads[p] = plinkrev |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
570 if plinkrev >= minlink: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
571 futurelargelinkrevs.add(plinkrev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
572 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
573 return strippoint, brokenrevs |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
574 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
575 def strip(self, minlink, transaction): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
576 if not len(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
577 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
578 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
579 rev, _ignored = self.getstrippoint(minlink) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
580 if rev == len(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
581 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
582 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
583 # Purge index data starting at the requested revision. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
584 self._indexdata[rev:] = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
585 self._reflectindexupdate() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
586 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
587 def reposetup(ui, repo): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
588 if not repo.local(): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
589 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
590 |
37346
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37341
diff
changeset
|
591 if isinstance(repo, bundlerepo.bundlerepository): |
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37341
diff
changeset
|
592 raise error.Abort(_('cannot use simple store with bundlerepo')) |
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37341
diff
changeset
|
593 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
594 class simplestorerepo(repo.__class__): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
595 def file(self, f): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
596 return filestorage(self.svfs, f) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
597 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
598 repo.__class__ = simplestorerepo |