annotate mercurial/interfaces/repository.py @ 52914:3e8a3db5f5e8

typing: introduce a few basic alias for common types These types are passed everywhere. We introduce basic alias to Any, to make it simpler to start annotating code prior to introducing proper protocol for them.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 07 Feb 2025 23:00:31 +0100
parents 4fa0d89d1bdb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
1 # repository.py - Interfaces and base classes for repositories and peers.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
2 #
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
3 # Copyright 2017 Gregory Szorc <gregory.szorc@gmail.com>
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
4 #
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
5 # This software may be used and distributed according to the terms of the
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
6 # GNU General Public License version 2 or any later version.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
7
51901
f4733654f144 typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents: 51837
diff changeset
8 from __future__ import annotations
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
9
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
10 import abc
52492
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
11 import typing
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
12
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
13 from typing import (
52492
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
14 Any,
52514
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
15 Callable,
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
16 Collection,
52516
3daaa5195a30 typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52515
diff changeset
17 Iterable,
3daaa5195a30 typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52515
diff changeset
18 Iterator,
52514
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
19 Mapping,
52909
4fa0d89d1bdb typing: use the IPath interface instead of external import
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52906
diff changeset
20 Optional,
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
21 Protocol,
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
22 Set,
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
23 )
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
24
42823
268662aac075 interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 42795
diff changeset
25 from ..i18n import _
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
26 from .. import error
33823
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
27
52492
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
28 if typing.TYPE_CHECKING:
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
29 from typing import (
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
30 ByteString, # TODO: change to Buffer for 3.14
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
31 )
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
32
52914
3e8a3db5f5e8 typing: introduce a few basic alias for common types
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52909
diff changeset
33 from ._basetypes import (
3e8a3db5f5e8 typing: introduce a few basic alias for common types
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52909
diff changeset
34 UiT as Ui,
3e8a3db5f5e8 typing: introduce a few basic alias for common types
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52909
diff changeset
35 VfsT as Vfs,
3e8a3db5f5e8 typing: introduce a few basic alias for common types
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52909
diff changeset
36 )
3e8a3db5f5e8 typing: introduce a few basic alias for common types
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52909
diff changeset
37
52755
5c48fd4c0e68 typing: introduce a `types` module and a MatcherT alias
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52739
diff changeset
38 from . import (
5c48fd4c0e68 typing: introduce a `types` module and a MatcherT alias
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52739
diff changeset
39 dirstate as intdirstate,
5c48fd4c0e68 typing: introduce a `types` module and a MatcherT alias
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52739
diff changeset
40 matcher,
52905
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52755
diff changeset
41 misc,
52755
5c48fd4c0e68 typing: introduce a `types` module and a MatcherT alias
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52739
diff changeset
42 )
52514
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
43
52507
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
44 # TODO: make a protocol class for this
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
45 NodeConstants = Any
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
46
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
47
39855
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
48 # Local repository feature string.
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
49
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
50 # Revlogs are being used for file storage.
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
51 REPO_FEATURE_REVLOG_FILE_STORAGE = b'revlogfilestorage'
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
52 # The storage part of the repository is shared from an external source.
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
53 REPO_FEATURE_SHARED_STORAGE = b'sharedstore'
39856
1f7b3b980af8 lfs: add repository feature denoting the use of LFS
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39855
diff changeset
54 # LFS supported for backing file storage.
1f7b3b980af8 lfs: add repository feature denoting the use of LFS
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39855
diff changeset
55 REPO_FEATURE_LFS = b'lfs'
40028
83146d176c03 localrepo: add repository feature when repo can be stream cloned
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40022
diff changeset
56 # Repository supports being stream cloned.
83146d176c03 localrepo: add repository feature when repo can be stream cloned
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40022
diff changeset
57 REPO_FEATURE_STREAM_CLONE = b'streamclone'
47237
19d4802cb304 sidedata: add a 'side-data' repository feature and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47160
diff changeset
58 # Repository supports (at least) some sidedata to be stored
19d4802cb304 sidedata: add a 'side-data' repository feature and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47160
diff changeset
59 REPO_FEATURE_SIDE_DATA = b'side-data'
40390
7e3b6c4f01a2 localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
60 # Files storage may lack data for all ancestors.
7e3b6c4f01a2 localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40389
diff changeset
61 REPO_FEATURE_SHALLOW_FILE_STORAGE = b'shallowfilestorage'
39855
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
62
40048
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
63 REVISION_FLAG_CENSORED = 1 << 15
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
64 REVISION_FLAG_ELLIPSIS = 1 << 14
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
65 REVISION_FLAG_EXTSTORED = 1 << 13
47094
119790e1c67c cg4: introduce protocol flag to signify the presence of sidedata
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46793
diff changeset
66 REVISION_FLAG_HASCOPIESINFO = 1 << 12
40048
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
67
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
68 REVISION_FLAGS_KNOWN = (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
69 REVISION_FLAG_CENSORED
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
70 | REVISION_FLAG_ELLIPSIS
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
71 | REVISION_FLAG_EXTSTORED
45671
2d6aea053153 copies: add a HASCOPIESINFO flag to highlight rev with useful data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45392
diff changeset
72 | REVISION_FLAG_HASCOPIESINFO
43032
a12a9af7536c sidedata: add a new revision flag constant for side data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42824
diff changeset
73 )
40048
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
74
40495
59a870a4ad6e changegroup: refactor emitrevision to use a `deltamode` argument
Boris Feld <boris.feld@octobus.net>
parents: 40390
diff changeset
75 CG_DELTAMODE_STD = b'default'
59a870a4ad6e changegroup: refactor emitrevision to use a `deltamode` argument
Boris Feld <boris.feld@octobus.net>
parents: 40390
diff changeset
76 CG_DELTAMODE_PREV = b'previous'
59a870a4ad6e changegroup: refactor emitrevision to use a `deltamode` argument
Boris Feld <boris.feld@octobus.net>
parents: 40390
diff changeset
77 CG_DELTAMODE_FULL = b'fulltext'
40497
968dd7e02ac5 changegroup: allow to force delta to be against p1
Boris Feld <boris.feld@octobus.net>
parents: 40496
diff changeset
78 CG_DELTAMODE_P1 = b'p1'
40495
59a870a4ad6e changegroup: refactor emitrevision to use a `deltamode` argument
Boris Feld <boris.feld@octobus.net>
parents: 40390
diff changeset
79
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
80
47307
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
81 ## Cache related constants:
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
82 #
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
83 # Used to control which cache should be warmed in a repo.updatecaches(…) call.
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
84
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
85 # Warm branchmaps of all known repoview's filter-level
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
86 CACHE_BRANCHMAP_ALL = b"branchmap-all"
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
87 # Warm branchmaps of repoview's filter-level used by server
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
88 CACHE_BRANCHMAP_SERVED = b"branchmap-served"
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
89 # Warm internal changelog cache (eg: persistent nodemap)
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
90 CACHE_CHANGELOG_CACHE = b"changelog-cache"
51579
4a8bb136ee77 branchcache: allow to detect "pure topological case" for branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51052
diff changeset
91 # check of a branchmap can use the "pure topo" mode
4a8bb136ee77 branchcache: allow to detect "pure topological case" for branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51052
diff changeset
92 CACHE_BRANCHMAP_DETECT_PURE_TOPO = b"branchmap-detect-pure-topo"
47307
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
93 # Warm full manifest cache
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
94 CACHE_FULL_MANIFEST = b"full-manifest"
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
95 # Warm file-node-tags cache
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
96 CACHE_FILE_NODE_TAGS = b"file-node-tags"
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
97 # Warm internal manifestlog cache (eg: persistent nodemap)
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
98 CACHE_MANIFESTLOG_CACHE = b"manifestlog-cache"
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
99 # Warn rev branch cache
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
100 CACHE_REV_BRANCH = b"rev-branch-cache"
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
101 # Warm tags' cache for default repoview'
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
102 CACHE_TAGS_DEFAULT = b"tags-default"
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
103 # Warm tags' cache for repoview's filter-level used by server
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
104 CACHE_TAGS_SERVED = b"tags-served"
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
105
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
106 # the cache to warm by default after a simple transaction
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
107 # (this is a mutable set to let extension update it)
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
108 CACHES_DEFAULT = {
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
109 CACHE_BRANCHMAP_SERVED,
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
110 }
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
111
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
112 # the caches to warm when warming all of them
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
113 # (this is a mutable set to let extension update it)
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
114 CACHES_ALL = {
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
115 CACHE_BRANCHMAP_SERVED,
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
116 CACHE_BRANCHMAP_ALL,
51579
4a8bb136ee77 branchcache: allow to detect "pure topological case" for branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51052
diff changeset
117 CACHE_BRANCHMAP_DETECT_PURE_TOPO,
51946
e51161b12c7e rev-branch-cache: have debugupdatecache warm rbc too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51909
diff changeset
118 CACHE_REV_BRANCH,
47307
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
119 CACHE_CHANGELOG_CACHE,
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
120 CACHE_FILE_NODE_TAGS,
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
121 CACHE_FULL_MANIFEST,
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
122 CACHE_MANIFESTLOG_CACHE,
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
123 CACHE_TAGS_DEFAULT,
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
124 CACHE_TAGS_SERVED,
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
125 }
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
126
47310
7edaf91c7886 updatecaches: use the `caches` argument instead of a special `full` value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47307
diff changeset
127 # the cache to warm by default on simple call
7edaf91c7886 updatecaches: use the `caches` argument instead of a special `full` value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47307
diff changeset
128 # (this is a mutable set to let extension update it)
7edaf91c7886 updatecaches: use the `caches` argument instead of a special `full` value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47307
diff changeset
129 CACHES_POST_CLONE = CACHES_ALL.copy()
7edaf91c7886 updatecaches: use the `caches` argument instead of a special `full` value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47307
diff changeset
130 CACHES_POST_CLONE.discard(CACHE_FILE_NODE_TAGS)
52211
d57d1606049c clone: properly exclude rev-branch-cache from post clone cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51946
diff changeset
131 CACHES_POST_CLONE.discard(CACHE_REV_BRANCH)
47310
7edaf91c7886 updatecaches: use the `caches` argument instead of a special `full` value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47307
diff changeset
132
47307
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
133
52493
73a46cef57c9 interfaces: rename `repository.ipeerconnection` to reflect it being private
Matt Harbison <matt_harbison@yahoo.com>
parents: 52492
diff changeset
134 class _ipeerconnection(Protocol):
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
135 """Represents a "connection" to a repository.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
136
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
137 This is the base interface for representing a connection to a repository.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
138 It holds basic properties and methods applicable to all peer types.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
139
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
140 This is not a complete interface definition and should not be used
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
141 outside of this module.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
142 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
143
52492
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
144 ui: Ui
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
145 """ui.ui instance"""
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
146
52909
4fa0d89d1bdb typing: use the IPath interface instead of external import
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52906
diff changeset
147 path: Optional[misc.IPath]
52492
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
148 """a urlutil.path instance or None"""
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
149
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
150 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
151 def url(self):
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
152 """Returns a URL string representing this peer.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
153
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
154 Currently, implementations expose the raw URL used to construct the
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
155 instance. It may contain credentials as part of the URL. The
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
156 expectations of the value aren't well-defined and this could lead to
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
157 data leakage.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
158
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
159 TODO audit/clean consumers and more clearly define the contents of this
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
160 value.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
161 """
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
162
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
163 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
164 def local(self):
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
165 """Returns a local repository instance.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
166
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
167 If the peer represents a local repository, returns an object that
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
168 can be used to interface with it. Otherwise returns ``None``.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
169 """
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
170
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
171 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
172 def canpush(self):
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
173 """Returns a boolean indicating if this peer can be pushed to."""
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
174
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
175 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
176 def close(self):
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
177 """Close the connection to this peer.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
178
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
179 This is called when the peer will no longer be used. Resources
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
180 associated with the peer should be cleaned up.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
181 """
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
182
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
183
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
184 class ipeercapabilities(Protocol):
37610
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
185 """Peer sub-interface related to capabilities."""
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
186
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
187 @abc.abstractmethod
52545
5a924cb07768 typing: add annotations to the `repository.peer` mixin class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52533
diff changeset
188 def capable(self, name: bytes) -> bool | bytes:
37610
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
189 """Determine support for a named capability.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
190
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
191 Returns ``False`` if capability not supported.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
192
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
193 Returns ``True`` if boolean capability is supported. Returns a string
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
194 if capability support is non-boolean.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
195
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
196 Capability strings may or may not map to wire protocol capabilities.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
197 """
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
198
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
199 @abc.abstractmethod
52548
b52f2b365eff typing: add type hints to `ipeercapabilities.capabilities()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 52547
diff changeset
200 def capabilities(self) -> Set[bytes]:
52547
1554bd50a1af interfaces: move peer `capabilities()` to the `ipeercapabilities` interface
Matt Harbison <matt_harbison@yahoo.com>
parents: 52545
diff changeset
201 """Obtain capabilities of the peer.
1554bd50a1af interfaces: move peer `capabilities()` to the `ipeercapabilities` interface
Matt Harbison <matt_harbison@yahoo.com>
parents: 52545
diff changeset
202
1554bd50a1af interfaces: move peer `capabilities()` to the `ipeercapabilities` interface
Matt Harbison <matt_harbison@yahoo.com>
parents: 52545
diff changeset
203 Returns a set of string capabilities.
1554bd50a1af interfaces: move peer `capabilities()` to the `ipeercapabilities` interface
Matt Harbison <matt_harbison@yahoo.com>
parents: 52545
diff changeset
204 """
1554bd50a1af interfaces: move peer `capabilities()` to the `ipeercapabilities` interface
Matt Harbison <matt_harbison@yahoo.com>
parents: 52545
diff changeset
205
1554bd50a1af interfaces: move peer `capabilities()` to the `ipeercapabilities` interface
Matt Harbison <matt_harbison@yahoo.com>
parents: 52545
diff changeset
206 @abc.abstractmethod
52545
5a924cb07768 typing: add annotations to the `repository.peer` mixin class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52533
diff changeset
207 def requirecap(self, name: bytes, purpose: bytes) -> None:
37610
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
208 """Require a capability to be present.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
209
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
210 Raises a ``CapabilityError`` if the capability isn't present.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
211 """
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
212
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
213
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
214 class ipeercommands(Protocol):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
215 """Client-side interface for communicating over the wire protocol.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
216
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
217 This interface is used as a gateway to the Mercurial wire protocol.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
218 methods commonly call wire protocol commands of the same name.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
219 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
220
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
221 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
222 def branchmap(self):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
223 """Obtain heads in named branches.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
224
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
225 Returns a dict mapping branch name to an iterable of nodes that are
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
226 heads on that branch.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
227 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
228
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
229 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
230 def get_cached_bundle_inline(self, path):
50699
2aaabd8f4471 clone-bundle: rename the methods and wireprotole command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50675
diff changeset
231 """Retrieve a clonebundle across the wire.
50675
60f9602b413e clonebundles: add support for inline (streaming) clonebundles
Mathias De Mare <mathias.de_mare@nokia.com>
parents: 50667
diff changeset
232
60f9602b413e clonebundles: add support for inline (streaming) clonebundles
Mathias De Mare <mathias.de_mare@nokia.com>
parents: 50667
diff changeset
233 Returns a chunkbuffer
60f9602b413e clonebundles: add support for inline (streaming) clonebundles
Mathias De Mare <mathias.de_mare@nokia.com>
parents: 50667
diff changeset
234 """
60f9602b413e clonebundles: add support for inline (streaming) clonebundles
Mathias De Mare <mathias.de_mare@nokia.com>
parents: 50667
diff changeset
235
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
236 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
237 def clonebundles(self):
37649
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
238 """Obtains the clone bundles manifest for the repo.
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
239
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
240 Returns the manifest as unparsed bytes.
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
241 """
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
242
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
243 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
244 def debugwireargs(self, one, two, three=None, four=None, five=None):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
245 """Used to facilitate debugging of arguments passed over the wire."""
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
246
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
247 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
248 def getbundle(self, source, **kwargs):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
249 """Obtain remote repository data as a bundle.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
250
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
251 This command is how the bulk of repository data is transferred from
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
252 the peer to the local repository
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
253
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
254 Returns a generator of bundle data.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
255 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
256
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
257 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
258 def heads(self):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
259 """Determine all known head revisions in the peer.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
260
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
261 Returns an iterable of binary nodes.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
262 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
263
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
264 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
265 def known(self, nodes):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
266 """Determine whether multiple nodes are known.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
267
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
268 Accepts an iterable of nodes whose presence to check for.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
269
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
270 Returns an iterable of booleans indicating of the corresponding node
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
271 at that index is known to the peer.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
272 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
273
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
274 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
275 def listkeys(self, namespace):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
276 """Obtain all keys in a pushkey namespace.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
277
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
278 Returns an iterable of key names.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
279 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
280
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
281 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
282 def lookup(self, key):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
283 """Resolve a value to a known revision.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
284
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
285 Returns a binary node of the resolved revision on success.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
286 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
287
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
288 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
289 def pushkey(self, namespace, key, old, new):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
290 """Set a value using the ``pushkey`` protocol.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
291
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
292 Arguments correspond to the pushkey namespace and key to operate on and
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
293 the old and new values for that key.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
294
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
295 Returns a string with the peer result. The value inside varies by the
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
296 namespace.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
297 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
298
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
299 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
300 def stream_out(self):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
301 """Obtain streaming clone data.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
302
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
303 Successful result should be a generator of data chunks.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
304 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
305
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
306 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
307 def unbundle(self, bundle, heads, url):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
308 """Transfer repository data to the peer.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
309
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
310 This is how the bulk of data during a push is transferred.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
311
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
312 Returns the integer number of heads added to the peer.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
313 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
314
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
315
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
316 class ipeerlegacycommands(Protocol):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
317 """Interface for implementing support for legacy wire protocol commands.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
318
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
319 Wire protocol commands transition to legacy status when they are no longer
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
320 used by modern clients. To facilitate identifying which commands are
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
321 legacy, the interfaces are split.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
322 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
323
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
324 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
325 def between(self, pairs):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
326 """Obtain nodes between pairs of nodes.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
327
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
328 ``pairs`` is an iterable of node pairs.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
329
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
330 Returns an iterable of iterables of nodes corresponding to each
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
331 requested pair.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
332 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
333
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
334 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
335 def branches(self, nodes):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
336 """Obtain ancestor changesets of specific nodes back to a branch point.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
337
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
338 For each requested node, the peer finds the first ancestor node that is
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
339 a DAG root or is a merge.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
340
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
341 Returns an iterable of iterables with the resolved values for each node.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
342 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
343
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
344 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
345 def changegroup(self, nodes, source):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
346 """Obtain a changegroup with data for descendants of specified nodes."""
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
347
52526
61f70a6ab645 wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52525
diff changeset
348 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
349 def changegroupsubset(self, bases, heads, source):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
350 pass
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
351
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
352
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
353 class ipeercommandexecutor(Protocol):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
354 """Represents a mechanism to execute remote commands.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
355
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
356 This is the primary interface for requesting that wire protocol commands
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
357 be executed. Instances of this interface are active in a context manager
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
358 and have a well-defined lifetime. When the context manager exits, all
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
359 outstanding requests are waited on.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
360 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
361
52525
e123c8a26a70 localrepo: subclass the new `repository.ipeercommandexecutor` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52522
diff changeset
362 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
363 def callcommand(self, name, args):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
364 """Request that a named command be executed.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
365
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
366 Receives the command name and a dictionary of command arguments.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
367
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
368 Returns a ``concurrent.futures.Future`` that will resolve to the
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
369 result of that command request. That exact value is left up to
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
370 the implementation and possibly varies by command.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
371
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
372 Not all commands can coexist with other commands in an executor
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
373 instance: it depends on the underlying wire protocol transport being
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
374 used and the command itself.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
375
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
376 Implementations MAY call ``sendcommands()`` automatically if the
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
377 requested command can not coexist with other commands in this executor.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
378
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
379 Implementations MAY call ``sendcommands()`` automatically when the
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
380 future's ``result()`` is called. So, consumers using multiple
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
381 commands with an executor MUST ensure that ``result()`` is not called
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
382 until all command requests have been issued.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
383 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
384
52525
e123c8a26a70 localrepo: subclass the new `repository.ipeercommandexecutor` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52522
diff changeset
385 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
386 def sendcommands(self):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
387 """Trigger submission of queued command requests.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
388
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
389 Not all transports submit commands as soon as they are requested to
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
390 run. When called, this method forces queued command requests to be
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
391 issued. It will no-op if all commands have already been sent.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
392
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
393 When called, no more new commands may be issued with this executor.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
394 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
395
52525
e123c8a26a70 localrepo: subclass the new `repository.ipeercommandexecutor` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52522
diff changeset
396 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
397 def close(self):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
398 """Signal that this command request is finished.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
399
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
400 When called, no more new commands may be issued. All outstanding
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
401 commands that have previously been issued are waited on before
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
402 returning. This not only includes waiting for the futures to resolve,
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
403 but also waiting for all response data to arrive. In other words,
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
404 calling this waits for all on-wire state for issued command requests
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
405 to finish.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
406
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
407 When used as a context manager, this method is called when exiting the
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
408 context manager.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
409
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
410 This method may call ``sendcommands()`` if there are buffered commands.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
411 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
412
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
413
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
414 class ipeerrequests(Protocol):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
415 """Interface for executing commands on a peer."""
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
416
52494
4cc186255672 interfaces: convert `repository.ipeerrequests` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52493
diff changeset
417 limitedarguments: bool
4cc186255672 interfaces: convert `repository.ipeerrequests` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52493
diff changeset
418 """True if the peer cannot receive large argument value for commands."""
42200
69921d02daaf peer: introduce a limitedarguments attributes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41340
diff changeset
419
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
420 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
421 def commandexecutor(self):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
422 """A context manager that resolves to an ipeercommandexecutor.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
423
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
424 The object this resolves to can be used to issue command requests
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
425 to the peer.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
426
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
427 Callers should call its ``callcommand`` method to issue command
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
428 requests.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
429
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
430 A new executor should be obtained for each distinct set of commands
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
431 (possibly just a single command) that the consumer wants to execute
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
432 as part of a single operation or round trip. This is because some
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
433 peers are half-duplex and/or don't support persistent connections.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
434 e.g. in the case of HTTP peers, commands sent to an executor represent
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
435 a single HTTP request. While some peers may support multiple command
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
436 sends over the wire per executor, consumers need to code to the least
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
437 capable peer. So it should be assumed that command executors buffer
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
438 called commands until they are told to send them and that each
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
439 command executor could result in a new connection or wire-level request
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
440 being issued.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
441 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
442
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
443
52533
199b0e62b403 interfaces: make the `peer` mixin not a Protocol to fix Python 3.10 failures
Matt Harbison <matt_harbison@yahoo.com>
parents: 52529
diff changeset
444 # TODO: make this a Protocol class when 3.11 is the minimum supported version?
199b0e62b403 interfaces: make the `peer` mixin not a Protocol to fix Python 3.10 failures
Matt Harbison <matt_harbison@yahoo.com>
parents: 52529
diff changeset
445 class peer(_ipeerconnection, ipeercapabilities, ipeerrequests):
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
446 """Unified interface for peer repositories.
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
447
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
448 All peer instances must conform to this interface.
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
449 """
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
450
52495
1df97507c6b8 interfaces: convert `repository.peer` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52494
diff changeset
451 limitedarguments: bool = False
52909
4fa0d89d1bdb typing: use the IPath interface instead of external import
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52906
diff changeset
452 path: misc.IPath | None
52545
5a924cb07768 typing: add annotations to the `repository.peer` mixin class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52533
diff changeset
453 ui: Ui
5a924cb07768 typing: add annotations to the `repository.peer` mixin class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52533
diff changeset
454
5a924cb07768 typing: add annotations to the `repository.peer` mixin class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52533
diff changeset
455 def __init__(
5a924cb07768 typing: add annotations to the `repository.peer` mixin class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52533
diff changeset
456 self,
5a924cb07768 typing: add annotations to the `repository.peer` mixin class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52533
diff changeset
457 ui: Ui,
52909
4fa0d89d1bdb typing: use the IPath interface instead of external import
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52906
diff changeset
458 path: misc.IPath | None = None,
52545
5a924cb07768 typing: add annotations to the `repository.peer` mixin class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52533
diff changeset
459 remotehidden: bool = False,
5a924cb07768 typing: add annotations to the `repository.peer` mixin class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52533
diff changeset
460 ) -> None:
49863
a6e2a668c746 peer: have a common constructor and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49860
diff changeset
461 self.ui = ui
49864
611ccb631cbc peer: add a `path` attribute to peer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49863
diff changeset
462 self.path = path
49863
a6e2a668c746 peer: have a common constructor and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49860
diff changeset
463
52545
5a924cb07768 typing: add annotations to the `repository.peer` mixin class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52533
diff changeset
464 def capable(self, name: bytes) -> bool | bytes:
52547
1554bd50a1af interfaces: move peer `capabilities()` to the `ipeercapabilities` interface
Matt Harbison <matt_harbison@yahoo.com>
parents: 52545
diff changeset
465 caps = self.capabilities()
33823
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
466 if name in caps:
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
467 return True
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
468
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
469 name = b'%s=' % name
33823
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
470 for cap in caps:
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
471 if cap.startswith(name):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
472 return cap[len(name) :]
33823
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
473
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
474 return False
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
475
52545
5a924cb07768 typing: add annotations to the `repository.peer` mixin class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52533
diff changeset
476 def requirecap(self, name: bytes, purpose: bytes) -> None:
33823
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
477 if self.capable(name):
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
478 return
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
479
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
480 raise error.CapabilityError(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
481 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
482 b'cannot %s; remote repository does not support the '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
483 b'\'%s\' capability'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
484 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
485 % (purpose, name)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
486 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
487
33823
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
488
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
489 class iverifyproblem(Protocol):
39847
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
490 """Represents a problem with the integrity of the repository.
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
491
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
492 Instances of this interface are emitted to describe an integrity issue
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
493 with a repository (e.g. corrupt storage, missing data, etc).
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
494
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
495 Instances are essentially messages associated with severity.
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
496 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
497
52496
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
498 warning: bytes | None
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
499 """Message indicating a non-fatal problem."""
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
500
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
501 error: bytes | None
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
502 """Message indicating a fatal problem."""
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
503
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
504 node: bytes | None
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
505 """Revision encountering the problem.
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
506
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
507 ``None`` means the problem doesn't apply to a single revision.
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
508 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
509
39877
733db72f0f54 revlog: move revision verification out of verify
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39874
diff changeset
510
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
511 class irevisiondelta(Protocol):
39258
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
512 """Represents a delta between one revision and another.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
513
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
514 Instances convey enough information to allow a revision to be exchanged
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
515 with another repository.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
516
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
517 Instances represent the fulltext revision data or a delta against
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
518 another revision. Therefore the ``revision`` and ``delta`` attributes
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
519 are mutually exclusive.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
520
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
521 Typically used for changegroup generation.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
522 """
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
523
52498
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
524 node: bytes
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
525 """20 byte node of this revision."""
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
526
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
527 p1node: bytes
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
528 """20 byte node of 1st parent of this revision."""
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
529
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
530 p2node: bytes
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
531 """20 byte node of 2nd parent of this revision."""
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
532
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
533 # TODO: is this really optional? revlog.revlogrevisiondelta defaults to None
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
534 linknode: bytes | None
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
535 """20 byte node of the changelog revision this node is linked to."""
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
536
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
537 flags: int
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
538 """2 bytes of integer flags that apply to this revision.
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
539
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
540 This is a bitwise composition of the ``REVISION_FLAG_*`` constants.
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
541 """
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
542
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
543 basenode: bytes
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
544 """20 byte node of the revision this data is a delta against.
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
545
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
546 ``nullid`` indicates that the revision is a full revision and not
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
547 a delta.
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
548 """
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
549
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
550 baserevisionsize: int | None
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
551 """Size of base revision this delta is against.
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
552
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
553 May be ``None`` if ``basenode`` is ``nullid``.
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
554 """
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
555
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
556 # TODO: is this really optional? (Seems possible in
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
557 # storageutil.emitrevisions()).
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
558 revision: bytes | None
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
559 """Raw fulltext of revision data for this node."""
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
560
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
561 delta: bytes | None
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
562 """Delta between ``basenode`` and ``node``.
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
563
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
564 Stored in the bdiff delta format.
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
565 """
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
566
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
567 sidedata: bytes | None
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
568 """Raw sidedata bytes for the given revision."""
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
569
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
570 protocol_flags: int
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
571 """Single byte of integer flags that can influence the protocol.
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
572
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
573 This is a bitwise composition of the ``storageutil.CG_FLAG*`` constants.
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
574 """
47094
119790e1c67c cg4: introduce protocol flag to signify the presence of sidedata
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46793
diff changeset
575
39258
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
576
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
577 class ifilerevisionssequence(Protocol):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
578 """Contains index data for all revisions of a file.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
579
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
580 Types implementing this behave like lists of tuples. The index
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
581 in the list corresponds to the revision number. The values contain
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
582 index metadata.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
583
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
584 The *null* revision (revision number -1) is always the last item
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
585 in the index.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
586 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
587
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
588 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
589 def __len__(self):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
590 """The total number of revisions."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
591
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
592 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
593 def __getitem__(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
594 """Returns the object having a specific revision number.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
595
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
596 Returns an 8-tuple with the following fields:
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
597
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
598 offset+flags
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
599 Contains the offset and flags for the revision. 64-bit unsigned
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
600 integer where first 6 bytes are the offset and the next 2 bytes
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
601 are flags. The offset can be 0 if it is not used by the store.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
602 compressed size
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
603 Size of the revision data in the store. It can be 0 if it isn't
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
604 needed by the store.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
605 uncompressed size
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
606 Fulltext size. It can be 0 if it isn't needed by the store.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
607 base revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
608 Revision number of revision the delta for storage is encoded
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
609 against. -1 indicates not encoded against a base revision.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
610 link revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
611 Revision number of changelog revision this entry is related to.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
612 p1 revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
613 Revision number of 1st parent. -1 if no 1st parent.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
614 p2 revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
615 Revision number of 2nd parent. -1 if no 1st parent.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
616 node
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
617 Binary node value for this revision number.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
618
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
619 Negative values should index off the end of the sequence. ``-1``
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
620 should return the null revision. ``-2`` should return the most
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
621 recent revision.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
622 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
623
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
624 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
625 def __contains__(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
626 """Whether a revision number exists."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
627
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
628 @abc.abstractmethod
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
629 def insert(self, i, entry):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
630 """Add an item to the index at specific revision."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
631
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
632
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
633 class ifileindex(Protocol):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
634 """Storage interface for index data of a single file.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
635
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
636 File storage data is divided into index metadata and data storage.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
637 This interface defines the index portion of the interface.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
638
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
639 The index logically consists of:
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
640
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
641 * A mapping between revision numbers and nodes.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
642 * DAG data (storing and querying the relationship between nodes).
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
643 * Metadata to facilitate storage.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
644 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
645
52501
0d4ead4d88bd interfaces: convert `repository.ifileindex` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52498
diff changeset
646 nullid: bytes
0d4ead4d88bd interfaces: convert `repository.ifileindex` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52498
diff changeset
647 """node for the null revision for use as delta base."""
46793
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
648
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
649 @abc.abstractmethod
52516
3daaa5195a30 typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52515
diff changeset
650 def __len__(self) -> int:
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
651 """Obtain the number of revisions stored for this file."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
652
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
653 @abc.abstractmethod
52516
3daaa5195a30 typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52515
diff changeset
654 def __iter__(self) -> Iterator[int]:
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
655 """Iterate over revision numbers for this file."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
656
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
657 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
658 def hasnode(self, node):
40387
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
659 """Returns a bool indicating if a node is known to this store.
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
660
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
661 Implementations must only return True for full, binary node values:
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
662 hex nodes, revision numbers, and partial node matches must be
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
663 rejected.
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
664
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
665 The null node is never present.
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
666 """
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
667
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
668 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
669 def revs(self, start=0, stop=None):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
670 """Iterate over revision numbers for this file, with control."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
671
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
672 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
673 def parents(self, node):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
674 """Returns a 2-tuple of parent nodes for a revision.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
675
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
676 Values will be ``nullid`` if the parent is empty.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
677 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
678
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
679 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
680 def parentrevs(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
681 """Like parents() but operates on revision numbers."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
682
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
683 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
684 def rev(self, node):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
685 """Obtain the revision number given a node.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
686
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
687 Raises ``error.LookupError`` if the node is not known.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
688 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
689
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
690 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
691 def node(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
692 """Obtain the node value given a revision number.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
693
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
694 Raises ``IndexError`` if the node is not known.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
695 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
696
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
697 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
698 def lookup(self, node):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
699 """Attempt to resolve a value to a node.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
700
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
701 Value can be a binary node, hex node, revision number, or a string
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
702 that can be converted to an integer.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
703
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
704 Raises ``error.LookupError`` if a node could not be resolved.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
705 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
706
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
707 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
708 def linkrev(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
709 """Obtain the changeset revision number a revision is linked to."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
710
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
711 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
712 def iscensored(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
713 """Return whether a revision's content has been censored."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
714
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
715 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
716 def commonancestorsheads(self, node1, node2):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
717 """Obtain an iterable of nodes containing heads of common ancestors.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
718
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
719 See ``ancestor.commonancestorsheads()``.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
720 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
721
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
722 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
723 def descendants(self, revs):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
724 """Obtain descendant revision numbers for a set of revision numbers.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
725
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
726 If ``nullrev`` is in the set, this is equivalent to ``revs()``.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
727 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
728
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
729 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
730 def heads(self, start=None, stop=None):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
731 """Obtain a list of nodes that are DAG heads, with control.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
732
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
733 The set of revisions examined can be limited by specifying
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
734 ``start`` and ``stop``. ``start`` is a node. ``stop`` is an
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
735 iterable of nodes. DAG traversal starts at earlier revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
736 ``start`` and iterates forward until any node in ``stop`` is
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
737 encountered.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
738 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
739
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
740 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
741 def children(self, node):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
742 """Obtain nodes that are children of a node.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
743
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
744 Returns a list of nodes.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
745 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
746
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
747
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
748 class ifiledata(Protocol):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
749 """Storage interface for data storage of a specific file.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
750
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
751 This complements ``ifileindex`` and provides an interface for accessing
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
752 data for a tracked file.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
753 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
754
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
755 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
756 def size(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
757 """Obtain the fulltext size of file data.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
758
39880
d909c44d29e1 filelog: stop proxying rawsize() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39878
diff changeset
759 Any metadata is excluded from size measurements.
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
760 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
761
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
762 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
763 def revision(self, node):
45961
464539c305aa formatting: drop a few extra double quotes in docstrings
Matt Harbison <matt_harbison@yahoo.com>
parents: 45957
diff changeset
764 """Obtain fulltext data for a node.
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
765
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
766 By default, any storage transformations are applied before the data
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
767 is returned. If ``raw`` is True, non-raw storage transformations
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
768 are not applied.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
769
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
770 The fulltext data may contain a header containing metadata. Most
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
771 consumers should use ``read()`` to obtain the actual file data.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
772 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
773
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
774 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
775 def rawdata(self, node):
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45811
diff changeset
776 """Obtain raw data for a node."""
42744
bbe71b5afd02 rawdata: register the method for `ifiledata`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42740
diff changeset
777
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
778 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
779 def read(self, node):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
780 """Resolve file fulltext data.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
781
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
782 This is similar to ``revision()`` except any metadata in the data
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
783 headers is stripped.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
784 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
785
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
786 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
787 def renamed(self, node):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
788 """Obtain copy metadata for a node.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
789
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
790 Returns ``False`` if no copy metadata is stored or a 2-tuple of
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
791 (path, node) from which this revision was copied.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
792 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
793
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
794 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
795 def cmp(self, node, fulltext):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
796 """Compare fulltext to another revision.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
797
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
798 Returns True if the fulltext is different from what is stored.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
799
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
800 This takes copy metadata into account.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
801
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
802 TODO better document the copy metadata and censoring logic.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
803 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
804
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
805 @abc.abstractmethod
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
806 def emitrevisions(
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
807 self,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
808 nodes,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
809 nodesorder=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
810 revisiondata=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
811 assumehaveparentrevisions=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
812 deltamode=CG_DELTAMODE_STD,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
813 ):
39867
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
814 """Produce ``irevisiondelta`` for revisions.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
815
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
816 Given an iterable of nodes, emits objects conforming to the
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
817 ``irevisiondelta`` interface that describe revisions in storage.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
818
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
819 This method is a generator.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
820
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
821 The input nodes may be unordered. Implementations must ensure that a
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
822 node's parents are emitted before the node itself. Transitively, this
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
823 means that a node may only be emitted once all its ancestors in
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
824 ``nodes`` have also been emitted.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
825
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
826 By default, emits "index" data (the ``node``, ``p1node``, and
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
827 ``p2node`` attributes). If ``revisiondata`` is set, revision data
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
828 will also be present on the emitted objects.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
829
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
830 With default argument values, implementations can choose to emit
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
831 either fulltext revision data or a delta. When emitting deltas,
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
832 implementations must consider whether the delta's base revision
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
833 fulltext is available to the receiver.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
834
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
835 The base revision fulltext is guaranteed to be available if any of
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
836 the following are met:
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
837
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
838 * Its fulltext revision was emitted by this method call.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
839 * A delta for that revision was emitted by this method call.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
840 * ``assumehaveparentrevisions`` is True and the base revision is a
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
841 parent of the node.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
842
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
843 ``nodesorder`` can be used to control the order that revisions are
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
844 emitted. By default, revisions can be reordered as long as they are
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
845 in DAG topological order (see above). If the value is ``nodes``,
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
846 the iteration order from ``nodes`` should be used. If the value is
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
847 ``storage``, then the native order from the backing storage layer
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
848 is used. (Not all storage layers will have strong ordering and behavior
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
849 of this mode is storage-dependent.) ``nodes`` ordering can force
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
850 revisions to be emitted before their ancestors, so consumers should
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
851 use it with care.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
852
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
853 The ``linknode`` attribute on the returned ``irevisiondelta`` may not
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
854 be set and it is the caller's responsibility to resolve it, if needed.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
855
40496
6a917075535a storage: also use `deltamode argument` for ifiledata
Boris Feld <boris.feld@octobus.net>
parents: 40495
diff changeset
856 If ``deltamode`` is CG_DELTAMODE_PREV and revision data is requested,
6a917075535a storage: also use `deltamode argument` for ifiledata
Boris Feld <boris.feld@octobus.net>
parents: 40495
diff changeset
857 all revision data should be emitted as deltas against the revision
6a917075535a storage: also use `deltamode argument` for ifiledata
Boris Feld <boris.feld@octobus.net>
parents: 40495
diff changeset
858 emitted just prior. The initial revision should be a delta against its
6a917075535a storage: also use `deltamode argument` for ifiledata
Boris Feld <boris.feld@octobus.net>
parents: 40495
diff changeset
859 1st parent.
39867
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
860 """
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
861
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
862
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
863 class ifilemutation(Protocol):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
864 """Storage interface for mutation events of a tracked file."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
865
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
866 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
867 def add(self, filedata, meta, transaction, linkrev, p1, p2):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
868 """Add a new revision to the store.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
869
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
870 Takes file data, dictionary of metadata, a transaction, linkrev,
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
871 and parent nodes.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
872
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
873 Returns the node that was added.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
874
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
875 May no-op if a revision matching the supplied data is already stored.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
876 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
877
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
878 @abc.abstractmethod
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
879 def addrevision(
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
880 self,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
881 revisiondata,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
882 transaction,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
883 linkrev,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
884 p1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
885 p2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
886 node=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
887 flags=0,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
888 cachedelta=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
889 ):
46560
f7b61ad3c64a revlog: change addrevision to return the new revision, not node
Joerg Sonnenberger <joerg@bec.de>
parents: 46445
diff changeset
890 """Add a new revision to the store and return its number.
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
891
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
892 This is similar to ``add()`` except it operates at a lower level.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
893
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
894 The data passed in already contains a metadata header, if any.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
895
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
896 ``node`` and ``flags`` can be used to define the expected node and
40048
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
897 the flags to use with storage. ``flags`` is a bitwise value composed
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
898 of the various ``REVISION_FLAG_*`` constants.
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
899
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
900 ``add()`` is usually called when adding files from e.g. the working
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
901 directory. ``addrevision()`` is often called by ``add()`` and for
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
902 scenarios where revision data has already been computed, such as when
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
903 applying raw data from a peer repo.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
904 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
905
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
906 @abc.abstractmethod
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
907 def addgroup(
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
908 self,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
909 deltas,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
910 linkmapper,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
911 transaction,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
912 addrevisioncb=None,
45811
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
913 duplicaterevisioncb=None,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
914 maybemissingparents=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
915 ):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
916 """Process a series of deltas for storage.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
917
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
918 ``deltas`` is an iterable of 7-tuples of
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
919 (node, p1, p2, linknode, deltabase, delta, flags) defining revisions
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
920 to add.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
921
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
922 The ``delta`` field contains ``mpatch`` data to apply to a base
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
923 revision, identified by ``deltabase``. The base node can be
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
924 ``nullid``, in which case the header from the delta can be ignored
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
925 and the delta used as the fulltext.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
926
46445
711ba0f1057e revlog: decouple caching from addrevision callback for addgroup
Joerg Sonnenberger <joerg@bec.de>
parents: 46443
diff changeset
927 ``alwayscache`` instructs the lower layers to cache the content of the
711ba0f1057e revlog: decouple caching from addrevision callback for addgroup
Joerg Sonnenberger <joerg@bec.de>
parents: 46443
diff changeset
928 newly added revision, even if it needs to be explicitly computed.
711ba0f1057e revlog: decouple caching from addrevision callback for addgroup
Joerg Sonnenberger <joerg@bec.de>
parents: 46443
diff changeset
929 This used to be the default when ``addrevisioncb`` was provided up to
711ba0f1057e revlog: decouple caching from addrevision callback for addgroup
Joerg Sonnenberger <joerg@bec.de>
parents: 46443
diff changeset
930 Mercurial 5.8.
711ba0f1057e revlog: decouple caching from addrevision callback for addgroup
Joerg Sonnenberger <joerg@bec.de>
parents: 46443
diff changeset
931
46561
7a93b7b3dc2d revlog: change addgroup callbacks to take revision numbers
Joerg Sonnenberger <joerg@bec.de>
parents: 46560
diff changeset
932 ``addrevisioncb`` should be called for each new rev as it is committed.
7a93b7b3dc2d revlog: change addgroup callbacks to take revision numbers
Joerg Sonnenberger <joerg@bec.de>
parents: 46560
diff changeset
933 ``duplicaterevisioncb`` should be called for all revs with a
7a93b7b3dc2d revlog: change addgroup callbacks to take revision numbers
Joerg Sonnenberger <joerg@bec.de>
parents: 46560
diff changeset
934 pre-existing node.
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
935
40389
1b183edbb68e repository: teach addgroup() to receive data with missing parents
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40387
diff changeset
936 ``maybemissingparents`` is a bool indicating whether the incoming
1b183edbb68e repository: teach addgroup() to receive data with missing parents
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40387
diff changeset
937 data may reference parents/ancestor revisions that aren't present.
1b183edbb68e repository: teach addgroup() to receive data with missing parents
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40387
diff changeset
938 This flag is set when receiving data into a "shallow" store that
1b183edbb68e repository: teach addgroup() to receive data with missing parents
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40387
diff changeset
939 doesn't hold all history.
1b183edbb68e repository: teach addgroup() to receive data with missing parents
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40387
diff changeset
940
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
941 Returns a list of nodes that were processed. A node will be in the list
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
942 even if it existed in the store previously.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
943 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
944
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
945 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
946 def censorrevision(self, tr, node, tombstone=b''):
39794
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
947 """Remove the content of a single revision.
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
948
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
949 The specified ``node`` will have its content purged from storage.
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
950 Future attempts to access the revision data for this node will
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
951 result in failure.
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
952
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
953 A ``tombstone`` message can optionally be stored. This message may be
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
954 displayed to users when they attempt to access the missing revision
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
955 data.
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
956
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
957 Storage backends may have stored deltas against the previous content
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
958 in this revision. As part of censoring a revision, these storage
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
959 backends are expected to rewrite any internally stored deltas such
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
960 that they no longer reference the deleted content.
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
961 """
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
962
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
963 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
964 def getstrippoint(self, minlink):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
965 """Find the minimum revision that must be stripped to strip a linkrev.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
966
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
967 Returns a 2-tuple containing the minimum revision number and a set
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
968 of all revisions numbers that would be broken by this strip.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
969
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
970 TODO this is highly revlog centric and should be abstracted into
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
971 a higher-level deletion API. ``repair.strip()`` relies on this.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
972 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
973
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
974 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
975 def strip(self, minlink, transaction):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
976 """Remove storage of items starting at a linkrev.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
977
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
978 This uses ``getstrippoint()`` to determine the first node to remove.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
979 Then it effectively truncates storage for all revisions after that.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
980
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
981 TODO this is highly revlog centric and should be abstracted into a
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
982 higher-level deletion API.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
983 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
984
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
985
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
986 class ifilestorage(ifileindex, ifiledata, ifilemutation, Protocol):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
987 """Complete storage interface for a single tracked file."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
988
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
989 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
990 def files(self):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
991 """Obtain paths that are backing storage for this file.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
992
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
993 TODO this is used heavily by verify code and there should probably
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
994 be a better API for that.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
995 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
996
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
997 @abc.abstractmethod
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
998 def storageinfo(
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
999 self,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1000 exclusivefiles=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1001 sharedfiles=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1002 revisionscount=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1003 trackedsize=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1004 storedsize=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1005 ):
39874
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1006 """Obtain information about storage for this file's data.
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1007
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1008 Returns a dict describing storage for this tracked path. The keys
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1009 in the dict map to arguments of the same. The arguments are bools
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1010 indicating whether to calculate and obtain that data.
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1011
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1012 exclusivefiles
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1013 Iterable of (vfs, path) describing files that are exclusively
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1014 used to back storage for this tracked path.
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1015
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1016 sharedfiles
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1017 Iterable of (vfs, path) describing files that are used to back
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1018 storage for this tracked path. Those files may also provide storage
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1019 for other stored entities.
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1020
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1021 revisionscount
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1022 Number of revisions available for retrieval.
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1023
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1024 trackedsize
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1025 Total size in bytes of all tracked revisions. This is a sum of the
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1026 length of the fulltext of all revisions.
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1027
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1028 storedsize
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1029 Total size in bytes used to store data for all tracked revisions.
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1030 This is commonly less than ``trackedsize`` due to internal usage
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1031 of deltas rather than fulltext revisions.
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1032
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1033 Not all storage backends may support all queries are have a reasonable
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1034 value to use. In that case, the value should be set to ``None`` and
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1035 callers are expected to handle this special value.
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1036 """
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1037
52517
8c89e978375c interfaces: convert `repository.ifilestorage` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52516
diff changeset
1038 @abc.abstractmethod
52516
3daaa5195a30 typing: align the signatures of `repository.ifilestorage` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52515
diff changeset
1039 def verifyintegrity(self, state) -> Iterable[iverifyproblem]:
39847
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
1040 """Verifies the integrity of file storage.
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
1041
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
1042 ``state`` is a dict holding state of the verifier process. It can be
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
1043 used to communicate data between invocations of multiple storage
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
1044 primitives.
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
1045
39877
733db72f0f54 revlog: move revision verification out of verify
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39874
diff changeset
1046 If individual revisions cannot have their revision content resolved,
733db72f0f54 revlog: move revision verification out of verify
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39874
diff changeset
1047 the method is expected to set the ``skipread`` key to a set of nodes
44073
b9e174d4ed11 verify: allow the storage to signal when renames can be tested on `skipread`
Matt Harbison <matt_harbison@yahoo.com>
parents: 43751
diff changeset
1048 that encountered problems. If set, the method can also add the node(s)
b9e174d4ed11 verify: allow the storage to signal when renames can be tested on `skipread`
Matt Harbison <matt_harbison@yahoo.com>
parents: 43751
diff changeset
1049 to ``safe_renamed`` in order to indicate nodes that may perform the
b9e174d4ed11 verify: allow the storage to signal when renames can be tested on `skipread`
Matt Harbison <matt_harbison@yahoo.com>
parents: 43751
diff changeset
1050 rename checks with currently accessible data.
39877
733db72f0f54 revlog: move revision verification out of verify
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39874
diff changeset
1051
39847
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
1052 The method yields objects conforming to the ``iverifyproblem``
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
1053 interface.
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
1054 """
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
1055
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1056
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
1057 class idirs(Protocol):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1058 """Interface representing a collection of directories from paths.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1059
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1060 This interface is essentially a derived data structure representing
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1061 directories from a collection of paths.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1062 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1063
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
1064 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1065 def addpath(self, path):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1066 """Add a path to the collection.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1067
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1068 All directories in the path will be added to the collection.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1069 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1070
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
1071 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1072 def delpath(self, path):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1073 """Remove a path from the collection.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1074
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1075 If the removal was the last path in a particular directory, the
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1076 directory is removed from the collection.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1077 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1078
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
1079 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1080 def __iter__(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1081 """Iterate over the directories in this collection of paths."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1082
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
1083 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1084 def __contains__(self, path):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1085 """Whether a specific directory is in this collection."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1086
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1087
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
1088 class imanifestdict(Protocol):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1089 """Interface representing a manifest data structure.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1090
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1091 A manifest is effectively a dict mapping paths to entries. Each entry
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1092 consists of a binary node and extra flags affecting that entry.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1093 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1094
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1095 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1096 def __getitem__(self, key: bytes) -> bytes:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1097 """Returns the binary node value for a path in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1098
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1099 Raises ``KeyError`` if the path does not exist in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1100
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1101 Equivalent to ``self.find(path)[0]``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1102 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1103
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1104 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1105 def find(self, path: bytes) -> tuple[bytes, bytes]:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1106 """Returns the entry for a path in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1107
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1108 Returns a 2-tuple of (node, flags).
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1109
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1110 Raises ``KeyError`` if the path does not exist in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1111 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1112
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1113 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1114 def __len__(self) -> int:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1115 """Return the number of entries in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1116
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1117 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1118 def __nonzero__(self) -> bool:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1119 """Returns True if the manifest has entries, False otherwise."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1120
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1121 __bool__ = __nonzero__
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1122
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1123 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1124 def set(self, path: bytes, node: bytes, flags: bytes) -> None:
51812
421c9b3f2f4e commit: set whole manifest entries at once (node with its associated flags)
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 51579
diff changeset
1125 """Define the node value and flags for a path in the manifest.
421c9b3f2f4e commit: set whole manifest entries at once (node with its associated flags)
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 51579
diff changeset
1126
421c9b3f2f4e commit: set whole manifest entries at once (node with its associated flags)
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 51579
diff changeset
1127 Equivalent to __setitem__ followed by setflag, but can be more efficient.
421c9b3f2f4e commit: set whole manifest entries at once (node with its associated flags)
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 51579
diff changeset
1128 """
421c9b3f2f4e commit: set whole manifest entries at once (node with its associated flags)
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 51579
diff changeset
1129
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1130 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1131 def __setitem__(self, path: bytes, node: bytes) -> None:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1132 """Define the node value for a path in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1133
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1134 If the path is already in the manifest, its flags will be copied to
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1135 the new entry.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1136 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1137
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1138 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1139 def __contains__(self, path: bytes) -> bool:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1140 """Whether a path exists in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1141
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1142 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1143 def __delitem__(self, path: bytes) -> None:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1144 """Remove a path from the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1145
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1146 Raises ``KeyError`` if the path is not in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1147 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1148
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1149 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1150 def __iter__(self) -> Iterator[bytes]:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1151 """Iterate over paths in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1152
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1153 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1154 def iterkeys(self) -> Iterator[bytes]:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1155 """Iterate over paths in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1156
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1157 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1158 def keys(self) -> list[bytes]:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1159 """Obtain a list of paths in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1160
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1161 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1162 def filesnotin(self, other, match=None) -> Set[bytes]:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1163 """Obtain the set of paths in this manifest but not in another.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1164
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1165 ``match`` is an optional matcher function to be applied to both
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1166 manifests.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1167
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1168 Returns a set of paths.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1169 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1170
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1171 @abc.abstractmethod
52906
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52905
diff changeset
1172 def dirs(self) -> misc.IDirs:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1173 """Returns an object implementing the ``idirs`` interface."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1174
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1175 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1176 def hasdir(self, dir: bytes) -> bool:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1177 """Returns a bool indicating if a directory is in this manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1178
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1179 @abc.abstractmethod
52755
5c48fd4c0e68 typing: introduce a `types` module and a MatcherT alias
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52739
diff changeset
1180 def walk(self, match: matcher.IMatcher) -> Iterator[bytes]:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1181 """Generator of paths in manifest satisfying a matcher.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1182
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1183 If the matcher has explicit files listed and they don't exist in
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1184 the manifest, ``match.bad()`` is called for each missing file.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1185 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1186
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1187 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1188 def diff(
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1189 self,
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1190 other: Any, # TODO: 'manifestdict' or (better) equivalent interface
52755
5c48fd4c0e68 typing: introduce a `types` module and a MatcherT alias
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52739
diff changeset
1191 match: matcher.IMatcher | None = None,
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1192 clean: bool = False,
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1193 ) -> dict[
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1194 bytes,
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1195 tuple[tuple[bytes | None, bytes], tuple[bytes | None, bytes]] | None,
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1196 ]:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1197 """Find differences between this manifest and another.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1198
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1199 This manifest is compared to ``other``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1200
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1201 If ``match`` is provided, the two manifests are filtered against this
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1202 matcher and only entries satisfying the matcher are compared.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1203
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1204 If ``clean`` is True, unchanged files are included in the returned
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1205 object.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1206
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1207 Returns a dict with paths as keys and values of 2-tuples of 2-tuples of
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1208 the form ``((node1, flag1), (node2, flag2))`` where ``(node1, flag1)``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1209 represents the node and flags for this manifest and ``(node2, flag2)``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1210 are the same for the other manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1211 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1212
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1213 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1214 def setflag(self, path: bytes, flag: bytes) -> None:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1215 """Set the flag value for a given path.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1216
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1217 Raises ``KeyError`` if the path is not already in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1218 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1219
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1220 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1221 def get(self, path: bytes, default=None) -> bytes | None:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1222 """Obtain the node value for a path or a default value if missing."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1223
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1224 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1225 def flags(self, path: bytes) -> bytes:
44304
dbbae122f5e4 manifest: remove optional default= argument on flags(path)
Augie Fackler <augie@google.com>
parents: 44073
diff changeset
1226 """Return the flags value for a path (default: empty bytestring)."""
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1227
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1228 @abc.abstractmethod
52670
4cb75772818d pyupgrade: drop the quoting around type annotations
Matt Harbison <matt_harbison@yahoo.com>
parents: 52548
diff changeset
1229 def copy(self) -> imanifestdict:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1230 """Return a copy of this manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1231
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1232 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1233 def items(self) -> Iterator[tuple[bytes, bytes]]:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1234 """Returns an iterable of (path, node) for items in this manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1235
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1236 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1237 def iteritems(self) -> Iterator[tuple[bytes, bytes]]:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1238 """Identical to items()."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1239
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1240 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1241 def iterentries(self) -> Iterator[tuple[bytes, bytes, bytes]]:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1242 """Returns an iterable of (path, node, flags) for this manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1243
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1244 Similar to ``iteritems()`` except items are a 3-tuple and include
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1245 flags.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1246 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1247
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1248 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1249 def text(self) -> ByteString:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1250 """Obtain the raw data representation for this manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1251
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1252 Result is used to create a manifest revision.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1253 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1254
52522
3913f9509476 interfaces: make `repository.imanifestdict` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52521
diff changeset
1255 @abc.abstractmethod
52521
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1256 def fastdelta(
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1257 self, base: ByteString, changes: Iterable[tuple[bytes, bool]]
48cdbd4d5443 typing: align the signatures of `repository.imanifestdict` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52519
diff changeset
1258 ) -> tuple[ByteString, ByteString]:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1259 """Obtain a delta between this manifest and another given changes.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1260
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1261 ``base`` in the raw data representation for another manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1262
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1263 ``changes`` is an iterable of ``(path, to_delete)``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1264
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1265 Returns a 2-tuple containing ``bytearray(self.text())`` and the
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1266 delta between ``base`` and this manifest.
44665
948fac24bc39 manifest: introduce new exception to signal unavailability of fastdelta()
Augie Fackler <augie@google.com>
parents: 44386
diff changeset
1267
948fac24bc39 manifest: introduce new exception to signal unavailability of fastdelta()
Augie Fackler <augie@google.com>
parents: 44386
diff changeset
1268 If this manifest implementation can't support ``fastdelta()``,
948fac24bc39 manifest: introduce new exception to signal unavailability of fastdelta()
Augie Fackler <augie@google.com>
parents: 44386
diff changeset
1269 raise ``mercurial.manifest.FastdeltaUnavailable``.
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1270 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1271
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1272
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
1273 class imanifestrevisionbase(Protocol):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1274 """Base interface representing a single revision of a manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1275
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1276 Should not be used as a primary interface: should always be inherited
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1277 as part of a larger interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1278 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1279
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
1280 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1281 def copy(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1282 """Obtain a copy of this manifest instance.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1283
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1284 Returns an object conforming to the ``imanifestrevisionwritable``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1285 interface. The instance will be associated with the same
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1286 ``imanifestlog`` collection as this instance.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1287 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1288
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
1289 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1290 def read(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1291 """Obtain the parsed manifest data structure.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1292
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1293 The returned object conforms to the ``imanifestdict`` interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1294 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1295
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1296
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1297 class imanifestrevisionstored(imanifestrevisionbase, Protocol):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1298 """Interface representing a manifest revision committed to storage."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1299
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1300 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1301 def node(self) -> bytes:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1302 """The binary node for this manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1303
52502
a1dd484bf33b interfaces: convert `imanifestrevisionstored` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52501
diff changeset
1304 parents: list[bytes]
a1dd484bf33b interfaces: convert `imanifestrevisionstored` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52501
diff changeset
1305 """List of binary nodes that are parents for this manifest revision."""
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1306
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1307 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1308 def readdelta(self, shallow: bool = False):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1309 """Obtain the manifest data structure representing changes from parent.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1310
51827
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1311 This manifest is compared to its 1st parent. A new manifest
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1312 representing those differences is constructed.
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1313
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1314 If `shallow` is True, this will read the delta for this directory,
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1315 without recursively reading subdirectory manifests. Instead, any
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1316 subdirectory entry will be reported as it appears in the manifest, i.e.
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1317 the subdirectory will be reported among files and distinguished only by
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1318 its 't' flag. This only apply if the underlying manifest support it.
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1319
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1320 The returned object conforms to the ``imanifestdict`` interface.
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1321 """
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1322
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1323 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1324 def read_any_fast_delta(
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1325 self,
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1326 valid_bases: Collection[int] | None = None,
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1327 *,
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1328 shallow: bool = False,
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1329 ):
51827
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1330 """read some manifest information as fast if possible
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1331
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1332 This might return a "delta", a manifest object containing only file
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1333 changed compared to another revisions. The `valid_bases` argument
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1334 control the set of revision that might be used as a base.
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1335
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1336 If no delta can be retrieved quickly, a full read of the manifest will
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1337 be performed instead.
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1338
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1339 The function return a tuple with two elements. The first one is the
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1340 delta base used (or None if we did a full read), the second one is the
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1341 manifest information.
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1342
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1343 If `shallow` is True, this will read the delta for this directory,
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1344 without recursively reading subdirectory manifests. Instead, any
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1345 subdirectory entry will be reported as it appears in the manifest, i.e.
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1346 the subdirectory will be reported among files and distinguished only by
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1347 its 't' flag. This only apply if the underlying manifest support it.
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1348
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1349 The returned object conforms to the ``imanifestdict`` interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1350 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1351
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1352 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1353 def read_delta_parents(self, *, shallow: bool = False, exact: bool = True):
51833
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1354 """return a diff from this revision against both parents.
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1355
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1356 If `exact` is False, this might return a superset of the diff, containing
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1357 files that are actually present as is in one of the parents.
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1358
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1359 If `shallow` is True, this will read the delta for this directory,
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1360 without recursively reading subdirectory manifests. Instead, any
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1361 subdirectory entry will be reported as it appears in the manifest, i.e.
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1362 the subdirectory will be reported among files and distinguished only by
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1363 its 't' flag. This only apply if the underlying manifest support it.
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1364
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1365 The returned object conforms to the ``imanifestdict`` interface."""
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1366
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1367 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1368 def read_delta_new_entries(self, *, shallow: bool = False):
51837
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1369 """Return a manifest containing just the entries that might be new to
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1370 the repository.
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1371
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1372 This is often equivalent to a diff against both parents, but without
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1373 garantee. For performance reason, It might contains more files in some cases.
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1374
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1375 If `shallow` is True, this will read the delta for this directory,
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1376 without recursively reading subdirectory manifests. Instead, any
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1377 subdirectory entry will be reported as it appears in the manifest, i.e.
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1378 the subdirectory will be reported among files and distinguished only by
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1379 its 't' flag. This only apply if the underlying manifest support it.
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1380
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1381 The returned object conforms to the ``imanifestdict`` interface."""
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1382
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1383 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1384 def readfast(self, shallow: bool = False):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1385 """Calls either ``read()`` or ``readdelta()``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1386
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1387 The faster of the two options is called.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1388 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1389
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1390 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1391 def find(self, key: bytes) -> tuple[bytes, bytes]:
52505
0c60be5e021a interfaces: fix a doc comment in `repository.imanifestrevisionstored.find()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 52504
diff changeset
1392 """Calls ``self.read().find(key)``.
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1393
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1394 Returns a 2-tuple of ``(node, flags)`` or raises ``KeyError``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1395 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1396
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1397
52509
01818a59f463 interfaces: convert `imanifestrevisionwritable` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52508
diff changeset
1398 class imanifestrevisionwritable(imanifestrevisionbase, Protocol):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1399 """Interface representing a manifest revision that can be committed."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1400
52509
01818a59f463 interfaces: convert `imanifestrevisionwritable` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52508
diff changeset
1401 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1402 def write(
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1403 self, transaction, linkrev, p1node, p2node, added, removed, match=None
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1404 ):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1405 """Add this revision to storage.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1406
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1407 Takes a transaction object, the changeset revision number it will
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1408 be associated with, its parent nodes, and lists of added and
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1409 removed paths.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1410
39684
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1411 If match is provided, storage can choose not to inspect or write out
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1412 items that do not match. Storage is still required to be able to provide
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1413 the full manifest in the future for any directories written (these
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1414 manifests should not be "narrowed on disk").
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1415
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1416 Returns the binary node of the created revision.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1417 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1418
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1419
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
1420 class imanifeststorage(Protocol):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1421 """Storage interface for manifest data."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1422
52507
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1423 nodeconstants: NodeConstants
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1424 """nodeconstants used by the current repository."""
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1425
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1426 tree: bytes
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1427 """The path to the directory this manifest tracks.
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1428
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1429 The empty bytestring represents the root manifest.
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1430 """
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1431
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1432 index: ifilerevisionssequence
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1433 """An ``ifilerevisionssequence`` instance."""
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1434
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1435 opener: Vfs
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1436 """VFS opener to use to access underlying files used for storage.
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1437
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1438 TODO this is revlog specific and should not be exposed.
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1439 """
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1440
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1441 # TODO: finish type hints
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1442 fulltextcache: dict
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1443 """Dict with cache of fulltexts.
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1444
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1445 TODO this doesn't feel appropriate for the storage interface.
d01af74e67b4 interfaces: convert `repository.imanifeststorage` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52505
diff changeset
1446 """
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1447
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1448 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1449 def __len__(self):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1450 """Obtain the number of revisions stored for this manifest."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1451
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1452 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1453 def __iter__(self):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1454 """Iterate over revision numbers for this manifest."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1455
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1456 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1457 def rev(self, node):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1458 """Obtain the revision number given a binary node.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1459
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1460 Raises ``error.LookupError`` if the node is not known.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1461 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1462
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1463 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1464 def node(self, rev):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1465 """Obtain the node value given a revision number.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1466
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1467 Raises ``error.LookupError`` if the revision is not known.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1468 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1469
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1470 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1471 def lookup(self, value):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1472 """Attempt to resolve a value to a node.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1473
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1474 Value can be a binary node, hex node, revision number, or a bytes
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1475 that can be converted to an integer.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1476
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1477 Raises ``error.LookupError`` if a ndoe could not be resolved.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1478 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1479
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1480 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1481 def parents(self, node):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1482 """Returns a 2-tuple of parent nodes for a node.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1483
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1484 Values will be ``nullid`` if the parent is empty.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1485 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1486
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1487 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1488 def parentrevs(self, rev):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1489 """Like parents() but operates on revision numbers."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1490
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1491 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1492 def linkrev(self, rev):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1493 """Obtain the changeset revision number a revision is linked to."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1494
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1495 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1496 def revision(self, node):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1497 """Obtain fulltext data for a node."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1498
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1499 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1500 def rawdata(self, node):
42740
2128c76c8970 rawdata: forward `rawdata` call on `manifestlog`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42620
diff changeset
1501 """Obtain raw data for a node."""
2128c76c8970 rawdata: forward `rawdata` call on `manifestlog`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42620
diff changeset
1502
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1503 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1504 def revdiff(self, rev1, rev2):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1505 """Obtain a delta between two revision numbers.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1506
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1507 The returned data is the result of ``bdiff.bdiff()`` on the raw
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1508 revision data.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1509 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1510
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1511 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1512 def cmp(self, node, fulltext):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1513 """Compare fulltext to another revision.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1514
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1515 Returns True if the fulltext is different from what is stored.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1516 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1517
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1518 @abc.abstractmethod
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1519 def emitrevisions(
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1520 self,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1521 nodes,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1522 nodesorder=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1523 revisiondata=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1524 assumehaveparentrevisions=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1525 ):
39867
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
1526 """Produce ``irevisiondelta`` describing revisions.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
1527
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
1528 See the documentation for ``ifiledata`` for more.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
1529 """
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
1530
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1531 @abc.abstractmethod
45811
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1532 def addgroup(
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1533 self,
45811
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1534 deltas,
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1535 linkmapper,
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1536 transaction,
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1537 addrevisioncb=None,
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1538 duplicaterevisioncb=None,
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1539 ):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1540 """Process a series of deltas for storage.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1541
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1542 See the documentation in ``ifilemutation`` for more.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1543 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1544
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1545 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1546 def rawsize(self, rev):
39863
9534fe1e5d28 manifest: add rawsize() proxy (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39856
diff changeset
1547 """Obtain the size of tracked data.
9534fe1e5d28 manifest: add rawsize() proxy (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39856
diff changeset
1548
42795
83d090ebec0c rawdata: update callers in repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42744
diff changeset
1549 Is equivalent to ``len(m.rawdata(node))``.
39863
9534fe1e5d28 manifest: add rawsize() proxy (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39856
diff changeset
1550
9534fe1e5d28 manifest: add rawsize() proxy (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39856
diff changeset
1551 TODO this method is only used by upgrade code and may be removed.
9534fe1e5d28 manifest: add rawsize() proxy (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39856
diff changeset
1552 """
9534fe1e5d28 manifest: add rawsize() proxy (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39856
diff changeset
1553
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1554 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1555 def getstrippoint(self, minlink):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1556 """Find minimum revision that must be stripped to strip a linkrev.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1557
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1558 See the documentation in ``ifilemutation`` for more.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1559 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1560
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1561 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1562 def strip(self, minlink, transaction):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1563 """Remove storage of items starting at a linkrev.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1564
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1565 See the documentation in ``ifilemutation`` for more.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1566 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1567
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1568 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1569 def checksize(self):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1570 """Obtain the expected sizes of backing files.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1571
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1572 TODO this is used by verify and it should not be part of the interface.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1573 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1574
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1575 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1576 def files(self):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1577 """Obtain paths that are backing storage for this manifest.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1578
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1579 TODO this is used by verify and there should probably be a better API
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1580 for this functionality.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1581 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1582
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1583 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1584 def deltaparent(self, rev):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1585 """Obtain the revision that a revision is delta'd against.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1586
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1587 TODO delta encoding is an implementation detail of storage and should
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1588 not be exposed to the storage interface.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1589 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1590
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1591 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1592 def clone(self, tr, dest, **kwargs):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1593 """Clone this instance to another."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1594
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1595 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1596 def clearcaches(self, clear_persisted_data=False):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1597 """Clear any caches associated with this instance."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1598
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1599 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1600 def dirlog(self, d):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1601 """Obtain a manifest storage instance for a tree."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1602
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1603 @abc.abstractmethod
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1604 def add(
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1605 self,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1606 m,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1607 transaction,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1608 link,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1609 p1,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1610 p2,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1611 added,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1612 removed,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1613 readtree=None,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1614 match=None,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1615 ):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1616 """Add a revision to storage.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1617
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1618 ``m`` is an object conforming to ``imanifestdict``.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1619
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1620 ``link`` is the linkrev revision number.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1621
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1622 ``p1`` and ``p2`` are the parent revision numbers.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1623
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1624 ``added`` and ``removed`` are iterables of added and removed paths,
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1625 respectively.
39684
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1626
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1627 ``readtree`` is a function that can be used to read the child tree(s)
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1628 when recursively writing the full tree structure when using
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1629 treemanifets.
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1630
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1631 ``match`` is a matcher that can be used to hint to storage that not all
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1632 paths must be inspected; this is an optimization and can be safely
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1633 ignored. Note that the storage must still be able to reproduce a full
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1634 manifest including files that did not match.
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1635 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1636
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1637 @abc.abstractmethod
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1638 def storageinfo(
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1639 self,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1640 exclusivefiles=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1641 sharedfiles=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1642 revisionscount=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1643 trackedsize=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1644 storedsize=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1645 ):
39874
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1646 """Obtain information about storage for this manifest's data.
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1647
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1648 See ``ifilestorage.storageinfo()`` for a description of this method.
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1649 This one behaves the same way, except for manifest data.
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1650 """
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1651
52508
99ca58c7cd0d interfaces: make `repository.imanifeststorage` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52507
diff changeset
1652 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1653 def get_revlog(self):
50667
32837c7e2e4b revlog: add a `get_revlog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50474
diff changeset
1654 """return an actual revlog instance if any
32837c7e2e4b revlog: add a `get_revlog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50474
diff changeset
1655
32837c7e2e4b revlog: add a `get_revlog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50474
diff changeset
1656 This exist because a lot of code leverage the fact the underlying
32837c7e2e4b revlog: add a `get_revlog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50474
diff changeset
1657 storage is a revlog for optimization, so giving simple way to access
32837c7e2e4b revlog: add a `get_revlog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50474
diff changeset
1658 the revlog instance helps such code.
32837c7e2e4b revlog: add a `get_revlog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50474
diff changeset
1659 """
32837c7e2e4b revlog: add a `get_revlog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50474
diff changeset
1660
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1661
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
1662 class imanifestlog(Protocol):
39268
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39263
diff changeset
1663 """Interface representing a collection of manifest snapshots.
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39263
diff changeset
1664
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39263
diff changeset
1665 Represents the root manifest in a repository.
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39263
diff changeset
1666
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39263
diff changeset
1667 Also serves as a means to access nested tree manifests and to cache
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39263
diff changeset
1668 tree manifests.
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39263
diff changeset
1669 """
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1670
52511
ed70604d6e07 interfaces: convert `repository.imanifestlog` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52509
diff changeset
1671 nodeconstants: NodeConstants
ed70604d6e07 interfaces: convert `repository.imanifestlog` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52509
diff changeset
1672 """nodeconstants used by the current repository."""
ed70604d6e07 interfaces: convert `repository.imanifestlog` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52509
diff changeset
1673
ed70604d6e07 interfaces: convert `repository.imanifestlog` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52509
diff changeset
1674 narrowed: bool
ed70604d6e07 interfaces: convert `repository.imanifestlog` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52509
diff changeset
1675 """True, is the manifest is narrowed by a matcher"""
51837
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1676
52512
196f441ffc93 interfaces: make `repository.imanifestlog` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52511
diff changeset
1677 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1678 def __getitem__(self, node):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1679 """Obtain a manifest instance for a given binary node.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1680
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1681 Equivalent to calling ``self.get('', node)``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1682
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1683 The returned object conforms to the ``imanifestrevisionstored``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1684 interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1685 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1686
52512
196f441ffc93 interfaces: make `repository.imanifestlog` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52511
diff changeset
1687 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1688 def get(self, tree, node, verify=True):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1689 """Retrieve the manifest instance for a given directory and binary node.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1690
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1691 ``node`` always refers to the node of the root manifest (which will be
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1692 the only manifest if flat manifests are being used).
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1693
39263
43387fd2aa1f manifest: rename dir to tree to avoid shadowing built-in
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39262
diff changeset
1694 If ``tree`` is the empty string, the root manifest is returned.
43387fd2aa1f manifest: rename dir to tree to avoid shadowing built-in
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39262
diff changeset
1695 Otherwise the manifest for the specified directory will be returned
43387fd2aa1f manifest: rename dir to tree to avoid shadowing built-in
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39262
diff changeset
1696 (requires tree manifests).
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1697
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1698 If ``verify`` is True, ``LookupError`` is raised if the node is not
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1699 known.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1700
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1701 The returned object conforms to the ``imanifestrevisionstored``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1702 interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1703 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1704
52512
196f441ffc93 interfaces: make `repository.imanifestlog` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52511
diff changeset
1705 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1706 def getstorage(self, tree):
39272
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39269
diff changeset
1707 """Retrieve an interface to storage for a particular tree.
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39269
diff changeset
1708
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39269
diff changeset
1709 If ``tree`` is the empty bytestring, storage for the root manifest will
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39269
diff changeset
1710 be returned. Otherwise storage for a tree manifest is returned.
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39269
diff changeset
1711
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39269
diff changeset
1712 TODO formalize interface for returned object.
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39269
diff changeset
1713 """
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39269
diff changeset
1714
52512
196f441ffc93 interfaces: make `repository.imanifestlog` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52511
diff changeset
1715 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1716 def clearcaches(self, clear_persisted_data: bool = False) -> None:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1717 """Clear caches associated with this collection."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1718
52512
196f441ffc93 interfaces: make `repository.imanifestlog` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52511
diff changeset
1719 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1720 def rev(self, node):
38556
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38532
diff changeset
1721 """Obtain the revision number for a binary node.
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38532
diff changeset
1722
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38532
diff changeset
1723 Raises ``error.LookupError`` if the node is not known.
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38532
diff changeset
1724 """
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38532
diff changeset
1725
52512
196f441ffc93 interfaces: make `repository.imanifestlog` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52511
diff changeset
1726 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1727 def update_caches(self, transaction):
44864
97ebdb192b00 nodemap: also warm manifest nodemap with other caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44665
diff changeset
1728 """update whatever cache are relevant for the used storage."""
97ebdb192b00 nodemap: also warm manifest nodemap with other caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44665
diff changeset
1729
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1730
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
1731 class ilocalrepositoryfilestorage(Protocol):
39780
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1732 """Local repository sub-interface providing access to tracked file storage.
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1733
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1734 This interface defines how a repository accesses storage for a single
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1735 tracked file path.
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1736 """
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1737
52519
ef119f914fc1 localrepo: subclass the new `ilocalrepositoryfilestorage` Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52517
diff changeset
1738 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1739 def file(self, f):
39780
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1740 """Obtain a filelog for a tracked path.
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1741
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1742 The returned type conforms to the ``ifilestorage`` interface.
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1743 """
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1744
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1745
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
1746 class ilocalrepositorymain(Protocol):
39780
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1747 """Main interface for local repositories.
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1748
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1749 This currently captures the reality of things - not how things should be.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1750 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1751
52514
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1752 nodeconstants: NodeConstants
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1753 """Constant nodes matching the hash function used by the repository."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1754
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1755 nullid: bytes
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1756 """null revision for the hash function used by the repository."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1757
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1758 supported: set[bytes]
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1759 """Set of requirements that this repo is capable of opening."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1760
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1761 requirements: set[bytes]
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1762 """Set of requirements this repo uses."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1763
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1764 features: set[bytes]
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1765 """Set of "features" this repository supports.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1766
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1767 A "feature" is a loosely-defined term. It can refer to a feature
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1768 in the classical sense or can describe an implementation detail
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1769 of the repository. For example, a ``readonly`` feature may denote
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1770 the repository as read-only. Or a ``revlogfilestore`` feature may
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1771 denote that the repository is using revlogs for file storage.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1772
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1773 The intent of features is to provide a machine-queryable mechanism
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1774 for repo consumers to test for various repository characteristics.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1775
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1776 Features are similar to ``requirements``. The main difference is that
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1777 requirements are stored on-disk and represent requirements to open the
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1778 repository. Features are more run-time capabilities of the repository
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1779 and more granular capabilities (which may be derived from requirements).
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1780 """
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1781
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1782 filtername: bytes
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1783 """Name of the repoview that is active on this repo."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1784
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1785 vfs_map: Mapping[bytes, Vfs]
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1786 """a bytes-key → vfs mapping used by transaction and others"""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1787
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1788 wvfs: Vfs
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1789 """VFS used to access the working directory."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1790
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1791 vfs: Vfs
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1792 """VFS rooted at the .hg directory.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1793
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1794 Used to access repository data not in the store.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1795 """
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1796
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1797 svfs: Vfs
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1798 """VFS rooted at the store.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1799
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1800 Used to access repository data in the store. Typically .hg/store.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1801 But can point elsewhere if the store is shared.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1802 """
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1803
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1804 root: bytes
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1805 """Path to the root of the working directory."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1806
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1807 path: bytes
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1808 """Path to the .hg directory."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1809
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1810 origroot: bytes
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1811 """The filesystem path that was used to construct the repo."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1812
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1813 auditor: Any
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1814 """A pathauditor for the working directory.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1815
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1816 This checks if a path refers to a nested repository.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1817
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1818 Operates on the filesystem.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1819 """
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1820
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1821 nofsauditor: Any # TODO: add type hints
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1822 """A pathauditor for the working directory.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1823
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1824 This is like ``auditor`` except it doesn't do filesystem checks.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1825 """
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1826
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1827 baseui: Ui
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1828 """Original ui instance passed into constructor."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1829
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1830 ui: Ui
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1831 """Main ui instance for this instance."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1832
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1833 sharedpath: bytes
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1834 """Path to the .hg directory of the repo this repo was shared from."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1835
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1836 store: Any # TODO: add type hints
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1837 """A store instance."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1838
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1839 spath: bytes
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1840 """Path to the store."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1841
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1842 sjoin: Callable # TODO: add type hints
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1843 """Alias to self.store.join."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1844
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1845 cachevfs: Vfs
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1846 """A VFS used to access the cache directory.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1847
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1848 Typically .hg/cache.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1849 """
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1850
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1851 wcachevfs: Vfs
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1852 """A VFS used to access the cache directory dedicated to working copy
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1853
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1854 Typically .hg/wcache.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1855 """
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1856
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1857 filteredrevcache: Any # TODO: add type hints
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1858 """Holds sets of revisions to be filtered."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1859
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1860 names: Any # TODO: add type hints
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1861 """A ``namespaces`` instance."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1862
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1863 filecopiesmode: Any # TODO: add type hints
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1864 """The way files copies should be dealt with in this repo."""
43142
beed7ce61681 sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43077
diff changeset
1865
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1866 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1867 def close(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1868 """Close the handle on this repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1869
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1870 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1871 def peer(self, path=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1872 """Obtain an object conforming to the ``peer`` interface."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1873
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1874 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1875 def unfiltered(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1876 """Obtain an unfiltered/raw view of this repo."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1877
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1878 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1879 def filtered(self, name, visibilityexceptions=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1880 """Obtain a named view of this repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1881
52514
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1882 obsstore: Any # TODO: add type hints
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1883 """A store of obsolescence data."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1884
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1885 changelog: Any # TODO: add type hints
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1886 """A handle on the changelog revlog."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1887
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1888 manifestlog: imanifestlog
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1889 """An instance conforming to the ``imanifestlog`` interface.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1890
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1891 Provides access to manifests for the repository.
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1892 """
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1893
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1894 dirstate: intdirstate.idirstate
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1895 """Working directory state."""
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1896
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1897 narrowpats: Any # TODO: add type hints
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
1898 """Matcher patterns for this repository's narrowspec."""
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1899
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1900 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1901 def narrowmatch(self, match=None, includeexact=False):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1902 """Obtain a matcher for the narrowspec."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1903
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1904 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1905 def setnarrowpats(self, newincludes, newexcludes):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1906 """Define the narrowspec for this repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1907
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1908 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1909 def __getitem__(self, changeid):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1910 """Try to resolve a changectx."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1911
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1912 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1913 def __contains__(self, changeid):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1914 """Whether a changeset exists."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1915
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1916 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1917 def __nonzero__(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1918 """Always returns True."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1919 return True
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1920
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1921 __bool__ = __nonzero__
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1922
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1923 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1924 def __len__(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1925 """Returns the number of changesets in the repo."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1926
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1927 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1928 def __iter__(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1929 """Iterate over revisions in the changelog."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1930
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1931 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1932 def revs(self, expr, *args):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1933 """Evaluate a revset.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1934
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1935 Emits revisions.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1936 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1937
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1938 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1939 def set(self, expr, *args):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1940 """Evaluate a revset.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1941
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1942 Emits changectx instances.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1943 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1944
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1945 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1946 def anyrevs(self, specs, user=False, localalias=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1947 """Find revisions matching one of the given revsets."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1948
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1949 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1950 def url(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1951 """Returns a string representing the location of this repo."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1952
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1953 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1954 def hook(self, name, throw=False, **args):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1955 """Call a hook."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1956
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1957 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1958 def tags(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1959 """Return a mapping of tag to node."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1960
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1961 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1962 def tagtype(self, tagname):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1963 """Return the type of a given tag."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1964
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1965 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1966 def tagslist(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1967 """Return a list of tags ordered by revision."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1968
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1969 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1970 def nodetags(self, node):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1971 """Return the tags associated with a node."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1972
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1973 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1974 def nodebookmarks(self, node):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1975 """Return the list of bookmarks pointing to the specified node."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1976
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1977 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1978 def branchmap(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1979 """Return a mapping of branch to heads in that branch."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1980
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1981 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1982 def revbranchcache(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1983 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1984
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1985 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1986 def register_changeset(self, rev, changelogrevision):
46443
0903d6b9b1df repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents: 45961
diff changeset
1987 """Extension point for caches for new nodes.
0903d6b9b1df repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents: 45961
diff changeset
1988
0903d6b9b1df repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents: 45961
diff changeset
1989 Multiple consumers are expected to need parts of the changelogrevision,
0903d6b9b1df repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents: 45961
diff changeset
1990 so it is provided as optimization to avoid duplicate lookups. A simple
0903d6b9b1df repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents: 45961
diff changeset
1991 cache would be fragile when other revisions are accessed, too."""
0903d6b9b1df repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents: 45961
diff changeset
1992 pass
0903d6b9b1df repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents: 45961
diff changeset
1993
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1994 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1995 def branchtip(self, branchtip, ignoremissing=False):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1996 """Return the tip node for a given branch."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1997
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
1998 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1999 def lookup(self, key):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2000 """Resolve the node for a revision."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2001
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2002 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2003 def lookupbranch(self, key):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2004 """Look up the branch name of the given revision or branch name."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2005
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2006 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2007 def known(self, nodes):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2008 """Determine whether a series of nodes is known.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2009
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2010 Returns a list of bools.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2011 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2012
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2013 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2014 def local(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2015 """Whether the repository is local."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2016 return True
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2017
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2018 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2019 def publishing(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2020 """Whether the repository is a publishing repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2021
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2022 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2023 def cancopy(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2024 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2025
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2026 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2027 def shared(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2028 """The type of shared repository or None."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2029
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2030 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2031 def wjoin(self, f, *insidef):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2032 """Calls self.vfs.reljoin(self.root, f, *insidef)"""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2033
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2034 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2035 def setparents(self, p1, p2):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2036 """Set the parent nodes of the working directory."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2037
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2038 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2039 def filectx(self, path, changeid=None, fileid=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2040 """Obtain a filectx for the given file revision."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2041
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2042 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2043 def getcwd(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2044 """Obtain the current working directory from the dirstate."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2045
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2046 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2047 def pathto(self, f, cwd=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2048 """Obtain the relative path to a file."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2049
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2050 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2051 def adddatafilter(self, name, fltr):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2052 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2053
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2054 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2055 def wread(self, filename):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2056 """Read a file from wvfs, using data filters."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2057
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2058 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2059 def wwrite(self, filename, data, flags, backgroundclose=False, **kwargs):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2060 """Write data to a file in the wvfs, using data filters."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2061
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2062 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2063 def wwritedata(self, filename, data):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2064 """Resolve data for writing to the wvfs, using data filters."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2065
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2066 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2067 def currenttransaction(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2068 """Obtain the current transaction instance or None."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2069
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2070 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2071 def transaction(self, desc, report=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2072 """Open a new transaction to write to the repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2073
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2074 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2075 def undofiles(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2076 """Returns a list of (vfs, path) for files to undo transactions."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2077
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2078 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2079 def recover(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2080 """Roll back an interrupted transaction."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2081
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2082 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2083 def rollback(self, dryrun=False, force=False):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2084 """Undo the last transaction.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2085
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2086 DANGEROUS.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2087 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2088
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2089 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2090 def updatecaches(self, tr=None, full=False, caches=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2091 """Warm repo caches."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2092
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2093 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2094 def invalidatecaches(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2095 """Invalidate cached data due to the repository mutating."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2096
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2097 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2098 def invalidatevolatilesets(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2099 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2100
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2101 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2102 def invalidatedirstate(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2103 """Invalidate the dirstate."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2104
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2105 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2106 def invalidate(self, clearfilecache=False):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2107 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2108
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2109 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2110 def invalidateall(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2111 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2112
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2113 @abc.abstractmethod
52739
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2114 def lock(self, wait=True, steal_from=None):
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2115 """Lock the repository store and return a lock instance.
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2116
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2117 If another lock object is specified through the "steal_from" argument,
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2118 the new lock will reuse the on-disk lock of that "stolen" lock instead
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2119 of creating its own. The "stolen" lock is no longer usable for any
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2120 purpose and won't execute its release callback.
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2121
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2122 That steal_from argument is used during local clone when reloading a
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2123 repository. If we could remove the need for this during copy clone, we
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2124 could remove this function.
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2125 """
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2126
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2127 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2128 def currentlock(self):
50323
6901916458bd localrepo: add a `currentlock` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50281
diff changeset
2129 """Return the lock if it's held or None."""
6901916458bd localrepo: add a `currentlock` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50281
diff changeset
2130
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2131 @abc.abstractmethod
52739
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2132 def wlock(self, wait=True, steal_from=None):
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2133 """Lock the non-store parts of the repository.
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2134
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2135 If another lock object is specified through the "steal_from" argument,
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2136 the new lock will reuse the on-disk lock of that "stolen" lock instead
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2137 of creating its own. The "stolen" lock is no longer usable for any
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2138 purpose and won't execute its release callback.
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2139
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2140 That steal_from argument is used during local clone when reloading a
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2141 repository. If we could remove the need for this during copy clone, we
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2142 could remove this function.
0f2268783c11 clone: explicitly steal lock instead of assigning previous lock
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52679
diff changeset
2143 """
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2144
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2145 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2146 def currentwlock(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2147 """Return the wlock if it's held or None."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2148
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2149 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2150 def checkcommitpatterns(self, wctx, match, status, fail):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2151 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2152
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2153 @abc.abstractmethod
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2154 def commit(
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2155 self,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2156 text=b'',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2157 user=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2158 date=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2159 match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2160 force=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2161 editor=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2162 extra=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2163 ):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2164 """Add a new revision to the repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2165
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2166 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2167 def commitctx(self, ctx, error=False, origctx=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2168 """Commit a commitctx instance to the repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2169
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2170 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2171 def destroying(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2172 """Inform the repository that nodes are about to be destroyed."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2173
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2174 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2175 def destroyed(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2176 """Inform the repository that nodes have been destroyed."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2177
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2178 @abc.abstractmethod
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2179 def status(
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2180 self,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2181 node1=b'.',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2182 node2=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2183 match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2184 ignored=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2185 clean=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2186 unknown=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2187 listsubrepos=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2188 ):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2189 """Convenience method to call repo[x].status()."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2190
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2191 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2192 def addpostdsstatus(self, ps):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2193 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2194
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2195 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2196 def postdsstatus(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2197 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2198
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2199 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2200 def clearpostdsstatus(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2201 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2202
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2203 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2204 def heads(self, start=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2205 """Obtain list of nodes that are DAG heads."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2206
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2207 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2208 def branchheads(self, branch=None, start=None, closed=False):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2209 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2210
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2211 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2212 def branches(self, nodes):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2213 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2214
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2215 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2216 def between(self, pairs):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2217 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2218
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2219 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2220 def checkpush(self, pushop):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2221 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2222
52905
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52755
diff changeset
2223 prepushoutgoinghooks: misc.IHooks
52514
dfb60fb155da interfaces: convert `ilocalrepositorymain` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52512
diff changeset
2224 """util.hooks instance."""
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2225
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2226 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2227 def pushkey(self, namespace, key, old, new):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2228 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2229
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2230 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2231 def listkeys(self, namespace):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2232 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2233
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2234 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2235 def debugwireargs(self, one, two, three=None, four=None, five=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2236 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2237
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2238 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2239 def savecommitmessage(self, text):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2240 pass
39780
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
2241
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2242 @abc.abstractmethod
47097
81eb7091c494 sidedata: add a way of replacing an existing sidedata computer
Rapha?l Gom?s <rgomes@octobus.net>
parents: 47095
diff changeset
2243 def register_sidedata_computer(
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2244 self, kind, category, keys, computer, flags, replace=False
47097
81eb7091c494 sidedata: add a way of replacing an existing sidedata computer
Rapha?l Gom?s <rgomes@octobus.net>
parents: 47095
diff changeset
2245 ):
46726
bc2519513ae0 sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46725
diff changeset
2246 pass
bc2519513ae0 sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46725
diff changeset
2247
52515
c0d9fda9f5f5 interfaces: make `repository.ilocalrepositorymain` methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52514
diff changeset
2248 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2249 def register_wanted_sidedata(self, category):
46726
bc2519513ae0 sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46725
diff changeset
2250 pass
bc2519513ae0 sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46725
diff changeset
2251
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2252
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2253 class completelocalrepository(
52529
3abf9bc10fcc interfaces: mark `completelocalrepository` as a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52528
diff changeset
2254 ilocalrepositorymain,
3abf9bc10fcc interfaces: mark `completelocalrepository` as a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52528
diff changeset
2255 ilocalrepositoryfilestorage,
3abf9bc10fcc interfaces: mark `completelocalrepository` as a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52528
diff changeset
2256 Protocol,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2257 ):
39780
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
2258 """Complete interface for a local repository."""
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2259
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2260
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
2261 class iwireprotocolcommandcacher(Protocol):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2262 """Represents a caching backend for wire protocol commands.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2263
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2264 Wire protocol version 2 supports transparent caching of many commands.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2265 To leverage this caching, servers can activate objects that cache
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2266 command responses. Objects handle both cache writing and reading.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2267 This interface defines how that response caching mechanism works.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2268
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2269 Wire protocol version 2 commands emit a series of objects that are
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2270 serialized and sent to the client. The caching layer exists between
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2271 the invocation of the command function and the sending of its output
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2272 objects to an output layer.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2273
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2274 Instances of this interface represent a binding to a cache that
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2275 can serve a response (in place of calling a command function) and/or
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2276 write responses to a cache for subsequent use.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2277
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2278 When a command request arrives, the following happens with regards
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2279 to this interface:
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2280
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2281 1. The server determines whether the command request is cacheable.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2282 2. If it is, an instance of this interface is spawned.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2283 3. The cacher is activated in a context manager (``__enter__`` is called).
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2284 4. A cache *key* for that request is derived. This will call the
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2285 instance's ``adjustcachekeystate()`` method so the derivation
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2286 can be influenced.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2287 5. The cacher is informed of the derived cache key via a call to
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2288 ``setcachekey()``.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2289 6. The cacher's ``lookup()`` method is called to test for presence of
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2290 the derived key in the cache.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2291 7. If ``lookup()`` returns a hit, that cached result is used in place
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2292 of invoking the command function. ``__exit__`` is called and the instance
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2293 is discarded.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2294 8. The command function is invoked.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2295 9. ``onobject()`` is called for each object emitted by the command
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2296 function.
40279
4821affc154f wireproto: fix incorrect function name in docstring
Connor Sheehan <sheehan@mozilla.com>
parents: 40171
diff changeset
2297 10. After the final object is seen, ``onfinished()`` is called.
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2298 11. ``__exit__`` is called to signal the end of use of the instance.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2299
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2300 Cache *key* derivation can be influenced by the instance.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2301
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2302 Cache keys are initially derived by a deterministic representation of
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2303 the command request. This includes the command name, arguments, protocol
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2304 version, etc. This initial key derivation is performed by CBOR-encoding a
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2305 data structure and feeding that output into a hasher.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2306
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2307 Instances of this interface can influence this initial key derivation
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2308 via ``adjustcachekeystate()``.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2309
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2310 The instance is informed of the derived cache key via a call to
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2311 ``setcachekey()``. The instance must store the key locally so it can
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2312 be consulted on subsequent operations that may require it.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2313
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2314 When constructed, the instance has access to a callable that can be used
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2315 for encoding response objects. This callable receives as its single
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2316 argument an object emitted by a command function. It returns an iterable
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2317 of bytes chunks representing the encoded object. Unless the cacher is
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2318 caching native Python objects in memory or has a way of reconstructing
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2319 the original Python objects, implementations typically call this function
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2320 to produce bytes from the output objects and then store those bytes in
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2321 the cache. When it comes time to re-emit those bytes, they are wrapped
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2322 in a ``wireprototypes.encodedresponse`` instance to tell the output
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2323 layer that they are pre-encoded.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2324
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2325 When receiving the objects emitted by the command function, instances
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2326 can choose what to do with those objects. The simplest thing to do is
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2327 re-emit the original objects. They will be forwarded to the output
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2328 layer and will be processed as if the cacher did not exist.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2329
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2330 Implementations could also choose to not emit objects - instead locally
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2331 buffering objects or their encoded representation. They could then emit
40279
4821affc154f wireproto: fix incorrect function name in docstring
Connor Sheehan <sheehan@mozilla.com>
parents: 40171
diff changeset
2332 a single "coalesced" object when ``onfinished()`` is called. In
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2333 this way, the implementation would function as a filtering layer of
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2334 sorts.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2335
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2336 When caching objects, typically the encoded form of the object will
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2337 be stored. Keep in mind that if the original object is forwarded to
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2338 the output layer, it will need to be encoded there as well. For large
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2339 output, this redundant encoding could add overhead. Implementations
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2340 could wrap the encoded object data in ``wireprototypes.encodedresponse``
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2341 instances to avoid this overhead.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2342 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2343
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
2344 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2345 def __enter__(self):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2346 """Marks the instance as active.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2347
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2348 Should return self.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2349 """
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2350
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
2351 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2352 def __exit__(self, exctype, excvalue, exctb):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2353 """Called when cacher is no longer used.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2354
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2355 This can be used by implementations to perform cleanup actions (e.g.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2356 disconnecting network sockets, aborting a partially cached response.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2357 """
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2358
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
2359 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2360 def adjustcachekeystate(self, state):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2361 """Influences cache key derivation by adjusting state to derive key.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2362
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2363 A dict defining the state used to derive the cache key is passed.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2364
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2365 Implementations can modify this dict to record additional state that
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2366 is wanted to influence key derivation.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2367
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2368 Implementations are *highly* encouraged to not modify or delete
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2369 existing keys.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2370 """
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2371
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
2372 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2373 def setcachekey(self, key):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2374 """Record the derived cache key for this request.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2375
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2376 Instances may mutate the key for internal usage, as desired. e.g.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2377 instances may wish to prepend the repo name, introduce path
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2378 components for filesystem or URL addressing, etc. Behavior is up to
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2379 the cache.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2380
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2381 Returns a bool indicating if the request is cacheable by this
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2382 instance.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2383 """
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2384
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
2385 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2386 def lookup(self):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2387 """Attempt to resolve an entry in the cache.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2388
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2389 The instance is instructed to look for the cache key that it was
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2390 informed about via the call to ``setcachekey()``.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2391
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2392 If there's no cache hit or the cacher doesn't wish to use the cached
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2393 entry, ``None`` should be returned.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2394
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2395 Else, a dict defining the cached result should be returned. The
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2396 dict may have the following keys:
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2397
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2398 objs
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2399 An iterable of objects that should be sent to the client. That
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2400 iterable of objects is expected to be what the command function
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2401 would return if invoked or an equivalent representation thereof.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2402 """
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2403
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
2404 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2405 def onobject(self, obj):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2406 """Called when a new object is emitted from the command function.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2407
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2408 Receives as its argument the object that was emitted from the
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2409 command function.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2410
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2411 This method returns an iterator of objects to forward to the output
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2412 layer. The easiest implementation is a generator that just
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2413 ``yield obj``.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2414 """
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2415
52528
9358d786af24 interfaces: make all methods on any repository Protocol class abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 52526
diff changeset
2416 @abc.abstractmethod
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2417 def onfinished(self):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2418 """Called after all objects have been emitted from the command function.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2419
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2420 Implementations should return an iterator of objects to forward to
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2421 the output layer.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2422
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2423 This method can be a generator.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2424 """