Mercurial > hg
annotate tests/simplestorerepo.py @ 39859:32d3ed3023bb
upgrade: use rawsize() instead of revlog index
The revlog index is a very low-level data structure and it shouldn't
be exposed to the storage interface - at least not in its current
form.
upgrade.py is the only consumer of the index attribute on file storage
in the repository.
This commit rewrites that final consumer to use rawsize() instead of
going through the index. This is actually the more proper API to use,
as rawsize() will accurately report the size of revisions which have
a negative size in the index.
Differential Revision: https://phab.mercurial-scm.org/D4719
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Mon, 24 Sep 2018 09:38:27 -0700 |
parents | 0cb3e02e1d1b |
children | d9b3cc3d5d07 |
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, |
404eab7ff33f
tests: use interfaceutil in simplestorerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37442
diff
changeset
|
43 ) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
44 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
45 # 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
|
46 # 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
|
47 # 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
|
48 # leave the attribute unspecified. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
49 testedwith = 'ships-with-hg-core' |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
50 |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
51 REQUIREMENT = 'testonly-simplestore' |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
52 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
53 def validatenode(node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
54 if isinstance(node, int): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
55 raise ValueError('expected node; got int') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
56 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
57 if len(node) != 20: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
58 raise ValueError('expected 20 byte node') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
59 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
60 def validaterev(rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
61 if not isinstance(rev, int): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
62 raise ValueError('expected int') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
63 |
39777
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
64 class simplestoreerror(error.StorageError): |
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
65 pass |
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
66 |
39231
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
67 @interfaceutil.implementer(repository.irevisiondelta) |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
68 @attr.s(slots=True, frozen=True) |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
69 class simplestorerevisiondelta(object): |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
70 node = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
71 p1node = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
72 p2node = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
73 basenode = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
74 linknode = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
75 flags = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
76 baserevisionsize = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
77 revision = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
78 delta = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
79 |
38547
404eab7ff33f
tests: use interfaceutil in simplestorerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37442
diff
changeset
|
80 @interfaceutil.implementer(repository.ifilestorage) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
81 class filestorage(object): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
82 """Implements storage for a tracked path. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
83 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
84 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
|
85 path. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
86 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
87 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
|
88 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
89 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
|
90 """ |
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 def __init__(self, svfs, path): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
93 self._svfs = svfs |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
94 self._path = path |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
95 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
96 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
|
97 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
|
98 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
99 indexdata = self._svfs.tryread(self._indexpath) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 if indexdata: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
101 indexdata = cbor.loads(indexdata) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
102 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
103 self._indexdata = indexdata or [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
104 self._indexbynode = {} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
105 self._indexbyrev = {} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
106 self.index = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
107 self._refreshindex() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
108 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
109 # This is used by changegroup code :/ |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
110 self._generaldelta = True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
111 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
112 def _refreshindex(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
113 self._indexbynode.clear() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
114 self._indexbyrev.clear() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
115 self.index = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
116 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
117 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
|
118 self._indexbynode[entry[b'node']] = entry |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
119 self._indexbyrev[i] = entry |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
120 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
121 self._indexbynode[nullid] = { |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
122 b'node': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
123 b'p1': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
124 b'p2': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
125 b'linkrev': nullrev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
126 b'flags': 0, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
127 } |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
128 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
129 self._indexbyrev[nullrev] = { |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
130 b'node': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
131 b'p1': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
132 b'p2': nullid, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
133 b'linkrev': nullrev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
134 b'flags': 0, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
135 } |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
136 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
137 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
|
138 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
|
139 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
140 # start, length, rawsize, chainbase, linkrev, p1, p2, node |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
141 self.index.append((0, 0, 0, -1, entry[b'linkrev'], p1rev, p2rev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
142 entry[b'node'])) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
143 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
144 self.index.append((0, 0, 0, -1, -1, -1, -1, nullid)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
145 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
146 def __len__(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
147 return len(self._indexdata) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
148 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
149 def __iter__(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
150 return iter(range(len(self))) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
151 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
152 def revs(self, start=0, stop=None): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
153 step = 1 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
154 if stop is not None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
155 if start > stop: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
156 step = -1 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
157 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
158 stop += step |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
159 else: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
160 stop = len(self) |
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 return range(start, stop, step) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
163 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
164 def parents(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
165 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
166 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
167 if node not in self._indexbynode: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
168 raise KeyError('unknown 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 entry = self._indexbynode[node] |
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 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
|
173 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
174 def parentrevs(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
175 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
|
176 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
|
177 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
178 def rev(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
179 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
180 |
37408
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
181 try: |
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
182 self._indexbynode[node] |
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
183 except KeyError: |
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
184 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
|
185 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
186 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
|
187 if entry[b'node'] == node: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
188 return rev |
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 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
|
191 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
192 def node(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
193 validaterev(rev) |
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 return self._indexbyrev[rev][b'node'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
196 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
197 def lookup(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
198 if isinstance(node, int): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
199 return self.node(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
200 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
201 if len(node) == 20: |
37408
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
202 self.rev(node) |
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
203 return node |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
204 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
205 try: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
206 rev = int(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
207 if '%d' % rev != node: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
208 raise ValueError |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
209 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
210 if rev < 0: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
211 rev = len(self) + rev |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
212 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
|
213 raise ValueError |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
214 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
215 return self.node(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
216 except (ValueError, OverflowError): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
217 pass |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
218 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
219 if len(node) == 40: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
220 try: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
221 rawnode = bin(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
222 self.rev(rawnode) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
223 return rawnode |
37408
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
224 except TypeError: |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
225 pass |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
226 |
37408
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
227 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
|
228 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
229 def linkrev(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
230 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
231 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
232 return self._indexbyrev[rev][b'linkrev'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
233 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
234 def flags(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
235 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
236 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
237 return self._indexbyrev[rev][b'flags'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
238 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
239 def deltaparent(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
240 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
241 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
242 p1node = self.parents(self.node(rev))[0] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
243 return self.rev(p1node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
244 |
39234
3682b49e0213
repository: remove candelta() from ifileindex
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39232
diff
changeset
|
245 def _candelta(self, baserev, rev): |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
246 validaterev(baserev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
247 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
248 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
249 if ((self.flags(baserev) & revlog.REVIDX_RAWTEXT_CHANGING_FLAGS) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
250 or (self.flags(rev) & revlog.REVIDX_RAWTEXT_CHANGING_FLAGS)): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
251 return False |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
252 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
253 return True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
254 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
255 def rawsize(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
256 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
257 node = self.node(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
258 return len(self.revision(node, raw=True)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
259 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
260 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
|
261 if flags == 0: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
262 return text, True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
263 |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
264 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
|
265 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
|
266 (flags & ~revlog.REVIDX_KNOWN_FLAGS)) |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
267 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
268 validatehash = True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
269 # 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
|
270 # reversed due to non-commutative transforms. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
271 orderedflags = revlog.REVIDX_FLAGS_ORDER |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
272 if operation == 'write': |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
273 orderedflags = reversed(orderedflags) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
274 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
275 for flag in orderedflags: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
276 # 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
|
277 # 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
|
278 if flag & flags: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
279 vhash = True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
280 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
281 if flag not in revlog._flagprocessors: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
282 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
|
283 raise simplestoreerror(message) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
284 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
285 processor = revlog._flagprocessors[flag] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
286 if processor is not None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
287 readtransform, writetransform, rawtransform = processor |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
288 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
289 if raw: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
290 vhash = rawtransform(self, text) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
291 elif operation == 'read': |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
292 text, vhash = readtransform(self, text) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
293 else: # write operation |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
294 text, vhash = writetransform(self, text) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
295 validatehash = validatehash and vhash |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
296 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
297 return text, validatehash |
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 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
|
300 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
|
301 p1, p2 = self.parents(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
302 if node != revlog.hash(text, p1, p2): |
39777
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
303 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
|
304 self._path) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
305 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
306 def revision(self, node, raw=False): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
307 validatenode(node) |
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 if node == nullid: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
310 return b'' |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
311 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
312 rev = self.rev(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
313 flags = self.flags(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
314 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
315 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
|
316 rawtext = self._svfs.read(path) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
317 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
318 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
|
319 if validatehash: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
320 self.checkhash(text, node, rev=rev) |
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 return text |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
323 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
324 def read(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
325 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
326 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
327 revision = self.revision(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
328 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
329 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
|
330 return revision |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
331 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
332 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
|
333 return revision[start + 2:] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
334 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
335 def renamed(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
336 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
337 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
338 if self.parents(node)[0] != nullid: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
339 return False |
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 fulltext = self.revision(node) |
37442
0596d27457c6
revlog: move parsemeta() and packmeta() from filelog (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37441
diff
changeset
|
342 m = revlog.parsemeta(fulltext)[0] |
37337
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 if m and 'copy' in m: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
345 return m['copy'], bin(m['copyrev']) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
346 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
347 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 def cmp(self, node, text): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
350 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
351 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
352 t = text |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
353 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
354 if text.startswith(b'\1\n'): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
355 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
|
356 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
357 p1, p2 = self.parents(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
358 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
359 if revlog.hash(t, p1, p2) == node: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
360 return False |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
361 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
362 if self.iscensored(self.rev(node)): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
363 return text != b'' |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
364 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
365 if self.renamed(node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
366 t2 = self.read(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
367 return t2 != text |
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 True |
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 size(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 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
374 node = self._indexbyrev[rev][b'node'] |
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 if self.renamed(node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
377 return len(self.read(node)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
378 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
379 if self.iscensored(rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
380 return 0 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
381 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
382 return len(self.revision(node)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
383 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
384 def iscensored(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
385 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
386 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
387 return self.flags(rev) & revlog.REVIDX_ISCENSORED |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
388 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
389 def commonancestorsheads(self, a, b): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
390 validatenode(a) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
391 validatenode(b) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
392 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
393 a = self.rev(a) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
394 b = self.rev(b) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
395 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
396 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
|
397 return pycompat.maplist(self.node, ancestors) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
398 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
399 def descendants(self, revs): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
400 # 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
|
401 first = min(revs) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
402 if first == nullrev: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
403 for i in self: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
404 yield i |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
405 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
406 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
407 seen = set(revs) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
408 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
|
409 for x in self.parentrevs(i): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
410 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
|
411 seen.add(i) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
412 yield i |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
413 break |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
414 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
415 # Required by verify. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
416 def files(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
417 entries = self._svfs.listdir(self._storepath) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
418 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
419 # 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
|
420 # recording. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
421 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
|
422 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
423 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
|
424 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
425 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
|
426 if meta or text.startswith(b'\1\n'): |
37442
0596d27457c6
revlog: move parsemeta() and packmeta() from filelog (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37441
diff
changeset
|
427 text = revlog.packmeta(meta, text) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
428 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
429 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
|
430 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
431 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
|
432 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
|
433 validatenode(p1) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
434 validatenode(p2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
435 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
436 if flags: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
437 node = node or revlog.hash(text, p1, p2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
438 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
439 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
|
440 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
441 node = node or revlog.hash(text, p1, p2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
442 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
443 if node in self._indexbynode: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
444 return node |
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 if validatehash: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
447 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
|
448 |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
449 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
|
450 flags) |
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
451 |
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
452 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
|
453 transaction.addbackup(self._indexpath) |
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
454 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
455 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
|
456 |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
457 self._svfs.write(path, rawtext) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
458 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
459 self._indexdata.append({ |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
460 b'node': node, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
461 b'p1': p1, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
462 b'p2': p2, |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
463 b'linkrev': link, |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
464 b'flags': flags, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
465 }) |
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 self._reflectindexupdate() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
468 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
469 return node |
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 def _reflectindexupdate(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
472 self._refreshindex() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
473 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
|
474 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
475 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
|
476 nodes = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
477 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
478 transaction.addbackup(self._indexpath) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
479 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
480 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
|
481 linkrev = linkmapper(linknode) |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
482 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
|
483 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
484 nodes.append(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
485 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
486 if node in self._indexbynode: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
487 continue |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
488 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
489 # 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
|
490 if deltabase == nullid: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
491 text = mdiff.patch(b'', delta) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
492 else: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
493 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
|
494 |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
495 self._addrawrevision(node, text, transaction, linkrev, p1, p2, |
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
496 flags) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
497 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
498 if addrevisioncb: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
499 addrevisioncb(self, node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
500 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
501 return nodes |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
502 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
503 def revdiff(self, rev1, rev2): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
504 validaterev(rev1) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
505 validaterev(rev2) |
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 node1 = self.node(rev1) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
508 node2 = self.node(rev2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
509 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
510 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
|
511 self.revision(node2, raw=True)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
512 |
39231
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
513 def emitrevisiondeltas(self, requests): |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
514 for request in requests: |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
515 node = request.node |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
516 rev = self.rev(node) |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
517 |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
518 if request.basenode == nullid: |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
519 baserev = nullrev |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
520 elif request.basenode is not None: |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
521 baserev = self.rev(request.basenode) |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
522 else: |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
523 # This is a test extension and we can do simple things |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
524 # for choosing a delta parent. |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
525 baserev = self.deltaparent(rev) |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
526 |
39234
3682b49e0213
repository: remove candelta() from ifileindex
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39232
diff
changeset
|
527 if baserev != nullrev and not self._candelta(baserev, rev): |
39231
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
528 baserev = nullrev |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
529 |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
530 revision = None |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
531 delta = None |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
532 baserevisionsize = None |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
533 |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
534 if self.iscensored(baserev) or self.iscensored(rev): |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
535 try: |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
536 revision = self.revision(node, raw=True) |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
537 except error.CensoredNodeError as e: |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
538 revision = e.tombstone |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
539 |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
540 if baserev != nullrev: |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
541 baserevisionsize = self.rawsize(baserev) |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
542 |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
543 elif baserev == nullrev: |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
544 revision = self.revision(node, raw=True) |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
545 else: |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
546 delta = self.revdiff(baserev, rev) |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
547 |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
548 extraflags = revlog.REVIDX_ELLIPSIS if request.ellipsis else 0 |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
549 |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
550 yield simplestorerevisiondelta( |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
551 node=node, |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
552 p1node=request.p1node, |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
553 p2node=request.p2node, |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
554 linknode=request.linknode, |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
555 basenode=self.node(baserev), |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
556 flags=self.flags(rev) | extraflags, |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
557 baserevisionsize=baserevisionsize, |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
558 revision=revision, |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
559 delta=delta) |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
560 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
561 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
|
562 # This is copied from revlog.py. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
563 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
|
564 if not len(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
565 return [nullid] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
566 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
|
567 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
568 if start is None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
569 start = nullid |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
570 if stop is None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
571 stop = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
572 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
|
573 startrev = self.rev(start) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
574 reachable = {startrev} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
575 heads = {startrev} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
576 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
577 parentrevs = self.parentrevs |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
578 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
|
579 for p in parentrevs(r): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
580 if p in reachable: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
581 if r not in stoprevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
582 reachable.add(r) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
583 heads.add(r) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
584 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
|
585 heads.remove(p) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
586 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
587 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
|
588 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
589 def children(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
590 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
591 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
592 # 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
|
593 c = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
594 p = self.rev(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
595 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
|
596 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
|
597 if prevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
598 for pr in prevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
599 if pr == p: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
600 c.append(self.node(r)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
601 elif p == nullrev: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
602 c.append(self.node(r)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
603 return c |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
604 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
605 def getstrippoint(self, minlink): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
606 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
607 # 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
|
608 brokenrevs = set() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
609 strippoint = len(self) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
610 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
611 heads = {} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
612 futurelargelinkrevs = set() |
39785
979e9f124caa
filelog: stop proxying headrevs() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39777
diff
changeset
|
613 for head in self.heads(): |
979e9f124caa
filelog: stop proxying headrevs() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39777
diff
changeset
|
614 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
|
615 heads[head] = headlinkrev |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
616 if headlinkrev >= minlink: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
617 futurelargelinkrevs.add(headlinkrev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
618 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
619 # 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
|
620 # 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
|
621 # 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
|
622 # 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
|
623 # So we can stop walking. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
624 while futurelargelinkrevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
625 strippoint -= 1 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
626 linkrev = heads.pop(strippoint) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
627 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
628 if linkrev < minlink: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
629 brokenrevs.add(strippoint) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
630 else: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
631 futurelargelinkrevs.remove(linkrev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
632 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
633 for p in self.parentrevs(strippoint): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
634 if p != nullrev: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
635 plinkrev = self.linkrev(p) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
636 heads[p] = plinkrev |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
637 if plinkrev >= minlink: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
638 futurelargelinkrevs.add(plinkrev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
639 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
640 return strippoint, brokenrevs |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
641 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
642 def strip(self, minlink, transaction): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
643 if not len(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
644 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
645 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
646 rev, _ignored = self.getstrippoint(minlink) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
647 if rev == len(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
648 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
649 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
650 # 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
|
651 self._indexdata[rev:] = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
652 self._reflectindexupdate() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
653 |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
654 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
|
655 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
|
656 return False |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
657 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
658 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
|
659 return False |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
660 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
661 # 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
|
662 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
|
663 return False |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
664 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
665 # 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
|
666 return True |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
667 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
668 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
|
669 def datafiles(self): |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
670 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
|
671 yield x |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
672 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
673 # 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
|
674 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
|
675 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
676 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
|
677 try: |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
678 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
|
679 except KeyError: |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
680 unencoded = None |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
681 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
682 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
|
683 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
684 def reposetup(ui, repo): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
685 if not repo.local(): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
686 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
687 |
37346
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37341
diff
changeset
|
688 if isinstance(repo, bundlerepo.bundlerepository): |
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37341
diff
changeset
|
689 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
|
690 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
691 class simplestorerepo(repo.__class__): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
692 def file(self, f): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
693 return filestorage(self.svfs, f) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
694 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
695 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
|
696 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
697 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
|
698 supported.add(REQUIREMENT) |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
699 |
39546
41aa5dced975
localrepo: pass ui to newreporequirements() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39234
diff
changeset
|
700 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
|
701 """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
|
702 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
|
703 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
704 # 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
|
705 # 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
|
706 # 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
|
707 #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
|
708 # requirements.remove('fncache') |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
709 #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
|
710 # requirements.remove('dotencode') |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
711 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
712 requirements.add(REQUIREMENT) |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
713 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
714 return requirements |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
715 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
716 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
|
717 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
|
718 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
|
719 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
720 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
|
721 |
37417
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
722 def verifierinit(orig, self, *args, **kwargs): |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
723 orig(self, *args, **kwargs) |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
724 |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
725 # 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
|
726 # advertised. So suppress these warnings. |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
727 self.warnorphanstorefiles = False |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
728 |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
729 def extsetup(ui): |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
730 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
|
731 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
732 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
|
733 newreporequirements) |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
734 extensions.wrapfunction(store, 'store', makestore) |
37417
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
735 extensions.wrapfunction(verify.verifier, '__init__', verifierinit) |