Mercurial > public > mercurial-scm > hg
annotate tests/simplestorerepo.py @ 52468:4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
This is the same transformation as 3a90a6fd710d did for dirstate, but the
CamelCase naming was already cleaned up here.
We shouldn't have to explicitly subclass, but I'm doing so to test the interplay
of regular attributes and the `attrs` class. Also, PyCharm has a nifty feature
that puts a jump point in the gutter to navigate back and forth between the base
class and subclasses (and override functions and base class functions) when
there's an explicit subclassing. Additionally, PyCharm will immediately flag
signature mismatches without a 40m pytype run.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Tue, 22 Oct 2024 17:18:26 -0400 |
parents | 862e3a13da44 |
children | 43d2a2f66434 |
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 |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
14 import stat |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
15 |
52468
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
50501
diff
changeset
|
16 from typing import ( |
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
50501
diff
changeset
|
17 Optional, |
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
50501
diff
changeset
|
18 ) |
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
50501
diff
changeset
|
19 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
20 from mercurial.i18n import _ |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
21 from mercurial.node import ( |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
22 bin, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
23 hex, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
24 nullrev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
25 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
26 from mercurial.thirdparty import attr |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
27 from mercurial import ( |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
28 ancestor, |
37346
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37341
diff
changeset
|
29 bundlerepo, |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
30 error, |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
31 extensions, |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
32 localrepo, |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
33 mdiff, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
34 pycompat, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
35 revlog, |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
36 store, |
37417
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
37 verify, |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
38 ) |
42813
268662aac075
interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42730
diff
changeset
|
39 from mercurial.interfaces import ( |
268662aac075
interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42730
diff
changeset
|
40 repository, |
42814
2c4f656c8e9f
interfaceutil: move to interfaces/
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42813
diff
changeset
|
41 util as interfaceutil, |
42813
268662aac075
interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42730
diff
changeset
|
42 ) |
38547
404eab7ff33f
tests: use interfaceutil in simplestorerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37442
diff
changeset
|
43 from mercurial.utils import ( |
41158
ad51e6117095
simplestorerepo: migrate to in-hg CBOR code
Augie Fackler <augie@google.com>
parents:
41157
diff
changeset
|
44 cborutil, |
39877
f8eb71f9e3bd
storageutil: new module for storage primitives (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39876
diff
changeset
|
45 storageutil, |
38547
404eab7ff33f
tests: use interfaceutil in simplestorerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37442
diff
changeset
|
46 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
47 from mercurial.revlogutils import flagutil |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
48 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
49 # 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
|
50 # 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
|
51 # 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
|
52 # leave the attribute unspecified. |
43733
8ca92bcb3083
tests: byteify a few more things in simplestorerepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
43076
diff
changeset
|
53 testedwith = b'ships-with-hg-core' |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
54 |
43733
8ca92bcb3083
tests: byteify a few more things in simplestorerepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
43076
diff
changeset
|
55 REQUIREMENT = b'testonly-simplestore' |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
56 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
57 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
58 def validatenode(node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
59 if isinstance(node, int): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
60 raise ValueError('expected node; got int') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
61 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
62 if len(node) != 20: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
63 raise ValueError('expected 20 byte node') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
64 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
65 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
66 def validaterev(rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
67 if not isinstance(rev, int): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
68 raise ValueError('expected int') |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
69 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
70 |
39777
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
71 class simplestoreerror(error.StorageError): |
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
72 pass |
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39773
diff
changeset
|
73 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
74 |
39231
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
75 @interfaceutil.implementer(repository.irevisiondelta) |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
76 @attr.s(slots=True) |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
77 class simplestorerevisiondelta: |
39231
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
78 node = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
79 p1node = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
80 p2node = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
81 basenode = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
82 flags = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
83 baserevisionsize = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
84 revision = attr.ib() |
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
85 delta = attr.ib() |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
86 linknode = attr.ib(default=None) |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
87 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
88 |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
89 @attr.s(frozen=True) |
52468
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
50501
diff
changeset
|
90 class simplefilestoreproblem(repository.iverifyproblem): |
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
50501
diff
changeset
|
91 warning = attr.ib(default=None, type=Optional[bytes]) |
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
50501
diff
changeset
|
92 error = attr.ib(default=None, type=Optional[bytes]) |
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
50501
diff
changeset
|
93 node = attr.ib(default=None, type=Optional[bytes]) |
39231
b41d023a412a
repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38547
diff
changeset
|
94 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
95 |
38547
404eab7ff33f
tests: use interfaceutil in simplestorerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37442
diff
changeset
|
96 @interfaceutil.implementer(repository.ifilestorage) |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
97 class filestorage: |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
98 """Implements storage for a tracked path. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
99 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 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
|
101 path. |
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 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
|
104 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
105 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
|
106 """ |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
107 |
42874
705428da231f
flagutil: use it in simplestorerepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42814
diff
changeset
|
108 _flagserrorclass = simplestoreerror |
705428da231f
flagutil: use it in simplestorerepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42814
diff
changeset
|
109 |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46715
diff
changeset
|
110 def __init__(self, repo, svfs, path): |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46715
diff
changeset
|
111 self.nullid = repo.nullid |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46715
diff
changeset
|
112 self._repo = repo |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
113 self._svfs = svfs |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
114 self._path = path |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
115 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
116 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
|
117 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
|
118 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
119 indexdata = self._svfs.tryread(self._indexpath) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
120 if indexdata: |
41158
ad51e6117095
simplestorerepo: migrate to in-hg CBOR code
Augie Fackler <augie@google.com>
parents:
41157
diff
changeset
|
121 indexdata = cborutil.decodeall(indexdata) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
122 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
123 self._indexdata = indexdata or [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
124 self._indexbynode = {} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
125 self._indexbyrev = {} |
39860
d9b3cc3d5d07
filelog: drop index attribute (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39844
diff
changeset
|
126 self._index = [] |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
127 self._refreshindex() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
128 |
42874
705428da231f
flagutil: use it in simplestorerepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42814
diff
changeset
|
129 self._flagprocessors = dict(flagutil.flagprocessors) |
705428da231f
flagutil: use it in simplestorerepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42814
diff
changeset
|
130 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
131 def _refreshindex(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
132 self._indexbynode.clear() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
133 self._indexbyrev.clear() |
39860
d9b3cc3d5d07
filelog: drop index attribute (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39844
diff
changeset
|
134 self._index = [] |
37337
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 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
|
137 self._indexbynode[entry[b'node']] = entry |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
138 self._indexbyrev[i] = entry |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
139 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
140 self._indexbynode[self._repo.nullid] = { |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
141 b'node': self._repo.nullid, |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
142 b'p1': self._repo.nullid, |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
143 b'p2': self._repo.nullid, |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
144 b'linkrev': nullrev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
145 b'flags': 0, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
146 } |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
147 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
148 self._indexbyrev[nullrev] = { |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
149 b'node': self._repo.nullid, |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
150 b'p1': self._repo.nullid, |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
151 b'p2': self._repo.nullid, |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
152 b'linkrev': nullrev, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
153 b'flags': 0, |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
154 } |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
155 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
156 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
|
157 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
|
158 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
159 # start, length, rawsize, chainbase, linkrev, p1, p2, node |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
160 self._index.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
161 (0, 0, 0, -1, entry[b'linkrev'], p1rev, p2rev, entry[b'node']) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
162 ) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
163 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
164 self._index.append((0, 0, 0, -1, -1, -1, -1, self._repo.nullid)) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
165 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
166 def __len__(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
167 return len(self._indexdata) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
168 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
169 def __iter__(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
170 return iter(range(len(self))) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
171 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
172 def revs(self, start=0, stop=None): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
173 step = 1 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
174 if stop is not None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
175 if start > stop: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
176 step = -1 |
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 stop += step |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
179 else: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
180 stop = len(self) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
181 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
182 return range(start, stop, step) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
183 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
184 def parents(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
185 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
186 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
187 if node not in self._indexbynode: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
188 raise KeyError('unknown node') |
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 entry = self._indexbynode[node] |
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 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
|
193 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
194 def parentrevs(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
195 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
|
196 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
|
197 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
198 def rev(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
199 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
200 |
37408
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
201 try: |
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
202 self._indexbynode[node] |
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
203 except KeyError: |
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
204 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
|
205 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
206 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
|
207 if entry[b'node'] == node: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
208 return rev |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
209 |
43733
8ca92bcb3083
tests: byteify a few more things in simplestorerepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
43076
diff
changeset
|
210 raise error.ProgrammingError(b'this should not occur') |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
211 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
212 def node(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
213 validaterev(rev) |
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._indexbyrev[rev][b'node'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
216 |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
217 def hasnode(self, node): |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
218 validatenode(node) |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
219 return node in self._indexbynode |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
220 |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
221 def censorrevision(self, tr, censornode, tombstone=b''): |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
222 raise NotImplementedError('TODO') |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
223 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
224 def lookup(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
225 if isinstance(node, int): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
226 return self.node(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
227 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
228 if len(node) == 20: |
37408
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
229 self.rev(node) |
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
230 return node |
37337
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 try: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
233 rev = int(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
234 if '%d' % rev != node: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
235 raise ValueError |
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 if rev < 0: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
238 rev = len(self) + rev |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
239 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
|
240 raise ValueError |
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 return self.node(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
243 except (ValueError, OverflowError): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
244 pass |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
245 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
246 if len(node) == 40: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
247 try: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
248 rawnode = bin(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
249 self.rev(rawnode) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
250 return rawnode |
37408
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
251 except TypeError: |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
252 pass |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
253 |
37408
dd2753729853
simplestore: shore up lookup errors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
254 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
|
255 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
256 def linkrev(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
257 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
258 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
259 return self._indexbyrev[rev][b'linkrev'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
260 |
39873
2ac4f3e97813
filelog: stop proxying flags() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39867
diff
changeset
|
261 def _flags(self, rev): |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
262 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
263 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
264 return self._indexbyrev[rev][b'flags'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
265 |
39234
3682b49e0213
repository: remove candelta() from ifileindex
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39232
diff
changeset
|
266 def _candelta(self, baserev, rev): |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
267 validaterev(baserev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
268 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
269 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
270 if (self._flags(baserev) & revlog.REVIDX_RAWTEXT_CHANGING_FLAGS) or ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
271 self._flags(rev) & revlog.REVIDX_RAWTEXT_CHANGING_FLAGS |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
272 ): |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
273 return False |
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 return True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
276 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
277 def 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
|
278 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
|
279 p1, p2 = self.parents(node) |
39877
f8eb71f9e3bd
storageutil: new module for storage primitives (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39876
diff
changeset
|
280 if node != storageutil.hashrevisionsha1(text, p1, p2): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
281 raise simplestoreerror( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
282 _("integrity check failed on %s") % self._path |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
283 ) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
284 |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
285 def revision(self, nodeorrev, raw=False): |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
286 if isinstance(nodeorrev, int): |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
287 node = self.node(nodeorrev) |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
288 else: |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
289 node = nodeorrev |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
290 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
291 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
292 if node == self._repo.nullid: |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
293 return b'' |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
294 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
295 rev = self.rev(node) |
39873
2ac4f3e97813
filelog: stop proxying flags() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39867
diff
changeset
|
296 flags = self._flags(rev) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
297 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
298 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
|
299 rawtext = self._svfs.read(path) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
300 |
42880
38c62272f462
simplestorerepo: stop using `_processflags` directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42876
diff
changeset
|
301 if raw: |
42992
dff95420480f
flagprocessors: make `processflagsraw` a module level function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42991
diff
changeset
|
302 validatehash = flagutil.processflagsraw(self, rawtext, flags) |
42880
38c62272f462
simplestorerepo: stop using `_processflags` directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42876
diff
changeset
|
303 text = rawtext |
38c62272f462
simplestorerepo: stop using `_processflags` directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42876
diff
changeset
|
304 else: |
42991
eb5048f8c533
flagprocessors: make `processflagsread` a module level function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42990
diff
changeset
|
305 r = flagutil.processflagsread(self, rawtext, flags) |
46709
3d740058b467
sidedata: move to new sidedata storage in revlogv2
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46509
diff
changeset
|
306 text, validatehash = r |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
307 if validatehash: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
308 self.checkhash(text, node, rev=rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
309 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
310 return text |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
311 |
42724
2177133724ab
rawdata: implement `rawdata` for `simplestore` too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41158
diff
changeset
|
312 def rawdata(self, nodeorrev): |
2177133724ab
rawdata: implement `rawdata` for `simplestore` too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41158
diff
changeset
|
313 return self.revision(raw=True) |
2177133724ab
rawdata: implement `rawdata` for `simplestore` too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41158
diff
changeset
|
314 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
315 def read(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
316 validatenode(node) |
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 revision = self.revision(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
319 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
320 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
|
321 return revision |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
322 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
323 start = revision.index(b'\1\n', 2) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
324 return revision[start + 2 :] |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
325 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
326 def renamed(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
327 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
328 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
329 if self.parents(node)[0] != self._repo.nullid: |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
330 return False |
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 fulltext = self.revision(node) |
39878
3e896b51aa5d
storageutil: move metadata parsing and packing from revlog (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39877
diff
changeset
|
333 m = storageutil.parsemeta(fulltext)[0] |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
334 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
335 if m and 'copy' in m: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
336 return m['copy'], bin(m['copyrev']) |
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 return False |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
339 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
340 def cmp(self, node, text): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
341 validatenode(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
342 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
343 t = text |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
344 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
345 if text.startswith(b'\1\n'): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
346 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
|
347 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
348 p1, p2 = self.parents(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
349 |
39877
f8eb71f9e3bd
storageutil: new module for storage primitives (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39876
diff
changeset
|
350 if storageutil.hashrevisionsha1(t, p1, p2) == node: |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
351 return False |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
352 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
353 if self.iscensored(self.rev(node)): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
354 return text != b'' |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
355 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
356 if self.renamed(node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
357 t2 = self.read(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
358 return t2 != text |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
359 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
360 return True |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
361 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
362 def size(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
363 validaterev(rev) |
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 node = self._indexbyrev[rev][b'node'] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
366 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
367 if self.renamed(node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
368 return len(self.read(node)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
369 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
370 if self.iscensored(rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
371 return 0 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
372 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
373 return len(self.revision(node)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
374 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
375 def iscensored(self, rev): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
376 validaterev(rev) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
377 |
40047
8e398628a3f2
repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39997
diff
changeset
|
378 return self._flags(rev) & repository.REVISION_FLAG_CENSORED |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
379 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
380 def commonancestorsheads(self, a, b): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
381 validatenode(a) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
382 validatenode(b) |
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 a = self.rev(a) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
385 b = self.rev(b) |
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 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
|
388 return pycompat.maplist(self.node, ancestors) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
389 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
390 def descendants(self, revs): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
391 # 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
|
392 first = min(revs) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
393 if first == nullrev: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
394 for i in self: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
395 yield i |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
396 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
397 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
398 seen = set(revs) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
399 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
|
400 for x in self.parentrevs(i): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
401 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
|
402 seen.add(i) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
403 yield i |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
404 break |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
405 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
406 # Required by verify. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
407 def files(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
408 entries = self._svfs.listdir(self._storepath) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
409 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
410 # 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
|
411 # recording. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
412 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
|
413 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
414 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
|
415 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
416 def storageinfo( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
417 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
418 exclusivefiles=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
419 sharedfiles=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
420 revisionscount=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
421 trackedsize=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
422 storedsize=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
423 ): |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
424 # TODO do a real implementation of this |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
425 return { |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
426 'exclusivefiles': [], |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
427 'sharedfiles': [], |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
428 'revisionscount': len(self), |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
429 'trackedsize': 0, |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
430 'storedsize': None, |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
431 } |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
432 |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
433 def verifyintegrity(self, state): |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
434 state['skipread'] = set() |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
435 for rev in self: |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
436 node = self.node(rev) |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
437 try: |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
438 self.revision(node) |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
439 except Exception as e: |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
440 yield simplefilestoreproblem( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
441 error='unpacking %s: %s' % (node, e), node=node |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
442 ) |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
443 state['skipread'].add(node) |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
444 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
445 def emitrevisions( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
446 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
447 nodes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
448 nodesorder=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
449 revisiondata=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
450 assumehaveparentrevisions=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
451 deltamode=repository.CG_DELTAMODE_STD, |
46715
45f0d5297698
changegroupv4: add sidedata helpers
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46709
diff
changeset
|
452 sidedata_helpers=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
453 ): |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
454 # TODO this will probably break on some ordering options. |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
455 nodes = [n for n in nodes if n != self._repo.nullid] |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
456 if not nodes: |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
457 return |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
458 for delta in storageutil.emitrevisions( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
459 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
460 nodes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
461 nodesorder, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
462 simplestorerevisiondelta, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
463 revisiondata=revisiondata, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
464 assumehaveparentrevisions=assumehaveparentrevisions, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
465 deltamode=deltamode, |
46715
45f0d5297698
changegroupv4: add sidedata helpers
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46709
diff
changeset
|
466 sidedata_helpers=sidedata_helpers, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
467 ): |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
468 yield delta |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
469 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
470 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
|
471 if meta or text.startswith(b'\1\n'): |
39878
3e896b51aa5d
storageutil: move metadata parsing and packing from revlog (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39877
diff
changeset
|
472 text = storageutil.packmeta(meta, text) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
473 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
474 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
|
475 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
476 def addrevision( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
477 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
478 text, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
479 transaction, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
480 linkrev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
481 p1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
482 p2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
483 node=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
484 flags=revlog.REVIDX_DEFAULT_FLAGS, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
485 cachedelta=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
486 ): |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
487 validatenode(p1) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
488 validatenode(p2) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
489 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
490 if flags: |
39877
f8eb71f9e3bd
storageutil: new module for storage primitives (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39876
diff
changeset
|
491 node = node or storageutil.hashrevisionsha1(text, p1, p2) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
492 |
42990
a04b2c010d03
flagprocessors: make `processflagswrite` a module level function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42983
diff
changeset
|
493 rawtext, validatehash = flagutil.processflagswrite(self, text, flags) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
494 |
39877
f8eb71f9e3bd
storageutil: new module for storage primitives (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39876
diff
changeset
|
495 node = node or storageutil.hashrevisionsha1(text, p1, p2) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
496 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
497 if node in self._indexbynode: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
498 return node |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
499 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
500 if validatehash: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
501 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
|
502 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
503 return self._addrawrevision( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
504 node, rawtext, transaction, linkrev, p1, p2, flags |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
505 ) |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
506 |
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
507 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
|
508 transaction.addbackup(self._indexpath) |
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
509 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
510 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
|
511 |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
512 self._svfs.write(path, rawtext) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
513 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
514 self._indexdata.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
515 { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
516 b'node': node, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
517 b'p1': p1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
518 b'p2': p2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
519 b'linkrev': link, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
520 b'flags': flags, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
521 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
522 ) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
523 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
524 self._reflectindexupdate() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
525 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
526 return node |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
527 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
528 def _reflectindexupdate(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
529 self._refreshindex() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
530 self._svfs.write( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
531 self._indexpath, ''.join(cborutil.streamencode(self._indexdata)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
532 ) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
533 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
534 def addgroup( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
535 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
536 deltas, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
537 linkmapper, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
538 transaction, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
539 addrevisioncb=None, |
45788
a5206e71c536
revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents:
44452
diff
changeset
|
540 duplicaterevisioncb=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
541 maybemissingparents=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
542 ): |
40389
1b183edbb68e
repository: teach addgroup() to receive data with missing parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40047
diff
changeset
|
543 if maybemissingparents: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
544 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
545 _('simple store does not support missing parents ' 'write mode') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
546 ) |
40389
1b183edbb68e
repository: teach addgroup() to receive data with missing parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40047
diff
changeset
|
547 |
45788
a5206e71c536
revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents:
44452
diff
changeset
|
548 empty = True |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
549 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
550 transaction.addbackup(self._indexpath) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
551 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
552 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
|
553 linkrev = linkmapper(linknode) |
37436
9d4f09bfe3ec
simplestore: correctly implement flag processors
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37424
diff
changeset
|
554 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
|
555 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
556 if node in self._indexbynode: |
45788
a5206e71c536
revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents:
44452
diff
changeset
|
557 if duplicaterevisioncb: |
46509
7a93b7b3dc2d
revlog: change addgroup callbacks to take revision numbers
Joerg Sonnenberger <joerg@bec.de>
parents:
45788
diff
changeset
|
558 duplicaterevisioncb(self, self.rev(node)) |
45788
a5206e71c536
revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents:
44452
diff
changeset
|
559 empty = False |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
560 continue |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
561 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
562 # Need to resolve the fulltext from the delta base. |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
563 if deltabase == self._repo.nullid: |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
564 text = mdiff.patch(b'', delta) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
565 else: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
566 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
|
567 |
46509
7a93b7b3dc2d
revlog: change addgroup callbacks to take revision numbers
Joerg Sonnenberger <joerg@bec.de>
parents:
45788
diff
changeset
|
568 rev = self._addrawrevision( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
569 node, text, transaction, linkrev, p1, p2, flags |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
570 ) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
571 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
572 if addrevisioncb: |
46509
7a93b7b3dc2d
revlog: change addgroup callbacks to take revision numbers
Joerg Sonnenberger <joerg@bec.de>
parents:
45788
diff
changeset
|
573 addrevisioncb(self, rev) |
45788
a5206e71c536
revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents:
44452
diff
changeset
|
574 empty = False |
a5206e71c536
revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents:
44452
diff
changeset
|
575 return not empty |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
576 |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
577 def _headrevs(self): |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
578 # Assume all revisions are heads by default. |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
579 revishead = {rev: True for rev in self._indexbyrev} |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
580 |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
581 for rev, entry in self._indexbyrev.items(): |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
582 # Unset head flag for all seen parents. |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
583 revishead[self.rev(entry[b'p1'])] = False |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
584 revishead[self.rev(entry[b'p2'])] = False |
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
585 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
586 return [rev for rev, ishead in sorted(revishead.items()) if ishead] |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
587 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
588 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
|
589 # This is copied from revlog.py. |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
590 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
|
591 if not len(self): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
592 return [self._repo.nullid] |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
593 return [self.node(r) for r in self._headrevs()] |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
594 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
595 if start is None: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
596 start = self._repo.nullid |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
597 if stop is None: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
598 stop = [] |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
43733
diff
changeset
|
599 stoprevs = {self.rev(n) for n in stop} |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
600 startrev = self.rev(start) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
601 reachable = {startrev} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
602 heads = {startrev} |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
603 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
604 parentrevs = self.parentrevs |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
605 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
|
606 for p in parentrevs(r): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
607 if p in reachable: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
608 if r not in stoprevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
609 reachable.add(r) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
610 heads.add(r) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
611 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
|
612 heads.remove(p) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
613 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
614 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
|
615 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
616 def children(self, node): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
617 validatenode(node) |
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 is a copy of revlog.children(). |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
620 c = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
621 p = self.rev(node) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
622 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
|
623 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
|
624 if prevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
625 for pr in prevs: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
626 if pr == p: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
627 c.append(self.node(r)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
628 elif p == nullrev: |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
629 c.append(self.node(r)) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
630 return c |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
631 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
632 def getstrippoint(self, minlink): |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
633 return storageutil.resolvestripinfo( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
634 minlink, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
635 len(self) - 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
636 self._headrevs(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
637 self.linkrev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
638 self.parentrevs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
639 ) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
640 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
641 def strip(self, minlink, transaction): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
642 if not len(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
643 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
644 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
645 rev, _ignored = self.getstrippoint(minlink) |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
646 if rev == len(self): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
647 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
648 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
649 # 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
|
650 self._indexdata[rev:] = [] |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
651 self._reflectindexupdate() |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
652 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
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 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
668 |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
669 class simplestore(store.encodedstore): |
50501
862e3a13da44
store: rename `datafiles` to `data_entries`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
670 def data_entries(self, undecodable=None): |
862e3a13da44
store: rename `datafiles` to `data_entries`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
671 for x in super(simplestore, self).data_entries(): |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
672 yield x |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
673 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
674 # 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
|
675 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
|
676 |
47877
2174f54aab18
store: return just one filename in walk functions
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
47012
diff
changeset
|
677 for f1, size in extrafiles: |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
678 try: |
47877
2174f54aab18
store: return just one filename in walk functions
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
47012
diff
changeset
|
679 f2 = store.decodefilename(f1) |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
680 except KeyError: |
47877
2174f54aab18
store: return just one filename in walk functions
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
47012
diff
changeset
|
681 if undecodable is None: |
2174f54aab18
store: return just one filename in walk functions
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
47012
diff
changeset
|
682 raise error.StorageError(b'undecodable revlog name %s' % f1) |
2174f54aab18
store: return just one filename in walk functions
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
47012
diff
changeset
|
683 else: |
2174f54aab18
store: return just one filename in walk functions
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
47012
diff
changeset
|
684 undecodable.append(f1) |
2174f54aab18
store: return just one filename in walk functions
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
47012
diff
changeset
|
685 continue |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
686 |
47877
2174f54aab18
store: return just one filename in walk functions
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
47012
diff
changeset
|
687 yield f2, size |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
688 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
689 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
690 def reposetup(ui, repo): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
691 if not repo.local(): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
692 return |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
693 |
37346
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37341
diff
changeset
|
694 if isinstance(repo, bundlerepo.bundlerepository): |
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37341
diff
changeset
|
695 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
|
696 |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
697 class simplestorerepo(repo.__class__): |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
698 def file(self, f): |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46715
diff
changeset
|
699 return filestorage(repo, self.svfs, f) |
37337
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
700 |
d257c5f2a940
tests: add test extension implementing custom filelog storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
701 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
|
702 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
703 |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
704 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
|
705 supported.add(REQUIREMENT) |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
706 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
707 |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
708 def newreporequirements(orig, ui, createopts): |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
709 """Modifies default requirements for new repos to use the simple store.""" |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
710 requirements = orig(ui, createopts) |
37415
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 # 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
|
713 # 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
|
714 # TODO do this once we feel like taking the test hit. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
715 # if 'fncache' in requirements: |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
716 # requirements.remove('fncache') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
717 # if 'dotencode' in requirements: |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
718 # requirements.remove('dotencode') |
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 requirements.add(REQUIREMENT) |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
721 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
722 return requirements |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
723 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
724 |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
725 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
|
726 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
|
727 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
|
728 |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
729 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
|
730 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
731 |
37417
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
732 def verifierinit(orig, self, *args, **kwargs): |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
733 orig(self, *args, **kwargs) |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
734 |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
735 # 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
|
736 # advertised. So suppress these warnings. |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
737 self.warnorphanstorefiles = False |
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
738 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
739 |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
740 def extsetup(ui): |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37408
diff
changeset
|
741 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
|
742 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
743 extensions.wrapfunction( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
744 localrepo, 'newreporequirements', newreporequirements |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42995
diff
changeset
|
745 ) |
41157
c4639fdae1b9
simplestorerepo: minimal changes required to get this mostly working again
Augie Fackler <augie@google.com>
parents:
40389
diff
changeset
|
746 extensions.wrapfunction(localrepo, 'makestore', makestore) |
37417
76d2115cb817
verify: allow suppressing warnings about extra files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37415
diff
changeset
|
747 extensions.wrapfunction(verify.verifier, '__init__', verifierinit) |