Mercurial > hg
annotate tests/simplestorerepo.py @ 39878:3e896b51aa5d
storageutil: move metadata parsing and packing from revlog (API)
Parsing and writing of revision text metadata is likely identical
across storage backends. Let's move the code out of revlog so we
don't need to import the revlog module in order to use it.
Differential Revision: https://phab.mercurial-scm.org/D4754
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Mon, 24 Sep 2018 14:31:31 -0700 |
parents | f8eb71f9e3bd |
children | 2f80eaf38ed4 |
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 |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
15 import stat |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
16 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
17 from mercurial.i18n import _ |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
18 from mercurial.node import ( |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
19 bin, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
20 hex, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
21 nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
22 nullrev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
23 ) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
24 from mercurial.thirdparty import ( |
39231
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
25 attr, |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
26 cbor, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
27 ) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
28 from mercurial import ( |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
29 ancestor, |
37346
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37341
diff
changeset
|
30 bundlerepo, |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
31 error, |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
32 extensions, |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
33 localrepo, |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
34 mdiff, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
35 pycompat, |
37441
a3202fa83aff
filelog: declare that filelog implements a storage interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37436
diff
changeset
|
36 repository, |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
37 revlog, |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
38 store, |
37417
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
39 verify, |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
40 ) |
38547
404eab7ff33f
tests: use interfaceutil in simplestorerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37442
diff
changeset
|
41 from mercurial.utils import ( |
404eab7ff33f
tests: use interfaceutil in simplestorerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37442
diff
changeset
|
42 interfaceutil, |
39877
f8eb71f9e3bd
storageutil: new module for storage primitives (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39876
diff
changeset
|
43 storageutil, |
38547
404eab7ff33f
tests: use interfaceutil in simplestorerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37442
diff
changeset
|
44 ) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
45 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
46 # 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
|
47 # 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
|
48 # 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
|
49 # leave the attribute unspecified. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
50 testedwith = 'ships-with-hg-core' |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
51 |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
52 REQUIREMENT = 'testonly-simplestore' |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
53 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
54 def validatenode(node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
55 if isinstance(node, int): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
56 raise ValueError('expected node; got int') |
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 if len(node) != 20: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
59 raise ValueError('expected 20 byte node') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
60 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
61 def validaterev(rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
62 if not isinstance(rev, int): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
63 raise ValueError('expected int') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
64 |
39777
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
65 class simplestoreerror(error.StorageError): |
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
66 pass |
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
67 |
39231
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
68 @interfaceutil.implementer(repository.irevisiondelta) |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
69 @attr.s(slots=True, frozen=True) |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
70 class simplestorerevisiondelta(object): |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
71 node = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
72 p1node = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
73 p2node = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
74 basenode = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
75 linknode = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
76 flags = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
77 baserevisionsize = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
78 revision = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
79 delta = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
80 |
38547
404eab7ff33f
tests: use interfaceutil in simplestorerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37442
diff
changeset
|
81 @interfaceutil.implementer(repository.ifilestorage) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
82 class filestorage(object): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
83 """Implements storage for a tracked path. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
84 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
85 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
|
86 path. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
87 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
88 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
|
89 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
90 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
|
91 """ |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
92 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
93 def __init__(self, svfs, path): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
94 self._svfs = svfs |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
95 self._path = path |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
96 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
97 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
|
98 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
|
99 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 indexdata = self._svfs.tryread(self._indexpath) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
101 if indexdata: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
102 indexdata = cbor.loads(indexdata) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
103 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
104 self._indexdata = indexdata or [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
105 self._indexbynode = {} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
106 self._indexbyrev = {} |
39860
d9b3cc3d5d07
filelog: drop index attribute (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39844
diff
changeset
|
107 self._index = [] |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
108 self._refreshindex() |
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 def _refreshindex(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
111 self._indexbynode.clear() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
112 self._indexbyrev.clear() |
39860
d9b3cc3d5d07
filelog: drop index attribute (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39844
diff
changeset
|
113 self._index = [] |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
114 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
115 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
|
116 self._indexbynode[entry[b'node']] = entry |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
117 self._indexbyrev[i] = entry |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
118 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
119 self._indexbynode[nullid] = { |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
120 b'node': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
121 b'p1': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
122 b'p2': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
123 b'linkrev': nullrev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
124 b'flags': 0, |
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 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
127 self._indexbyrev[nullrev] = { |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
128 b'node': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
129 b'p1': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
130 b'p2': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
131 b'linkrev': nullrev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
132 b'flags': 0, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
133 } |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
134 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
135 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
|
136 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
|
137 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
138 # start, length, rawsize, chainbase, linkrev, p1, p2, node |
39860
d9b3cc3d5d07
filelog: drop index attribute (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39844
diff
changeset
|
139 self._index.append((0, 0, 0, -1, entry[b'linkrev'], p1rev, p2rev, |
d9b3cc3d5d07
filelog: drop index attribute (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39844
diff
changeset
|
140 entry[b'node'])) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
141 |
39860
d9b3cc3d5d07
filelog: drop index attribute (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39844
diff
changeset
|
142 self._index.append((0, 0, 0, -1, -1, -1, -1, nullid)) |
37337
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 def __len__(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
145 return len(self._indexdata) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
146 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
147 def __iter__(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
148 return iter(range(len(self))) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
149 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
150 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
|
151 step = 1 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
152 if stop is not None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
153 if start > stop: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
154 step = -1 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
155 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
156 stop += step |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
157 else: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
158 stop = len(self) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
159 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
160 return range(start, stop, step) |
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 def parents(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
163 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
164 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
165 if node not in self._indexbynode: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
166 raise KeyError('unknown node') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
167 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
168 entry = self._indexbynode[node] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
169 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
170 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
|
171 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
172 def parentrevs(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
173 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
|
174 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
|
175 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
176 def rev(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
177 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
178 |
37408
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
179 try: |
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
180 self._indexbynode[node] |
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
181 except KeyError: |
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
182 raise error.LookupError(node, self._indexpath, _('no node')) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
183 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
184 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
|
185 if entry[b'node'] == node: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
186 return rev |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
187 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
188 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
|
189 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
190 def node(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
191 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
192 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
193 return self._indexbyrev[rev][b'node'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
194 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
195 def lookup(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
196 if isinstance(node, int): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
197 return self.node(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
198 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
199 if len(node) == 20: |
37408
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
200 self.rev(node) |
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
201 return node |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
202 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
203 try: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
204 rev = int(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
205 if '%d' % rev != node: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
206 raise ValueError |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
207 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
208 if rev < 0: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
209 rev = len(self) + rev |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
210 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
|
211 raise ValueError |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
212 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
213 return self.node(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
214 except (ValueError, OverflowError): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
215 pass |
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 if len(node) == 40: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
218 try: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
219 rawnode = bin(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
220 self.rev(rawnode) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
221 return rawnode |
37408
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
222 except TypeError: |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
223 pass |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
224 |
37408
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
225 raise error.LookupError(node, self._path, _('invalid lookup input')) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
226 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
227 def linkrev(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
228 validaterev(rev) |
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 return self._indexbyrev[rev][b'linkrev'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
231 |
39873
2ac4f3e97813
filelog: stop proxying flags() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39867
diff
changeset
|
232 def _flags(self, rev): |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
233 validaterev(rev) |
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 return self._indexbyrev[rev][b'flags'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
236 |
39234
3682b49e0213
repository: remove candelta() from ifileindex
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39232
diff
changeset
|
237 def _candelta(self, baserev, rev): |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
238 validaterev(baserev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
239 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
240 |
39873
2ac4f3e97813
filelog: stop proxying flags() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39867
diff
changeset
|
241 if ((self._flags(baserev) & revlog.REVIDX_RAWTEXT_CHANGING_FLAGS) |
2ac4f3e97813
filelog: stop proxying flags() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39867
diff
changeset
|
242 or (self._flags(rev) & revlog.REVIDX_RAWTEXT_CHANGING_FLAGS)): |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
243 return False |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
244 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
245 return True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
246 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
247 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
|
248 if flags == 0: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
249 return text, True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
250 |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
251 if flags & ~revlog.REVIDX_KNOWN_FLAGS: |
39777
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
252 raise simplestoreerror(_("incompatible revision flag '%#x'") % |
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
253 (flags & ~revlog.REVIDX_KNOWN_FLAGS)) |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
254 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
255 validatehash = True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
256 # 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
|
257 # reversed due to non-commutative transforms. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
258 orderedflags = revlog.REVIDX_FLAGS_ORDER |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
259 if operation == 'write': |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
260 orderedflags = reversed(orderedflags) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
261 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
262 for flag in orderedflags: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
263 # 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
|
264 # 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
|
265 if flag & flags: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
266 vhash = True |
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 if flag not in revlog._flagprocessors: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
269 message = _("missing processor for flag '%#x'") % (flag) |
39777
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
270 raise simplestoreerror(message) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
271 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
272 processor = revlog._flagprocessors[flag] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
273 if processor is not None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
274 readtransform, writetransform, rawtransform = processor |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
275 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
276 if raw: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
277 vhash = rawtransform(self, text) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
278 elif operation == 'read': |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
279 text, vhash = readtransform(self, text) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
280 else: # write operation |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
281 text, vhash = writetransform(self, text) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
282 validatehash = validatehash and vhash |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
283 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
284 return text, validatehash |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
285 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
286 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
|
287 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
|
288 p1, p2 = self.parents(node) |
39877
f8eb71f9e3bd
storageutil: new module for storage primitives (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39876
diff
changeset
|
289 if node != storageutil.hashrevisionsha1(text, p1, p2): |
39777
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
290 raise simplestoreerror(_("integrity check failed on %s") % |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
291 self._path) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
292 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
293 def revision(self, node, raw=False): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
294 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
295 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
296 if node == nullid: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
297 return b'' |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
298 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
299 rev = self.rev(node) |
39873
2ac4f3e97813
filelog: stop proxying flags() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39867
diff
changeset
|
300 flags = self._flags(rev) |
37337
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 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
|
303 rawtext = self._svfs.read(path) |
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 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
|
306 if validatehash: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
307 self.checkhash(text, node, rev=rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
308 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
309 return text |
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 def read(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
312 validatenode(node) |
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 revision = self.revision(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
315 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
316 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
|
317 return revision |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
318 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
319 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
|
320 return revision[start + 2:] |
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 renamed(self, node): |
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 if self.parents(node)[0] != nullid: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
326 return False |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
327 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
328 fulltext = self.revision(node) |
39878
3e896b51aa5d
storageutil: move metadata parsing and packing from revlog (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39877
diff
changeset
|
329 m = storageutil.parsemeta(fulltext)[0] |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
330 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
331 if m and 'copy' in m: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
332 return m['copy'], bin(m['copyrev']) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
333 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
334 return False |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
335 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
336 def cmp(self, node, text): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
337 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
338 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
339 t = text |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
340 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
341 if text.startswith(b'\1\n'): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
342 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
|
343 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
344 p1, p2 = self.parents(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
345 |
39877
f8eb71f9e3bd
storageutil: new module for storage primitives (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39876
diff
changeset
|
346 if storageutil.hashrevisionsha1(t, p1, p2) == node: |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
347 return False |
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.iscensored(self.rev(node)): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
350 return text != b'' |
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.renamed(node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
353 t2 = self.read(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
354 return t2 != text |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
355 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
356 return True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
357 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
358 def size(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
359 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
360 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
361 node = self._indexbyrev[rev][b'node'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
362 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
363 if self.renamed(node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
364 return len(self.read(node)) |
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 if self.iscensored(rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
367 return 0 |
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 return len(self.revision(node)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
370 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
371 def iscensored(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
372 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
373 |
39873
2ac4f3e97813
filelog: stop proxying flags() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39867
diff
changeset
|
374 return self._flags(rev) & revlog.REVIDX_ISCENSORED |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
375 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
376 def commonancestorsheads(self, a, b): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
377 validatenode(a) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
378 validatenode(b) |
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 a = self.rev(a) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
381 b = self.rev(b) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
382 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
383 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
|
384 return pycompat.maplist(self.node, ancestors) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
385 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
386 def descendants(self, revs): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
387 # 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
|
388 first = min(revs) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
389 if first == nullrev: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
390 for i in self: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
391 yield i |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
392 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
393 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
394 seen = set(revs) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
395 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
|
396 for x in self.parentrevs(i): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
397 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
|
398 seen.add(i) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
399 yield i |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
400 break |
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 # Required by verify. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
403 def files(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
404 entries = self._svfs.listdir(self._storepath) |
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 # 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
|
407 # recording. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
408 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
|
409 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
410 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
|
411 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
412 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
|
413 if meta or text.startswith(b'\1\n'): |
39878
3e896b51aa5d
storageutil: move metadata parsing and packing from revlog (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39877
diff
changeset
|
414 text = storageutil.packmeta(meta, text) |
37337
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 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
|
417 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
418 def addrevision(self, text, transaction, linkrev, p1, p2, node=None, |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
419 flags=revlog.REVIDX_DEFAULT_FLAGS, cachedelta=None): |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
420 validatenode(p1) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
421 validatenode(p2) |
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 flags: |
39877
f8eb71f9e3bd
storageutil: new module for storage primitives (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39876
diff
changeset
|
424 node = node or storageutil.hashrevisionsha1(text, p1, p2) |
37337
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 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
|
427 |
39877
f8eb71f9e3bd
storageutil: new module for storage primitives (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39876
diff
changeset
|
428 node = node or storageutil.hashrevisionsha1(text, p1, p2) |
37337
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 if node in self._indexbynode: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
431 return node |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
432 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
433 if validatehash: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
434 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
|
435 |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
436 return self._addrawrevision(node, rawtext, transaction, linkrev, p1, p2, |
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
437 flags) |
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
438 |
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
439 def _addrawrevision(self, node, rawtext, transaction, link, p1, p2, flags): |
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
440 transaction.addbackup(self._indexpath) |
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
441 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
442 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
|
443 |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
444 self._svfs.write(path, rawtext) |
37337
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 self._indexdata.append({ |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
447 b'node': node, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
448 b'p1': p1, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
449 b'p2': p2, |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
450 b'linkrev': link, |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
451 b'flags': flags, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
452 }) |
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 self._reflectindexupdate() |
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 return node |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
457 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
458 def _reflectindexupdate(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
459 self._refreshindex() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
460 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
|
461 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
462 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
|
463 nodes = [] |
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 transaction.addbackup(self._indexpath) |
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 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
|
468 linkrev = linkmapper(linknode) |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
469 flags = flags or revlog.REVIDX_DEFAULT_FLAGS |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
470 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
471 nodes.append(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
472 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
473 if node in self._indexbynode: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
474 continue |
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 # 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
|
477 if deltabase == nullid: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
478 text = mdiff.patch(b'', delta) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
479 else: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
480 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
|
481 |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
482 self._addrawrevision(node, text, transaction, linkrev, p1, p2, |
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
483 flags) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
484 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
485 if addrevisioncb: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
486 addrevisioncb(self, node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
487 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
488 return nodes |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
489 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
490 def revdiff(self, rev1, rev2): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
491 validaterev(rev1) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
492 validaterev(rev2) |
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 node1 = self.node(rev1) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
495 node2 = self.node(rev2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
496 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
497 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
|
498 self.revision(node2, raw=True)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
499 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
500 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
|
501 # This is copied from revlog.py. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
502 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
|
503 if not len(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
504 return [nullid] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
505 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
|
506 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
507 if start is None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
508 start = nullid |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
509 if stop is None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
510 stop = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
511 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
|
512 startrev = self.rev(start) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
513 reachable = {startrev} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
514 heads = {startrev} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
515 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
516 parentrevs = self.parentrevs |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
517 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
|
518 for p in parentrevs(r): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
519 if p in reachable: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
520 if r not in stoprevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
521 reachable.add(r) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
522 heads.add(r) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
523 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
|
524 heads.remove(p) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
525 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
526 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
|
527 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
528 def children(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
529 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
530 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
531 # 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
|
532 c = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
533 p = self.rev(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
534 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
|
535 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
|
536 if prevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
537 for pr in prevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
538 if pr == p: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
539 c.append(self.node(r)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
540 elif p == nullrev: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
541 c.append(self.node(r)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
542 return c |
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 def getstrippoint(self, minlink): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
545 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
546 # 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
|
547 brokenrevs = set() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
548 strippoint = len(self) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
549 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
550 heads = {} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
551 futurelargelinkrevs = set() |
39785
979e9f124caa
filelog: stop proxying headrevs() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39777
diff
changeset
|
552 for head in self.heads(): |
979e9f124caa
filelog: stop proxying headrevs() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39777
diff
changeset
|
553 headlinkrev = self.linkrev(self.rev(head)) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
554 heads[head] = headlinkrev |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
555 if headlinkrev >= minlink: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
556 futurelargelinkrevs.add(headlinkrev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
557 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
558 # 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
|
559 # 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
|
560 # 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
|
561 # 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
|
562 # So we can stop walking. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
563 while futurelargelinkrevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
564 strippoint -= 1 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
565 linkrev = heads.pop(strippoint) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
566 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
567 if linkrev < minlink: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
568 brokenrevs.add(strippoint) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
569 else: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
570 futurelargelinkrevs.remove(linkrev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
571 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
572 for p in self.parentrevs(strippoint): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
573 if p != nullrev: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
574 plinkrev = self.linkrev(p) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
575 heads[p] = plinkrev |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
576 if plinkrev >= minlink: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
577 futurelargelinkrevs.add(plinkrev) |
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 return strippoint, brokenrevs |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
580 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
581 def strip(self, minlink, transaction): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
582 if not len(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
583 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
584 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
585 rev, _ignored = self.getstrippoint(minlink) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
586 if rev == len(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
587 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
588 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
589 # 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
|
590 self._indexdata[rev:] = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
591 self._reflectindexupdate() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
592 |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
593 def issimplestorefile(f, kind, st): |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
594 if kind != stat.S_IFREG: |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
595 return False |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
596 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
597 if store.isrevlog(f, kind, st): |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
598 return False |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
599 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
600 # Ignore transaction undo files. |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
601 if f.startswith('undo.'): |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
602 return False |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
603 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
604 # Otherwise assume it belongs to the simple store. |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
605 return True |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
606 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
607 class simplestore(store.encodedstore): |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
608 def datafiles(self): |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
609 for x in super(simplestore, self).datafiles(): |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
610 yield x |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
611 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
612 # Supplement with non-revlog files. |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
613 extrafiles = self._walk('data', True, filefilter=issimplestorefile) |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
614 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
615 for unencoded, encoded, size in extrafiles: |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
616 try: |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
617 unencoded = store.decodefilename(unencoded) |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
618 except KeyError: |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
619 unencoded = None |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
620 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
621 yield unencoded, encoded, size |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
622 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
623 def reposetup(ui, repo): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
624 if not repo.local(): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
625 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
626 |
37346
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37341
diff
changeset
|
627 if isinstance(repo, bundlerepo.bundlerepository): |
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37341
diff
changeset
|
628 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
|
629 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
630 class simplestorerepo(repo.__class__): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
631 def file(self, f): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
632 return filestorage(self.svfs, f) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
633 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
634 repo.__class__ = simplestorerepo |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
635 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
636 def featuresetup(ui, supported): |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
637 supported.add(REQUIREMENT) |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
638 |
39546
41aa5dced975
localrepo: pass ui to newreporequirements() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39234
diff
changeset
|
639 def newreporequirements(orig, ui): |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
640 """Modifies default requirements for new repos to use the simple store.""" |
39546
41aa5dced975
localrepo: pass ui to newreporequirements() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39234
diff
changeset
|
641 requirements = orig(ui) |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
642 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
643 # These requirements are only used to affect creation of the store |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
644 # object. We have our own store. So we can remove them. |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
645 # TODO do this once we feel like taking the test hit. |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
646 #if 'fncache' in requirements: |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
647 # requirements.remove('fncache') |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
648 #if 'dotencode' in requirements: |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
649 # requirements.remove('dotencode') |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
650 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
651 requirements.add(REQUIREMENT) |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
652 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
653 return requirements |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
654 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
655 def makestore(orig, requirements, path, vfstype): |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
656 if REQUIREMENT not in requirements: |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
657 return orig(requirements, path, vfstype) |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
658 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
659 return simplestore(path, vfstype) |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
660 |
37417
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
661 def verifierinit(orig, self, *args, **kwargs): |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
662 orig(self, *args, **kwargs) |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
663 |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
664 # We don't care that files in the store don't align with what is |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
665 # advertised. So suppress these warnings. |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
666 self.warnorphanstorefiles = False |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
667 |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
668 def extsetup(ui): |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
669 localrepo.featuresetupfuncs.add(featuresetup) |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
670 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
671 extensions.wrapfunction(localrepo, 'newreporequirements', |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
672 newreporequirements) |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
673 extensions.wrapfunction(store, 'store', makestore) |
37417
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
674 extensions.wrapfunction(verify.verifier, '__init__', verifierinit) |