Mercurial > public > mercurial-scm > hg
annotate hgext/sqlitestore.py @ 52489:ba8f03ad8906
filelog: subclass the new `repository.ifilestorage` Protocol class
This is the same transformation as 3a90a6fd710d did for dirstate, but the
CamelCase naming was already cleaned up here. See 4ef6dbc27a99 for the benefits
of explicit subclassing.
One thing to mention is that pytype gets confused if Protocol classes preceed a
regular class in the superclass list, so the interface goes last in the git
extension. (I didn't bother to verify that it would have been an issue here,
rather it was something I noticed when making `repository.ipeerbase` a Protocol
class locally before dropping it entirely earlier in this series.)
One other thing is that PyCharm starts flagging `__len__()` and `hasnode()` on
`hgext.git.gitlog.baselog` with:
"Type of 'hasnode' is incompatible with 'ifilestorage'"
No clue why; it's happy with the other 3 implementations (at least with these
methods- simplestorerepo.py looks badly broken otherwise).
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Tue, 22 Oct 2024 23:36:48 -0400 |
parents | 3daaa5195a30 |
children | ef119f914fc1 |
rev | line source |
---|---|
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1 # sqlitestore.py - Storage backend that uses SQLite |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
2 # |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
3 # Copyright 2018 Gregory Szorc <gregory.szorc@gmail.com> |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
4 # |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
7 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
8 """store repository data in SQLite (EXPERIMENTAL) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
9 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
10 The sqlitestore extension enables the storage of repository data in SQLite. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
11 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
12 This extension is HIGHLY EXPERIMENTAL. There are NO BACKWARDS COMPATIBILITY |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
13 GUARANTEES. This means that repositories created with this extension may |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
14 only be usable with the exact version of this extension/Mercurial that was |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
15 used. The extension attempts to enforce this in order to prevent repository |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
16 corruption. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
17 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
18 In addition, several features are not yet supported or have known bugs: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
19 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
20 * Only some data is stored in SQLite. Changeset, manifest, and other repository |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
21 data is not yet stored in SQLite. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
22 * Transactions are not robust. If the process is aborted at the right time |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
23 during transaction close/rollback, the repository could be in an inconsistent |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
24 state. This problem will diminish once all repository data is tracked by |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
25 SQLite. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
26 * Bundle repositories do not work (the ability to use e.g. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
27 `hg -R <bundle-file> log` to automatically overlay a bundle on top of the |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
28 existing repository). |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
29 * Various other features don't work. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
30 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
31 This extension should work for basic clone/pull, update, and commit workflows. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
32 Some history rewriting operations may fail due to lack of support for bundle |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
33 repositories. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
34 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
35 To use, activate the extension and set the ``storage.new-repo-backend`` config |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
36 option to ``sqlite`` to enable new repositories to use SQLite for storage. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
37 """ |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
38 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
39 # To run the test suite with repos using SQLite by default, execute the |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
40 # following: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
41 # |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
42 # HGREPOFEATURES="sqlitestore" run-tests.py \ |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
43 # --extra-config-opt extensions.sqlitestore= \ |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
44 # --extra-config-opt storage.new-repo-backend=sqlite |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
45 |
51859
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51725
diff
changeset
|
46 from __future__ import annotations |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
47 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
48 import sqlite3 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
49 import struct |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
50 import threading |
51725
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51699
diff
changeset
|
51 import typing |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
52 import zlib |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
53 |
52468
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
51859
diff
changeset
|
54 from typing import ( |
52487
3daaa5195a30
typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents:
52470
diff
changeset
|
55 Iterable, |
3daaa5195a30
typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents:
52470
diff
changeset
|
56 Iterator, |
52468
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
51859
diff
changeset
|
57 Optional, |
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
51859
diff
changeset
|
58 ) |
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
51859
diff
changeset
|
59 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
60 from mercurial.i18n import _ |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
61 from mercurial.node import ( |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
62 nullrev, |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46715
diff
changeset
|
63 sha1nodeconstants, |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
64 short, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
65 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
66 from mercurial.thirdparty import attr |
51725
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51699
diff
changeset
|
67 |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51699
diff
changeset
|
68 # Force pytype to use the non-vendored package |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51699
diff
changeset
|
69 if typing.TYPE_CHECKING: |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51699
diff
changeset
|
70 # noinspection PyPackageRequirements |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51699
diff
changeset
|
71 import attr |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51699
diff
changeset
|
72 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
73 from mercurial import ( |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
74 ancestor, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
75 dagop, |
40410
3b782669561d
py3: make sure we pass sysstr in sqlite3.connect()
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40392
diff
changeset
|
76 encoding, |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
77 error, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
78 extensions, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
79 localrepo, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
80 mdiff, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
81 pycompat, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
82 registrar, |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44062
diff
changeset
|
83 requirements, |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
84 util, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
85 verify, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
86 ) |
42813
268662aac075
interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42772
diff
changeset
|
87 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:
42772
diff
changeset
|
88 repository, |
42814
2c4f656c8e9f
interfaceutil: move to interfaces/
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42813
diff
changeset
|
89 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:
42772
diff
changeset
|
90 ) |
44062
2d49482d0dd4
hgext: replace references to hashlib.sha1 with hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43507
diff
changeset
|
91 from mercurial.utils import ( |
2d49482d0dd4
hgext: replace references to hashlib.sha1 with hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43507
diff
changeset
|
92 hashutil, |
2d49482d0dd4
hgext: replace references to hashlib.sha1 with hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43507
diff
changeset
|
93 storageutil, |
2d49482d0dd4
hgext: replace references to hashlib.sha1 with hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43507
diff
changeset
|
94 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
95 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
96 try: |
49849
de9ffb82ef4d
typing: suppress a bunch of potential import-error cases in extensions
Matt Harbison <matt_harbison@yahoo.com>
parents:
49845
diff
changeset
|
97 from mercurial import zstd # pytype: disable=import-error |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
98 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
99 zstd.__version__ |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 except ImportError: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
101 zstd = None |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
102 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
103 configtable = {} |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
104 configitem = registrar.configitem(configtable) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
105 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
106 # experimental config: storage.sqlite.compression |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
107 configitem( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
108 b'storage', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
109 b'sqlite.compression', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
110 default=b'zstd' if zstd else b'zlib', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
111 experimental=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
112 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
113 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
114 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
115 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
116 # be specifying the version(s) of Mercurial they are tested with, or |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
117 # leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
118 testedwith = b'ships-with-hg-core' |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
119 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
120 REQUIREMENT = b'exp-sqlite-001' |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
121 REQUIREMENT_ZSTD = b'exp-sqlite-comp-001=zstd' |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
122 REQUIREMENT_ZLIB = b'exp-sqlite-comp-001=zlib' |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
123 REQUIREMENT_NONE = b'exp-sqlite-comp-001=none' |
40390
7e3b6c4f01a2
localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40389
diff
changeset
|
124 REQUIREMENT_SHALLOW_FILES = b'exp-sqlite-shallow-files' |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
125 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
126 CURRENT_SCHEMA_VERSION = 1 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
127 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
128 COMPRESSION_NONE = 1 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
129 COMPRESSION_ZSTD = 2 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
130 COMPRESSION_ZLIB = 3 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
131 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
132 FLAG_CENSORED = 1 |
40392
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
133 FLAG_MISSING_P1 = 2 |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
134 FLAG_MISSING_P2 = 4 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
135 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
136 CREATE_SCHEMA = [ |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
137 # Deltas are stored as content-indexed blobs. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
138 # compression column holds COMPRESSION_* constant for how the |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
139 # delta is encoded. |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
140 'CREATE TABLE delta (' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
141 ' id INTEGER PRIMARY KEY, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
142 ' compression INTEGER NOT NULL, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
143 ' hash BLOB UNIQUE ON CONFLICT ABORT, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
144 ' delta BLOB NOT NULL ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
145 ')', |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
146 # Tracked paths are denormalized to integers to avoid redundant |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
147 # storage of the path name. |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
148 'CREATE TABLE filepath (' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
149 ' id INTEGER PRIMARY KEY, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
150 ' path BLOB NOT NULL ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
151 ')', |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
152 'CREATE UNIQUE INDEX filepath_path ON filepath (path)', |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
153 # We have a single table for all file revision data. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
154 # Each file revision is uniquely described by a (path, rev) and |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
155 # (path, node). |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
156 # |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
157 # Revision data is stored as a pointer to the delta producing this |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
158 # revision and the file revision whose delta should be applied before |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
159 # that one. One can reconstruct the delta chain by recursively following |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
160 # the delta base revision pointers until one encounters NULL. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
161 # |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
162 # flags column holds bitwise integer flags controlling storage options. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
163 # These flags are defined by the FLAG_* constants. |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
164 'CREATE TABLE fileindex (' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
165 ' id INTEGER PRIMARY KEY, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
166 ' pathid INTEGER REFERENCES filepath(id), ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
167 ' revnum INTEGER NOT NULL, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
168 ' p1rev INTEGER NOT NULL, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
169 ' p2rev INTEGER NOT NULL, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
170 ' linkrev INTEGER NOT NULL, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
171 ' flags INTEGER NOT NULL, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
172 ' deltaid INTEGER REFERENCES delta(id), ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
173 ' deltabaseid INTEGER REFERENCES fileindex(id), ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
174 ' node BLOB NOT NULL ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
175 ')', |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
176 'CREATE UNIQUE INDEX fileindex_pathrevnum ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
177 ' ON fileindex (pathid, revnum)', |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
178 'CREATE UNIQUE INDEX fileindex_pathnode ON fileindex (pathid, node)', |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
179 # Provide a view over all file data for convenience. |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
180 'CREATE VIEW filedata AS ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
181 'SELECT ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
182 ' fileindex.id AS id, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
183 ' filepath.id AS pathid, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
184 ' filepath.path AS path, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
185 ' fileindex.revnum AS revnum, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
186 ' fileindex.node AS node, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
187 ' fileindex.p1rev AS p1rev, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
188 ' fileindex.p2rev AS p2rev, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
189 ' fileindex.linkrev AS linkrev, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
190 ' fileindex.flags AS flags, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
191 ' fileindex.deltaid AS deltaid, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
192 ' fileindex.deltabaseid AS deltabaseid ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
193 'FROM filepath, fileindex ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
194 'WHERE fileindex.pathid=filepath.id', |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
195 'PRAGMA user_version=%d' % CURRENT_SCHEMA_VERSION, |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
196 ] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
197 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
198 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
199 def resolvedeltachain(db, pathid, node, revisioncache, stoprids, zstddctx=None): |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
200 """Resolve a delta chain for a file node.""" |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
201 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
202 # TODO the "not in ({stops})" here is possibly slowing down the query |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
203 # because it needs to perform the lookup on every recursive invocation. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
204 # This could possibly be faster if we created a temporary query with |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
205 # baseid "poisoned" to null and limited the recursive filter to |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
206 # "is not null". |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
207 res = db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
208 'WITH RECURSIVE ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
209 ' deltachain(deltaid, baseid) AS (' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
210 ' SELECT deltaid, deltabaseid FROM fileindex ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
211 ' WHERE pathid=? AND node=? ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
212 ' UNION ALL ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
213 ' SELECT fileindex.deltaid, deltabaseid ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
214 ' FROM fileindex, deltachain ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
215 ' WHERE ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
216 ' fileindex.id=deltachain.baseid ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
217 ' AND deltachain.baseid IS NOT NULL ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
218 ' AND fileindex.id NOT IN ({stops}) ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
219 ' ) ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
220 'SELECT deltachain.baseid, compression, delta ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
221 'FROM deltachain, delta ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
222 'WHERE delta.id=deltachain.deltaid'.format( |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
223 stops=','.join(['?'] * len(stoprids)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
224 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
225 tuple([pathid, node] + list(stoprids.keys())), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
226 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
227 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
228 deltas = [] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
229 lastdeltabaseid = None |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
230 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
231 for deltabaseid, compression, delta in res: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
232 lastdeltabaseid = deltabaseid |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
233 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
234 if compression == COMPRESSION_ZSTD: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
235 delta = zstddctx.decompress(delta) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
236 elif compression == COMPRESSION_NONE: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
237 delta = delta |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
238 elif compression == COMPRESSION_ZLIB: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
239 delta = zlib.decompress(delta) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
240 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
241 raise SQLiteStoreError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
242 b'unhandled compression type: %d' % compression |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
243 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
244 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
245 deltas.append(delta) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
246 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
247 if lastdeltabaseid in stoprids: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
248 basetext = revisioncache[stoprids[lastdeltabaseid]] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
249 else: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
250 basetext = deltas.pop() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
251 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
252 deltas.reverse() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
253 fulltext = mdiff.patches(basetext, deltas) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
254 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
255 # SQLite returns buffer instances for blob columns on Python 2. This |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
256 # type can propagate through the delta application layer. Because |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
257 # downstream callers assume revisions are bytes, cast as needed. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
258 if not isinstance(fulltext, bytes): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
259 fulltext = bytes(delta) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
260 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
261 return fulltext |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
262 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
263 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
264 def insertdelta(db, compression, hash, delta): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
265 try: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
266 return db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
267 'INSERT INTO delta (compression, hash, delta) VALUES (?, ?, ?)', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
268 (compression, hash, delta), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
269 ).lastrowid |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
270 except sqlite3.IntegrityError: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
271 return db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
272 'SELECT id FROM delta WHERE hash=?', (hash,) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
273 ).fetchone()[0] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
274 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
275 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
276 class SQLiteStoreError(error.StorageError): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
277 pass |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
278 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
279 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
280 @attr.s |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
281 class revisionentry: |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
282 rid = attr.ib() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
283 rev = attr.ib() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
284 node = attr.ib() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
285 p1rev = attr.ib() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
286 p2rev = attr.ib() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
287 p1node = attr.ib() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
288 p2node = attr.ib() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
289 linkrev = attr.ib() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
290 flags = attr.ib() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
291 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
292 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
293 @attr.s(slots=True) |
52470
43d2a2f66434
revlog: subclass the new `repository.irevisiondelta` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52468
diff
changeset
|
294 class sqliterevisiondelta(repository.irevisiondelta): |
43d2a2f66434
revlog: subclass the new `repository.irevisiondelta` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52468
diff
changeset
|
295 node = attr.ib(type=bytes) |
43d2a2f66434
revlog: subclass the new `repository.irevisiondelta` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52468
diff
changeset
|
296 p1node = attr.ib(type=bytes) |
43d2a2f66434
revlog: subclass the new `repository.irevisiondelta` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52468
diff
changeset
|
297 p2node = attr.ib(type=bytes) |
43d2a2f66434
revlog: subclass the new `repository.irevisiondelta` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52468
diff
changeset
|
298 basenode = attr.ib(type=bytes) |
43d2a2f66434
revlog: subclass the new `repository.irevisiondelta` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52468
diff
changeset
|
299 flags = attr.ib(type=int) |
43d2a2f66434
revlog: subclass the new `repository.irevisiondelta` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52468
diff
changeset
|
300 baserevisionsize = attr.ib(type=Optional[int]) |
43d2a2f66434
revlog: subclass the new `repository.irevisiondelta` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52468
diff
changeset
|
301 revision = attr.ib(type=Optional[bytes]) |
43d2a2f66434
revlog: subclass the new `repository.irevisiondelta` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52468
diff
changeset
|
302 delta = attr.ib(type=Optional[bytes]) |
43d2a2f66434
revlog: subclass the new `repository.irevisiondelta` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52468
diff
changeset
|
303 sidedata = attr.ib(type=Optional[bytes]) |
43d2a2f66434
revlog: subclass the new `repository.irevisiondelta` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52468
diff
changeset
|
304 protocol_flags = attr.ib(type=int) |
43d2a2f66434
revlog: subclass the new `repository.irevisiondelta` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52468
diff
changeset
|
305 linknode = attr.ib(default=None, type=Optional[bytes]) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
306 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
307 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
308 @attr.s(frozen=True) |
52468
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
51859
diff
changeset
|
309 class sqliteproblem(repository.iverifyproblem): |
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
51859
diff
changeset
|
310 warning = attr.ib(default=None, type=Optional[bytes]) |
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
51859
diff
changeset
|
311 error = attr.ib(default=None, type=Optional[bytes]) |
4ef6dbc27a99
revlog: subclass the new `repository.iverifyproblem` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
51859
diff
changeset
|
312 node = attr.ib(default=None, type=Optional[bytes]) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
313 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
314 |
52489
ba8f03ad8906
filelog: subclass the new `repository.ifilestorage` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents:
52487
diff
changeset
|
315 class sqlitefilestore(repository.ifilestorage): |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
316 """Implements storage for an individual tracked path.""" |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
317 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
318 def __init__(self, db, path, compression): |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46715
diff
changeset
|
319 self.nullid = sha1nodeconstants.nullid |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
320 self._db = db |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
321 self._path = path |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
322 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
323 self._pathid = None |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
324 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
325 # revnum -> node |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
326 self._revtonode = {} |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
327 # node -> revnum |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
328 self._nodetorev = {} |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
329 # node -> data structure |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
330 self._revisions = {} |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
331 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
332 self._revisioncache = util.lrucachedict(10) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
333 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
334 self._compengine = compression |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
335 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
336 if compression == b'zstd': |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
337 self._cctx = zstd.ZstdCompressor(level=3) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
338 self._dctx = zstd.ZstdDecompressor() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
339 else: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
340 self._cctx = None |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
341 self._dctx = None |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
342 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
343 self._refreshindex() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
344 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
345 def _refreshindex(self): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
346 self._revtonode = {} |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
347 self._nodetorev = {} |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
348 self._revisions = {} |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
349 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
350 res = list( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
351 self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
352 'SELECT id FROM filepath WHERE path=?', (self._path,) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
353 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
354 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
355 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
356 if not res: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
357 self._pathid = None |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
358 return |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
359 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
360 self._pathid = res[0][0] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
361 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
362 res = self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
363 'SELECT id, revnum, node, p1rev, p2rev, linkrev, flags ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
364 'FROM fileindex ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
365 'WHERE pathid=? ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
366 'ORDER BY revnum ASC', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
367 (self._pathid,), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
368 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
369 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
370 for i, row in enumerate(res): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
371 rid, rev, node, p1rev, p2rev, linkrev, flags = row |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
372 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
373 if i != rev: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
374 raise SQLiteStoreError( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
375 _(b'sqlite database has inconsistent revision numbers') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
376 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
377 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
378 if p1rev == nullrev: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
379 p1node = sha1nodeconstants.nullid |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
380 else: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
381 p1node = self._revtonode[p1rev] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
382 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
383 if p2rev == nullrev: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
384 p2node = sha1nodeconstants.nullid |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
385 else: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
386 p2node = self._revtonode[p2rev] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
387 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
388 entry = revisionentry( |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
389 rid=rid, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
390 rev=rev, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
391 node=node, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
392 p1rev=p1rev, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
393 p2rev=p2rev, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
394 p1node=p1node, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
395 p2node=p2node, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
396 linkrev=linkrev, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
397 flags=flags, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
398 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
399 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
400 self._revtonode[rev] = node |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
401 self._nodetorev[node] = rev |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
402 self._revisions[node] = entry |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
403 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
404 # Start of ifileindex interface. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
405 |
52487
3daaa5195a30
typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents:
52470
diff
changeset
|
406 def __len__(self) -> int: |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
407 return len(self._revisions) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
408 |
52487
3daaa5195a30
typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents:
52470
diff
changeset
|
409 def __iter__(self) -> Iterator[int]: |
49284
d44e3c45f0e4
py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
410 return iter(range(len(self._revisions))) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
411 |
40387
f1a39128da95
filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40326
diff
changeset
|
412 def hasnode(self, node): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
413 if node == sha1nodeconstants.nullid: |
40387
f1a39128da95
filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40326
diff
changeset
|
414 return False |
f1a39128da95
filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40326
diff
changeset
|
415 |
f1a39128da95
filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40326
diff
changeset
|
416 return node in self._nodetorev |
f1a39128da95
filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40326
diff
changeset
|
417 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
418 def revs(self, start=0, stop=None): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
419 return storageutil.iterrevs( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
420 len(self._revisions), start=start, stop=stop |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
421 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
422 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
423 def parents(self, node): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
424 if node == sha1nodeconstants.nullid: |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
425 return sha1nodeconstants.nullid, sha1nodeconstants.nullid |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
426 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
427 if node not in self._revisions: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
428 raise error.LookupError(node, self._path, _(b'no node')) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
429 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
430 entry = self._revisions[node] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
431 return entry.p1node, entry.p2node |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
432 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
433 def parentrevs(self, rev): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
434 if rev == nullrev: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
435 return nullrev, nullrev |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
436 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
437 if rev not in self._revtonode: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
438 raise IndexError(rev) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
439 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
440 entry = self._revisions[self._revtonode[rev]] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
441 return entry.p1rev, entry.p2rev |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
442 |
49789
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
443 def ancestors(self, revs, stoprev=0, inclusive=False): |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
444 """Generate the ancestors of 'revs' in reverse revision order. |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
445 Does not generate revs lower than stoprev. |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
446 |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
447 See the documentation for ancestor.lazyancestors for more details.""" |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
448 |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
449 # first, make sure start revisions aren't filtered |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
450 revs = list(revs) |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
451 checkrev = self.node |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
452 for r in revs: |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
453 checkrev(r) |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
454 |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
455 return ancestor.lazyancestors( |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
456 self.parentrevs, |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
457 revs, |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
458 stoprev=stoprev, |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
459 inclusive=inclusive, |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
460 ) |
df750b81272f
sqlitestore: add an `ancestors` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
461 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
462 def rev(self, node): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
463 if node == sha1nodeconstants.nullid: |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
464 return nullrev |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
465 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
466 if node not in self._nodetorev: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
467 raise error.LookupError(node, self._path, _(b'no node')) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
468 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
469 return self._nodetorev[node] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
470 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
471 def node(self, rev): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
472 if rev == nullrev: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
473 return sha1nodeconstants.nullid |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
474 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
475 if rev not in self._revtonode: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
476 raise IndexError(rev) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
477 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
478 return self._revtonode[rev] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
479 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
480 def lookup(self, node): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
481 return storageutil.fileidlookup(self, node, self._path) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
482 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
483 def linkrev(self, rev): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
484 if rev == nullrev: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
485 return nullrev |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
486 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
487 if rev not in self._revtonode: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
488 raise IndexError(rev) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
489 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
490 entry = self._revisions[self._revtonode[rev]] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
491 return entry.linkrev |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
492 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
493 def iscensored(self, rev): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
494 if rev == nullrev: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
495 return False |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
496 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
497 if rev not in self._revtonode: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
498 raise IndexError(rev) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
499 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
500 return self._revisions[self._revtonode[rev]].flags & FLAG_CENSORED |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
501 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
502 def commonancestorsheads(self, node1, node2): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
503 rev1 = self.rev(node1) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
504 rev2 = self.rev(node2) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
505 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
506 ancestors = ancestor.commonancestorsheads(self.parentrevs, rev1, rev2) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
507 return pycompat.maplist(self.node, ancestors) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
508 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
509 def descendants(self, revs): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
510 # TODO we could implement this using a recursive SQL query, which |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
511 # might be faster. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
512 return dagop.descendantrevs(revs, self.revs, self.parentrevs) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
513 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
514 def heads(self, start=None, stop=None): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
515 if start is None and stop is None: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
516 if not len(self): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
517 return [sha1nodeconstants.nullid] |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
518 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
519 startrev = self.rev(start) if start is not None else nullrev |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
520 stoprevs = {self.rev(n) for n in stop or []} |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
521 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
522 revs = dagop.headrevssubset( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
523 self.revs, self.parentrevs, startrev=startrev, stoprevs=stoprevs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
524 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
525 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
526 return [self.node(rev) for rev in revs] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
527 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
528 def children(self, node): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
529 rev = self.rev(node) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
530 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
531 res = self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
532 'SELECT' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
533 ' node ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
534 ' FROM filedata ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
535 ' WHERE path=? AND (p1rev=? OR p2rev=?) ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
536 ' ORDER BY revnum ASC', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
537 (self._path, rev, rev), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
538 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
539 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
540 return [row[0] for row in res] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
541 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
542 # End of ifileindex interface. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
543 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
544 # Start of ifiledata interface. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
545 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
546 def size(self, rev): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
547 if rev == nullrev: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
548 return 0 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
549 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
550 if rev not in self._revtonode: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
551 raise IndexError(rev) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
552 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
553 node = self._revtonode[rev] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
554 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
555 if self.renamed(node): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
556 return len(self.read(node)) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
557 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
558 return len(self.revision(node)) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
559 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
560 def revision(self, node, raw=False, _verifyhash=True): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
561 if node in (sha1nodeconstants.nullid, nullrev): |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
562 return b'' |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
563 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
564 if isinstance(node, int): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
565 node = self.node(node) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
566 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
567 if node not in self._nodetorev: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
568 raise error.LookupError(node, self._path, _(b'no node')) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
569 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
570 if node in self._revisioncache: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
571 return self._revisioncache[node] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
572 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
573 # Because we have a fulltext revision cache, we are able to |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
574 # short-circuit delta chain traversal and decompression as soon as |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
575 # we encounter a revision in the cache. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
576 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
577 stoprids = {self._revisions[n].rid: n for n in self._revisioncache} |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
578 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
579 if not stoprids: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
580 stoprids[-1] = None |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
581 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
582 fulltext = resolvedeltachain( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
583 self._db, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
584 self._pathid, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
585 node, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
586 self._revisioncache, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
587 stoprids, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
588 zstddctx=self._dctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
589 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
590 |
40392
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
591 # Don't verify hashes if parent nodes were rewritten, as the hash |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
592 # wouldn't verify. |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
593 if self._revisions[node].flags & (FLAG_MISSING_P1 | FLAG_MISSING_P2): |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
594 _verifyhash = False |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
595 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
596 if _verifyhash: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
597 self._checkhash(fulltext, node) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
598 self._revisioncache[node] = fulltext |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
599 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
600 return fulltext |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
601 |
42722
c9f3f4c8999a
rawdata: implement `rawdata` for `sqlitestore` too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
40460
diff
changeset
|
602 def rawdata(self, *args, **kwargs): |
c9f3f4c8999a
rawdata: implement `rawdata` for `sqlitestore` too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
40460
diff
changeset
|
603 return self.revision(*args, **kwargs) |
c9f3f4c8999a
rawdata: implement `rawdata` for `sqlitestore` too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
40460
diff
changeset
|
604 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
605 def read(self, node): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
606 return storageutil.filtermetadata(self.revision(node)) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
607 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
608 def renamed(self, node): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
609 return storageutil.filerevisioncopied(self, node) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
610 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
611 def cmp(self, node, fulltext): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
612 return not storageutil.filedataequivalent(self, node, fulltext) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
613 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
614 def emitrevisions( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
615 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
616 nodes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
617 nodesorder=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
618 revisiondata=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
619 assumehaveparentrevisions=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
620 deltamode=repository.CG_DELTAMODE_STD, |
46715
45f0d5297698
changegroupv4: add sidedata helpers
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46712
diff
changeset
|
621 sidedata_helpers=None, |
49609
9cac281eb9c0
debug: add an option to display statistic about a bundling operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49284
diff
changeset
|
622 debug_info=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
623 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
624 if nodesorder not in (b'nodes', b'storage', b'linear', None): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
625 raise error.ProgrammingError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
626 b'unhandled value for nodesorder: %s' % nodesorder |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
627 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
628 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
629 nodes = [n for n in nodes if n != sha1nodeconstants.nullid] |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
630 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
631 if not nodes: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
632 return |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
633 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
634 # TODO perform in a single query. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
635 res = self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
636 'SELECT revnum, deltaid FROM fileindex ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
637 'WHERE pathid=? ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
638 ' AND node in (%s)' % (','.join(['?'] * len(nodes))), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
639 tuple([self._pathid] + nodes), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
640 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
641 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
642 deltabases = {} |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
643 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
644 for rev, deltaid in res: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
645 res = self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
646 'SELECT revnum from fileindex WHERE pathid=? AND deltaid=?', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
647 (self._pathid, deltaid), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
648 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
649 deltabases[rev] = res.fetchone()[0] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
650 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
651 # TODO define revdifffn so we can use delta from storage. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
652 for delta in storageutil.emitrevisions( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
653 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
654 nodes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
655 nodesorder, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
656 sqliterevisiondelta, |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
657 deltaparentfn=deltabases.__getitem__, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
658 revisiondata=revisiondata, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
659 assumehaveparentrevisions=assumehaveparentrevisions, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
660 deltamode=deltamode, |
46715
45f0d5297698
changegroupv4: add sidedata helpers
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46712
diff
changeset
|
661 sidedata_helpers=sidedata_helpers, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
662 ): |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
663 yield delta |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
664 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
665 # End of ifiledata interface. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
666 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
667 # Start of ifilemutation interface. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
668 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
669 def add(self, filedata, meta, transaction, linkrev, p1, p2): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
670 if meta or filedata.startswith(b'\x01\n'): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
671 filedata = storageutil.packmeta(meta, filedata) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
672 |
46508
f7b61ad3c64a
revlog: change addrevision to return the new revision, not node
Joerg Sonnenberger <joerg@bec.de>
parents:
45788
diff
changeset
|
673 rev = self.addrevision(filedata, transaction, linkrev, p1, p2) |
f7b61ad3c64a
revlog: change addrevision to return the new revision, not node
Joerg Sonnenberger <joerg@bec.de>
parents:
45788
diff
changeset
|
674 return self.node(rev) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
675 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
676 def addrevision( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
677 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
678 revisiondata, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
679 transaction, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
680 linkrev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
681 p1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
682 p2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
683 node=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
684 flags=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
685 cachedelta=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
686 ): |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
687 if flags: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
688 raise SQLiteStoreError(_(b'flags not supported on revisions')) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
689 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
690 validatehash = node is not None |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
691 node = node or storageutil.hashrevisionsha1(revisiondata, p1, p2) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
692 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
693 if validatehash: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
694 self._checkhash(revisiondata, node, p1, p2) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
695 |
46508
f7b61ad3c64a
revlog: change addrevision to return the new revision, not node
Joerg Sonnenberger <joerg@bec.de>
parents:
45788
diff
changeset
|
696 rev = self._nodetorev.get(node) |
f7b61ad3c64a
revlog: change addrevision to return the new revision, not node
Joerg Sonnenberger <joerg@bec.de>
parents:
45788
diff
changeset
|
697 if rev is not None: |
f7b61ad3c64a
revlog: change addrevision to return the new revision, not node
Joerg Sonnenberger <joerg@bec.de>
parents:
45788
diff
changeset
|
698 return rev |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
699 |
46508
f7b61ad3c64a
revlog: change addrevision to return the new revision, not node
Joerg Sonnenberger <joerg@bec.de>
parents:
45788
diff
changeset
|
700 rev = self._addrawrevision( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
701 node, revisiondata, transaction, linkrev, p1, p2 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
702 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
703 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
704 self._revisioncache[node] = revisiondata |
46508
f7b61ad3c64a
revlog: change addrevision to return the new revision, not node
Joerg Sonnenberger <joerg@bec.de>
parents:
45788
diff
changeset
|
705 return rev |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
706 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
707 def addgroup( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
708 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
709 deltas, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
710 linkmapper, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
711 transaction, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
712 addrevisioncb=None, |
45788
a5206e71c536
revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents:
45372
diff
changeset
|
713 duplicaterevisioncb=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
714 maybemissingparents=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
715 ): |
45788
a5206e71c536
revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents:
45372
diff
changeset
|
716 empty = True |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
717 |
46711
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46509
diff
changeset
|
718 for ( |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46509
diff
changeset
|
719 node, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46509
diff
changeset
|
720 p1, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46509
diff
changeset
|
721 p2, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46509
diff
changeset
|
722 linknode, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46509
diff
changeset
|
723 deltabase, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46509
diff
changeset
|
724 delta, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46509
diff
changeset
|
725 wireflags, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46509
diff
changeset
|
726 sidedata, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46509
diff
changeset
|
727 ) in deltas: |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
728 storeflags = 0 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
729 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
730 if wireflags & repository.REVISION_FLAG_CENSORED: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
731 storeflags |= FLAG_CENSORED |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
732 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
733 if wireflags & ~repository.REVISION_FLAG_CENSORED: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
734 raise SQLiteStoreError(b'unhandled revision flag') |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
735 |
40392
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
736 if maybemissingparents: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
737 if p1 != sha1nodeconstants.nullid and not self.hasnode(p1): |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
738 p1 = sha1nodeconstants.nullid |
40392
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
739 storeflags |= FLAG_MISSING_P1 |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
740 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
741 if p2 != sha1nodeconstants.nullid and not self.hasnode(p2): |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
742 p2 = sha1nodeconstants.nullid |
40392
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
743 storeflags |= FLAG_MISSING_P2 |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
744 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
745 baserev = self.rev(deltabase) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
746 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
747 # If base is censored, delta must be full replacement in a single |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
748 # patch operation. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
749 if baserev != nullrev and self.iscensored(baserev): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
750 hlen = struct.calcsize(b'>lll') |
42772
5c2e8a661418
rawdata: update callers in sqlitestore
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42760
diff
changeset
|
751 oldlen = len(self.rawdata(deltabase, _verifyhash=False)) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
752 newlen = len(delta) - hlen |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
753 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
754 if delta[:hlen] != mdiff.replacediffheader(oldlen, newlen): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
755 raise error.CensoredBaseError(self._path, deltabase) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
756 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
757 if not (storeflags & FLAG_CENSORED) and storageutil.deltaiscensored( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
758 delta, baserev, lambda x: len(self.rawdata(x)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
759 ): |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
760 storeflags |= FLAG_CENSORED |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
761 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
762 linkrev = linkmapper(linknode) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
763 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
764 if node in self._revisions: |
40392
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
765 # Possibly reset parents to make them proper. |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
766 entry = self._revisions[node] |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
767 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
768 if ( |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
769 entry.flags & FLAG_MISSING_P1 |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
770 and p1 != sha1nodeconstants.nullid |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
771 ): |
40392
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
772 entry.p1node = p1 |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
773 entry.p1rev = self._nodetorev[p1] |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
774 entry.flags &= ~FLAG_MISSING_P1 |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
775 |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
776 self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
777 'UPDATE fileindex SET p1rev=?, flags=? WHERE id=?', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
778 (self._nodetorev[p1], entry.flags, entry.rid), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
779 ) |
40392
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
780 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
781 if ( |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
782 entry.flags & FLAG_MISSING_P2 |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
783 and p2 != sha1nodeconstants.nullid |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
784 ): |
40392
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
785 entry.p2node = p2 |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
786 entry.p2rev = self._nodetorev[p2] |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
787 entry.flags &= ~FLAG_MISSING_P2 |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
788 |
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
789 self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
790 'UPDATE fileindex SET p2rev=?, flags=? WHERE id=?', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
791 (self._nodetorev[p1], entry.flags, entry.rid), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
792 ) |
40392
595641bd8404
sqlitestore: support for storing revisions without their parents
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40390
diff
changeset
|
793 |
45788
a5206e71c536
revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents:
45372
diff
changeset
|
794 if duplicaterevisioncb: |
46509
7a93b7b3dc2d
revlog: change addgroup callbacks to take revision numbers
Joerg Sonnenberger <joerg@bec.de>
parents:
46508
diff
changeset
|
795 duplicaterevisioncb(self, self.rev(node)) |
45788
a5206e71c536
revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents:
45372
diff
changeset
|
796 empty = False |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
797 continue |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
798 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
799 if deltabase == sha1nodeconstants.nullid: |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
800 text = mdiff.patch(b'', delta) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
801 storedelta = None |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
802 else: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
803 text = None |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
804 storedelta = (deltabase, delta) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
805 |
46509
7a93b7b3dc2d
revlog: change addgroup callbacks to take revision numbers
Joerg Sonnenberger <joerg@bec.de>
parents:
46508
diff
changeset
|
806 rev = self._addrawrevision( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
807 node, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
808 text, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
809 transaction, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
810 linkrev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
811 p1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
812 p2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
813 storedelta=storedelta, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
814 flags=storeflags, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
815 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
816 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
817 if addrevisioncb: |
46509
7a93b7b3dc2d
revlog: change addgroup callbacks to take revision numbers
Joerg Sonnenberger <joerg@bec.de>
parents:
46508
diff
changeset
|
818 addrevisioncb(self, rev) |
45788
a5206e71c536
revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents:
45372
diff
changeset
|
819 empty = False |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
820 |
45788
a5206e71c536
revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents:
45372
diff
changeset
|
821 return not empty |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
822 |
51267
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50794
diff
changeset
|
823 def censorrevision(self, tr, censor_nodes, tombstone=b''): |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50794
diff
changeset
|
824 for node in censor_nodes: |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50794
diff
changeset
|
825 self._censor_one_revision(tr, node, tombstone=tombstone) |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50794
diff
changeset
|
826 |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50794
diff
changeset
|
827 def _censor_one_revision(self, tr, censornode, tombstone): |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
828 tombstone = storageutil.packmeta({b'censored': tombstone}, b'') |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
829 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
830 # This restriction is cargo culted from revlogs and makes no sense for |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
831 # SQLite, since columns can be resized at will. |
42772
5c2e8a661418
rawdata: update callers in sqlitestore
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42760
diff
changeset
|
832 if len(tombstone) > len(self.rawdata(censornode)): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
833 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
834 _(b'censor tombstone must be no longer than censored data') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
835 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
836 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
837 # We need to replace the censored revision's data with the tombstone. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
838 # But replacing that data will have implications for delta chains that |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
839 # reference it. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
840 # |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
841 # While "better," more complex strategies are possible, we do something |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
842 # simple: we find delta chain children of the censored revision and we |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
843 # replace those incremental deltas with fulltexts of their corresponding |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
844 # revision. Then we delete the now-unreferenced delta and original |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
845 # revision and insert a replacement. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
846 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
847 # Find the delta to be censored. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
848 censoreddeltaid = self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
849 'SELECT deltaid FROM fileindex WHERE id=?', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
850 (self._revisions[censornode].rid,), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
851 ).fetchone()[0] |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
852 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
853 # Find all its delta chain children. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
854 # TODO once we support storing deltas for !files, we'll need to look |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
855 # for those delta chains too. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
856 rows = list( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
857 self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
858 'SELECT id, pathid, node FROM fileindex ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
859 'WHERE deltabaseid=? OR deltaid=?', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
860 (censoreddeltaid, censoreddeltaid), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
861 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
862 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
863 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
864 for row in rows: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
865 rid, pathid, node = row |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
866 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
867 fulltext = resolvedeltachain( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
868 self._db, pathid, node, {}, {-1: None}, zstddctx=self._dctx |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
869 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
870 |
44062
2d49482d0dd4
hgext: replace references to hashlib.sha1 with hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43507
diff
changeset
|
871 deltahash = hashutil.sha1(fulltext).digest() |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
872 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
873 if self._compengine == b'zstd': |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
874 deltablob = self._cctx.compress(fulltext) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
875 compression = COMPRESSION_ZSTD |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
876 elif self._compengine == b'zlib': |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
877 deltablob = zlib.compress(fulltext) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
878 compression = COMPRESSION_ZLIB |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
879 elif self._compengine == b'none': |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
880 deltablob = fulltext |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
881 compression = COMPRESSION_NONE |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
882 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
883 raise error.ProgrammingError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
884 b'unhandled compression engine: %s' % self._compengine |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
885 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
886 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
887 if len(deltablob) >= len(fulltext): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
888 deltablob = fulltext |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
889 compression = COMPRESSION_NONE |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
890 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
891 deltaid = insertdelta(self._db, compression, deltahash, deltablob) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
892 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
893 self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
894 'UPDATE fileindex SET deltaid=?, deltabaseid=NULL ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
895 'WHERE id=?', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
896 (deltaid, rid), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
897 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
898 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
899 # Now create the tombstone delta and replace the delta on the censored |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
900 # node. |
44062
2d49482d0dd4
hgext: replace references to hashlib.sha1 with hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43507
diff
changeset
|
901 deltahash = hashutil.sha1(tombstone).digest() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
902 tombstonedeltaid = insertdelta( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
903 self._db, COMPRESSION_NONE, deltahash, tombstone |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
904 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
905 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
906 flags = self._revisions[censornode].flags |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
907 flags |= FLAG_CENSORED |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
908 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
909 self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
910 'UPDATE fileindex SET flags=?, deltaid=?, deltabaseid=NULL ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
911 'WHERE pathid=? AND node=?', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
912 (flags, tombstonedeltaid, self._pathid, censornode), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
913 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
914 |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
915 self._db.execute('DELETE FROM delta WHERE id=?', (censoreddeltaid,)) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
916 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
917 self._refreshindex() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
918 self._revisioncache.clear() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
919 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
920 def getstrippoint(self, minlink): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
921 return storageutil.resolvestripinfo( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
922 minlink, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
923 len(self) - 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
924 [self.rev(n) for n in self.heads()], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
925 self.linkrev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
926 self.parentrevs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
927 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
928 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
929 def strip(self, minlink, transaction): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
930 if not len(self): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
931 return |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
932 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
933 rev, _ignored = self.getstrippoint(minlink) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
934 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
935 if rev == len(self): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
936 return |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
937 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
938 for rev in self.revs(rev): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
939 self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
940 'DELETE FROM fileindex WHERE pathid=? AND node=?', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
941 (self._pathid, self.node(rev)), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
942 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
943 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
944 # TODO how should we garbage collect data in delta table? |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
945 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
946 self._refreshindex() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
947 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
948 # End of ifilemutation interface. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
949 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
950 # Start of ifilestorage interface. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
951 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
952 def files(self): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
953 return [] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
954 |
46712
e8c11a2c96c0
delta: add sidedata field to revision delta
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46711
diff
changeset
|
955 def sidedata(self, nodeorrev, _df=None): |
e8c11a2c96c0
delta: add sidedata field to revision delta
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46711
diff
changeset
|
956 # Not supported for now |
e8c11a2c96c0
delta: add sidedata field to revision delta
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46711
diff
changeset
|
957 return {} |
e8c11a2c96c0
delta: add sidedata field to revision delta
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46711
diff
changeset
|
958 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
959 def storageinfo( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
960 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
961 exclusivefiles=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
962 sharedfiles=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
963 revisionscount=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
964 trackedsize=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
965 storedsize=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
966 ): |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
967 d = {} |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
968 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
969 if exclusivefiles: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
970 d[b'exclusivefiles'] = [] |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
971 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
972 if sharedfiles: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
973 # TODO list sqlite file(s) here. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
974 d[b'sharedfiles'] = [] |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
975 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
976 if revisionscount: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
977 d[b'revisionscount'] = len(self) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
978 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
979 if trackedsize: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
980 d[b'trackedsize'] = sum( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
981 len(self.revision(node)) for node in self._nodetorev |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
982 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
983 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
984 if storedsize: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
985 # TODO implement this? |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
986 d[b'storedsize'] = None |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
987 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
988 return d |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
989 |
52487
3daaa5195a30
typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents:
52470
diff
changeset
|
990 def verifyintegrity(self, state) -> Iterable[repository.iverifyproblem]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
991 state[b'skipread'] = set() |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
992 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
993 for rev in self: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
994 node = self.node(rev) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
995 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
996 try: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
997 self.revision(node) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
998 except Exception as e: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
999 yield sqliteproblem( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1000 error=_(b'unpacking %s: %s') % (short(node), e), node=node |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1001 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1002 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1003 state[b'skipread'].add(node) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1004 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1005 # End of ifilestorage interface. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1006 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1007 def _checkhash(self, fulltext, node, p1=None, p2=None): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1008 if p1 is None and p2 is None: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1009 p1, p2 = self.parents(node) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1010 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1011 if node == storageutil.hashrevisionsha1(fulltext, p1, p2): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1012 return |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1013 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1014 try: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1015 del self._revisioncache[node] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1016 except KeyError: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1017 pass |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1018 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1019 if storageutil.iscensoredtext(fulltext): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1020 raise error.CensoredNodeError(self._path, node, fulltext) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1021 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1022 raise SQLiteStoreError(_(b'integrity check failed on %s') % self._path) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1023 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1024 def _addrawrevision( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1025 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1026 node, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1027 revisiondata, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1028 transaction, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1029 linkrev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1030 p1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1031 p2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1032 storedelta=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1033 flags=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1034 ): |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1035 if self._pathid is None: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1036 res = self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1037 'INSERT INTO filepath (path) VALUES (?)', (self._path,) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1038 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1039 self._pathid = res.lastrowid |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1040 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1041 # For simplicity, always store a delta against p1. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1042 # TODO we need a lot more logic here to make behavior reasonable. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1043 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1044 if storedelta: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1045 deltabase, delta = storedelta |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1046 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1047 if isinstance(deltabase, int): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1048 deltabase = self.node(deltabase) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1049 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1050 else: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1051 assert revisiondata is not None |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1052 deltabase = p1 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1053 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
1054 if deltabase == sha1nodeconstants.nullid: |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1055 delta = revisiondata |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1056 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1057 delta = mdiff.textdiff( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1058 self.revision(self.rev(deltabase)), revisiondata |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1059 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1060 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1061 # File index stores a pointer to its delta and the parent delta. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1062 # The parent delta is stored via a pointer to the fileindex PK. |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
1063 if deltabase == sha1nodeconstants.nullid: |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1064 baseid = None |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1065 else: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1066 baseid = self._revisions[deltabase].rid |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1067 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1068 # Deltas are stored with a hash of their content. This allows |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1069 # us to de-duplicate. The table is configured to ignore conflicts |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1070 # and it is faster to just insert and silently noop than to look |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1071 # first. |
44062
2d49482d0dd4
hgext: replace references to hashlib.sha1 with hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43507
diff
changeset
|
1072 deltahash = hashutil.sha1(delta).digest() |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1073 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1074 if self._compengine == b'zstd': |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1075 deltablob = self._cctx.compress(delta) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1076 compression = COMPRESSION_ZSTD |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1077 elif self._compengine == b'zlib': |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1078 deltablob = zlib.compress(delta) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1079 compression = COMPRESSION_ZLIB |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1080 elif self._compengine == b'none': |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1081 deltablob = delta |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1082 compression = COMPRESSION_NONE |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1083 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1084 raise error.ProgrammingError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1085 b'unhandled compression engine: %s' % self._compengine |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1086 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1087 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1088 # Don't store compressed data if it isn't practical. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1089 if len(deltablob) >= len(delta): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1090 deltablob = delta |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1091 compression = COMPRESSION_NONE |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1092 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1093 deltaid = insertdelta(self._db, compression, deltahash, deltablob) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1094 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1095 rev = len(self) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1096 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
1097 if p1 == sha1nodeconstants.nullid: |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1098 p1rev = nullrev |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1099 else: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1100 p1rev = self._nodetorev[p1] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1101 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46780
diff
changeset
|
1102 if p2 == sha1nodeconstants.nullid: |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1103 p2rev = nullrev |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1104 else: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1105 p2rev = self._nodetorev[p2] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1106 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1107 rid = self._db.execute( |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1108 'INSERT INTO fileindex (' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1109 ' pathid, revnum, node, p1rev, p2rev, linkrev, flags, ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1110 ' deltaid, deltabaseid) ' |
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1111 ' VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1112 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1113 self._pathid, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1114 rev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1115 node, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1116 p1rev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1117 p2rev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1118 linkrev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1119 flags, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1120 deltaid, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1121 baseid, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1122 ), |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1123 ).lastrowid |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1124 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1125 entry = revisionentry( |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1126 rid=rid, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1127 rev=rev, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1128 node=node, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1129 p1rev=p1rev, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1130 p2rev=p2rev, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1131 p1node=p1, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1132 p2node=p2, |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1133 linkrev=linkrev, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1134 flags=flags, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1135 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1136 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1137 self._nodetorev[node] = rev |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1138 self._revtonode[rev] = node |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1139 self._revisions[node] = entry |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1140 |
46508
f7b61ad3c64a
revlog: change addrevision to return the new revision, not node
Joerg Sonnenberger <joerg@bec.de>
parents:
45788
diff
changeset
|
1141 return rev |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1142 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1143 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1144 class sqliterepository(localrepo.localrepository): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1145 def cancopy(self): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1146 return False |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1147 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1148 def transaction(self, *args, **kwargs): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1149 current = self.currenttransaction() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1150 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1151 tr = super(sqliterepository, self).transaction(*args, **kwargs) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1152 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1153 if current: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1154 return tr |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1155 |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1156 self._dbconn.execute('BEGIN TRANSACTION') |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1157 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1158 def committransaction(_): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1159 self._dbconn.commit() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1160 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1161 tr.addfinalize(b'sqlitestore', committransaction) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1162 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1163 return tr |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1164 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1165 @property |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1166 def _dbconn(self): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1167 # SQLite connections can only be used on the thread that created |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1168 # them. In most cases, this "just works." However, hgweb uses |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1169 # multiple threads. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1170 tid = threading.current_thread().ident |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1171 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1172 if self._db: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1173 if self._db[0] == tid: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1174 return self._db[1] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1175 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1176 db = makedb(self.svfs.join(b'db.sqlite')) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1177 self._db = (tid, db) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1178 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1179 return db |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1180 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1181 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1182 def makedb(path): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1183 """Construct a database handle for a database at path.""" |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1184 |
40410
3b782669561d
py3: make sure we pass sysstr in sqlite3.connect()
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40392
diff
changeset
|
1185 db = sqlite3.connect(encoding.strfromlocal(path)) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1186 db.text_factory = bytes |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1187 |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1188 res = db.execute('PRAGMA user_version').fetchone()[0] |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1189 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1190 # New database. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1191 if res == 0: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1192 for statement in CREATE_SCHEMA: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1193 db.execute(statement) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1194 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1195 db.commit() |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1196 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1197 elif res == CURRENT_SCHEMA_VERSION: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1198 pass |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1199 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1200 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1201 raise error.Abort(_(b'sqlite database has unrecognized version')) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1202 |
43507
adde839cc54f
sqlitestore: remove superfluous r-prefixes on strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1203 db.execute('PRAGMA journal_mode=WAL') |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1204 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1205 return db |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1206 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1207 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1208 def featuresetup(ui, supported): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1209 supported.add(REQUIREMENT) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1210 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1211 if zstd: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1212 supported.add(REQUIREMENT_ZSTD) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1213 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1214 supported.add(REQUIREMENT_ZLIB) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1215 supported.add(REQUIREMENT_NONE) |
40390
7e3b6c4f01a2
localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40389
diff
changeset
|
1216 supported.add(REQUIREMENT_SHALLOW_FILES) |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44062
diff
changeset
|
1217 supported.add(requirements.NARROW_REQUIREMENT) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1218 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1219 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1220 def newreporequirements(orig, ui, createopts): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1221 if createopts[b'backend'] != b'sqlite': |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1222 return orig(ui, createopts) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1223 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1224 # This restriction can be lifted once we have more confidence. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1225 if b'sharedrepo' in createopts: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1226 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
1227 _(b'shared repositories not supported with SQLite store') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1228 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1229 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1230 # This filtering is out of an abundance of caution: we want to ensure |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1231 # we honor creation options and we do that by annotating exactly the |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1232 # creation options we recognize. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1233 known = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1234 b'narrowfiles', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1235 b'backend', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1236 b'shallowfilestore', |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1237 } |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1238 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1239 unsupported = set(createopts) - known |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1240 if unsupported: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1241 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
1242 _(b'SQLite store does not support repo creation option: %s') |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1243 % b', '.join(sorted(unsupported)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1244 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1245 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1246 # Since we're a hybrid store that still relies on revlogs, we fall back |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1247 # to using the revlogv1 backend's storage requirements then adding our |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1248 # own requirement. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1249 createopts[b'backend'] = b'revlogv1' |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1250 requirements = orig(ui, createopts) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1251 requirements.add(REQUIREMENT) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1252 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1253 compression = ui.config(b'storage', b'sqlite.compression') |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1254 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1255 if compression == b'zstd' and not zstd: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1256 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1257 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1258 b'storage.sqlite.compression set to "zstd" but ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1259 b'zstandard compression not available to this ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1260 b'Mercurial install' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1261 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1262 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1263 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1264 if compression == b'zstd': |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1265 requirements.add(REQUIREMENT_ZSTD) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1266 elif compression == b'zlib': |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1267 requirements.add(REQUIREMENT_ZLIB) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1268 elif compression == b'none': |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1269 requirements.add(REQUIREMENT_NONE) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1270 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1271 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1272 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1273 b'unknown compression engine defined in ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1274 b'storage.sqlite.compression: %s' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1275 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1276 % compression |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1277 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1278 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1279 if createopts.get(b'shallowfilestore'): |
40390
7e3b6c4f01a2
localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40389
diff
changeset
|
1280 requirements.add(REQUIREMENT_SHALLOW_FILES) |
7e3b6c4f01a2
localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40389
diff
changeset
|
1281 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1282 return requirements |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1283 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1284 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1285 @interfaceutil.implementer(repository.ilocalrepositoryfilestorage) |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
1286 class sqlitefilestorage: |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1287 """Repository file storage backed by SQLite.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1288 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1289 def file(self, path): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1290 if path[0] == b'/': |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1291 path = path[1:] |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1292 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1293 if REQUIREMENT_ZSTD in self.requirements: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1294 compression = b'zstd' |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1295 elif REQUIREMENT_ZLIB in self.requirements: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1296 compression = b'zlib' |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1297 elif REQUIREMENT_NONE in self.requirements: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1298 compression = b'none' |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1299 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1300 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1301 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1302 b'unable to determine what compression engine ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1303 b'to use for SQLite storage' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1304 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1305 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1306 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1307 return sqlitefilestore(self._dbconn, path, compression) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1308 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1309 |
40390
7e3b6c4f01a2
localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40389
diff
changeset
|
1310 def makefilestorage(orig, requirements, features, **kwargs): |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1311 """Produce a type conforming to ``ilocalrepositoryfilestorage``.""" |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1312 if REQUIREMENT in requirements: |
40390
7e3b6c4f01a2
localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40389
diff
changeset
|
1313 if REQUIREMENT_SHALLOW_FILES in requirements: |
7e3b6c4f01a2
localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40389
diff
changeset
|
1314 features.add(repository.REPO_FEATURE_SHALLOW_FILE_STORAGE) |
7e3b6c4f01a2
localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40389
diff
changeset
|
1315 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1316 return sqlitefilestorage |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1317 else: |
40390
7e3b6c4f01a2
localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40389
diff
changeset
|
1318 return orig(requirements=requirements, features=features, **kwargs) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1319 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1320 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1321 def makemain(orig, ui, requirements, **kwargs): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1322 if REQUIREMENT in requirements: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1323 if REQUIREMENT_ZSTD in requirements and not zstd: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1324 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1325 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1326 b'repository uses zstandard compression, which ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1327 b'is not available to this Mercurial install' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1328 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1329 ) |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1330 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1331 return sqliterepository |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1332 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1333 return orig(requirements=requirements, **kwargs) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1334 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1335 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1336 def verifierinit(orig, self, *args, **kwargs): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1337 orig(self, *args, **kwargs) |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1338 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1339 # We don't care that files in the store don't align with what is |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1340 # advertised. So suppress these warnings. |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1341 self.warnorphanstorefiles = False |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1342 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1343 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1344 def extsetup(ui): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1345 localrepo.featuresetupfuncs.add(featuresetup) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1346 extensions.wrapfunction( |
50794
4c6151b69085
wrapfunction: use sysstr instead of bytes as argument in "sqlitestore"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50790
diff
changeset
|
1347 localrepo, 'newreporequirements', newreporequirements |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1348 ) |
50790
1fbae268ecae
wrapfunction: use sysstr instead of bytes as argument in "sqlitestore"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49849
diff
changeset
|
1349 extensions.wrapfunction(localrepo, 'makefilestorage', makefilestorage) |
1fbae268ecae
wrapfunction: use sysstr instead of bytes as argument in "sqlitestore"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49849
diff
changeset
|
1350 extensions.wrapfunction(localrepo, 'makemain', makemain) |
1fbae268ecae
wrapfunction: use sysstr instead of bytes as argument in "sqlitestore"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49849
diff
changeset
|
1351 extensions.wrapfunction(verify.verifier, '__init__', verifierinit) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1352 |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1353 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1354 def reposetup(ui, repo): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1355 if isinstance(repo, sqliterepository): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1356 repo._db = None |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1357 |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1358 # TODO check for bundlerepository? |