annotate mercurial/interfaces/repository.py @ 52504:cdd4bc69bfc1

interfaces: convert `imanifestrevisionstored` to a Protocol class This is similar to 1df97507c6b8 for `ipeer`, because the Protocol nature needs to be explicit on each class, as it isn't inherited. While we're here, make the methods abstract. There's some background info on this in f5d134e57f51 and fd200f5bcaea, but in short, the plan is to explicitly subclass this instead of relying on structured typing, and explicit inheritence will see this as a method implementation that returns None at runtime (regardless of how it is typed), instead of a mandatory function for the subclass to supply. The `Protocol` class has `abc.ABCMeta` as the metaclass, so there's nothing more to do with the inheritence list.
author Matt Harbison <matt_harbison@yahoo.com>
date Tue, 10 Dec 2024 21:37:14 -0500
parents 048c11993d6a
children 0c60be5e021a
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.
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
2 # coding: utf-8
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
3 #
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
4 # 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
5 #
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
6 # 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
7 # 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
8
51901
f4733654f144 typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents: 51837
diff changeset
9 from __future__ import annotations
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
10
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
11 import abc
52492
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
12 import typing
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
13
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
14 from typing import (
52492
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
15 Any,
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
16 Collection,
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
17 Protocol,
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
18 )
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
19
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
20 from ..i18n import _
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
21 from .. import error
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
22 from . import util as interfaceutil
33823
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
23
52492
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
24 if typing.TYPE_CHECKING:
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
25 # Almost all mercurial modules are only imported in the type checking phase
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
26 # to avoid circular imports
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
27 from ..utils import (
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
28 urlutil,
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
29 )
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
30
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
31 # TODO: create a Protocol class, since importing uimod here causes a cycle
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
32 # that confuses pytype.
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
33 Ui = Any
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
34
39855
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
35 # Local repository feature string.
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
36
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
37 # 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
38 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
39 # 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
40 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
41 # 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
42 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
43 # 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
44 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
45 # 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
46 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
47 # 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
48 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
49
40048
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
50 REVISION_FLAG_CENSORED = 1 << 15
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
51 REVISION_FLAG_ELLIPSIS = 1 << 14
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
52 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
53 REVISION_FLAG_HASCOPIESINFO = 1 << 12
40048
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
54
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
55 REVISION_FLAGS_KNOWN = (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
56 REVISION_FLAG_CENSORED
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
57 | REVISION_FLAG_ELLIPSIS
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
58 | 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
59 | 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
60 )
40048
8e398628a3f2 repository: define and use revision flag constants
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40028
diff changeset
61
40495
59a870a4ad6e changegroup: refactor emitrevision to use a `deltamode` argument
Boris Feld <boris.feld@octobus.net>
parents: 40390
diff changeset
62 CG_DELTAMODE_STD = b'default'
59a870a4ad6e changegroup: refactor emitrevision to use a `deltamode` argument
Boris Feld <boris.feld@octobus.net>
parents: 40390
diff changeset
63 CG_DELTAMODE_PREV = b'previous'
59a870a4ad6e changegroup: refactor emitrevision to use a `deltamode` argument
Boris Feld <boris.feld@octobus.net>
parents: 40390
diff changeset
64 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
65 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
66
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
67
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
68 ## 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
69 #
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
70 # 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
71
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47237
diff changeset
72 # 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
73 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
74 # 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
75 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
76 # 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
77 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
78 # 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
79 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
80 # 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
81 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
82 # 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
83 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
84 # 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
85 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
86 # 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
87 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
88 # 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
89 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
90 # 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
91 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
92
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 # 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
94 # (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
95 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
96 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
97 }
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
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 # 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
100 # (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
101 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
102 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
103 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
104 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
105 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
106 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
107 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
108 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
109 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
110 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
111 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
112 }
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
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
114 # 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
115 # (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
116 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
117 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
118 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
119
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
120
52493
73a46cef57c9 interfaces: rename `repository.ipeerconnection` to reflect it being private
Matt Harbison <matt_harbison@yahoo.com>
parents: 52492
diff changeset
121 class _ipeerconnection(Protocol):
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
122 """Represents a "connection" to a repository.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
123
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
124 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
125 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
126
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
127 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
128 outside of this module.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
129 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
130
52492
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
131 ui: Ui
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
132 """ui.ui instance"""
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
133
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
134 path: urlutil.path | None
0cfcc276b796 interfaces: convert `repository.ipeerconnection` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52491
diff changeset
135 """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
136
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
137 def url(self):
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
138 """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
139
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
140 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
141 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
142 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
143 data leakage.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
144
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
145 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
146 value.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
147 """
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
148
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
149 def local(self):
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
150 """Returns a local repository instance.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
151
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
152 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
153 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
154 """
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
155
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
156 def canpush(self):
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
157 """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
158
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
159 def close(self):
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
160 """Close the connection to this peer.
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 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
163 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
164 """
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
165
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
166
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
167 class ipeercapabilities(Protocol):
37610
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
168 """Peer sub-interface related to capabilities."""
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
169
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
170 def capable(self, name):
37610
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
171 """Determine support for a named capability.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
172
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
173 Returns ``False`` if capability not supported.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
174
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
175 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
176 if capability support is non-boolean.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
177
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
178 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
179 """
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
180
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
181 def requirecap(self, name, purpose):
37610
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
182 """Require a capability to be present.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
183
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
184 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
185 """
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
186
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
187
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
188 class ipeercommands(Protocol):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
189 """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
190
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
191 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
192 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
193 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
194
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
195 def branchmap(self):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
196 """Obtain heads in named branches.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
197
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
198 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
199 heads on that branch.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
200 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
201
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
202 def capabilities(self):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
203 """Obtain capabilities of the peer.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
204
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
205 Returns a set of string capabilities.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
206 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
207
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
208 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
209 """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
210
60f9602b413e clonebundles: add support for inline (streaming) clonebundles
Mathias De Mare <mathias.de_mare@nokia.com>
parents: 50667
diff changeset
211 Returns a chunkbuffer
60f9602b413e clonebundles: add support for inline (streaming) clonebundles
Mathias De Mare <mathias.de_mare@nokia.com>
parents: 50667
diff changeset
212 """
60f9602b413e clonebundles: add support for inline (streaming) clonebundles
Mathias De Mare <mathias.de_mare@nokia.com>
parents: 50667
diff changeset
213
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
214 def clonebundles(self):
37649
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
215 """Obtains the clone bundles manifest for the repo.
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
216
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
217 Returns the manifest as unparsed bytes.
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
218 """
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
219
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
220 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
221 """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
222
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
223 def getbundle(self, source, **kwargs):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
224 """Obtain remote repository data as a bundle.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
225
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
226 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
227 the peer to the local repository
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
228
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
229 Returns a generator of bundle data.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
230 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
231
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
232 def heads(self):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
233 """Determine all known head revisions in the peer.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
234
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
235 Returns an iterable of binary nodes.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
236 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
237
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
238 def known(self, nodes):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
239 """Determine whether multiple nodes are known.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
240
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
241 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
242
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
243 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
244 at that index is known to the peer.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
245 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
246
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
247 def listkeys(self, namespace):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
248 """Obtain all keys in a pushkey namespace.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
249
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
250 Returns an iterable of key names.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
251 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
252
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
253 def lookup(self, key):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
254 """Resolve a value to a known revision.
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 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
257 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
258
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
259 def pushkey(self, namespace, key, old, new):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
260 """Set a value using the ``pushkey`` protocol.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
261
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
262 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
263 the old and new values for that key.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
264
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
265 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
266 namespace.
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
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
269 def stream_out(self):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
270 """Obtain streaming clone data.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
271
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
272 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
273 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
274
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 unbundle(self, bundle, heads, url):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
276 """Transfer repository data to the peer.
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 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
279
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
280 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
281 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
282
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
283
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
284 class ipeerlegacycommands(Protocol):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
285 """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
286
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
287 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
288 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
289 legacy, the interfaces are split.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
290 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
291
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
292 def between(self, pairs):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
293 """Obtain nodes between pairs of nodes.
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 ``pairs`` is an iterable of node pairs.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
296
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
297 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
298 requested pair.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
299 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
300
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
301 def branches(self, nodes):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
302 """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
303
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
304 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
305 a DAG root or is a merge.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
306
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
307 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
308 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
309
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
310 def changegroup(self, nodes, source):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
311 """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
312
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
313 def changegroupsubset(self, bases, heads, source):
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
314 pass
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
315
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
316
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
317 class ipeercommandexecutor(Protocol):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
318 """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
319
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
320 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
321 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
322 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
323 outstanding requests are waited on.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
324 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
325
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
326 def callcommand(self, name, args):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
327 """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
328
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
329 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
330
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
331 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
332 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
333 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
334
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
335 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
336 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
337 used and the command itself.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
338
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
339 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
340 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
341
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
342 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
343 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
344 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
345 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
346 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
347
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
348 def sendcommands(self):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
349 """Trigger submission of queued command requests.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
350
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
351 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
352 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
353 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
354
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
355 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
356 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
357
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
358 def close(self):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
359 """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
360
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
361 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
362 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
363 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
364 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
365 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
366 to finish.
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 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
369 context manager.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
370
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
371 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
372 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
373
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
374
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
375 class ipeerrequests(Protocol):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
376 """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
377
52494
4cc186255672 interfaces: convert `repository.ipeerrequests` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52493
diff changeset
378 limitedarguments: bool
4cc186255672 interfaces: convert `repository.ipeerrequests` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52493
diff changeset
379 """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
380
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
381 def commandexecutor(self):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
382 """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
383
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
384 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
385 to the peer.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
386
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
387 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
388 requests.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
389
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
390 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
391 (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
392 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
393 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
394 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
395 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
396 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
397 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
398 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
399 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
400 being issued.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
401 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
402
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
403
52495
1df97507c6b8 interfaces: convert `repository.peer` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52494
diff changeset
404 class peer(_ipeerconnection, ipeercapabilities, ipeerrequests, Protocol):
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
405 """Unified interface for peer repositories.
33821
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
406
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
407 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
408 """
33822
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33821
diff changeset
409
52495
1df97507c6b8 interfaces: convert `repository.peer` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52494
diff changeset
410 limitedarguments: bool = False
42200
69921d02daaf peer: introduce a limitedarguments attributes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41340
diff changeset
411
50474
3a2df812e1c7 pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents: 50323
diff changeset
412 def __init__(self, ui, path=None, remotehidden=False):
49863
a6e2a668c746 peer: have a common constructor and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49860
diff changeset
413 self.ui = ui
49864
611ccb631cbc peer: add a `path` attribute to peer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49863
diff changeset
414 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
415
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
416 def capable(self, name):
52463
b2821a846470 tests: enable pytype checking on `mercurial/interfaces` package
Matt Harbison <matt_harbison@yahoo.com>
parents: 52211
diff changeset
417 # TODO: this class should maybe subclass ipeercommands too, otherwise it
b2821a846470 tests: enable pytype checking on `mercurial/interfaces` package
Matt Harbison <matt_harbison@yahoo.com>
parents: 52211
diff changeset
418 # is assuming whatever uses this as a mixin also has this interface.
b2821a846470 tests: enable pytype checking on `mercurial/interfaces` package
Matt Harbison <matt_harbison@yahoo.com>
parents: 52211
diff changeset
419 caps = self.capabilities() # pytype: disable=attribute-error
33823
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
420 if name in caps:
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
421 return True
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
422
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
423 name = b'%s=' % name
33823
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
424 for cap in caps:
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
425 if cap.startswith(name):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
426 return cap[len(name) :]
33823
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
427
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
428 return False
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
429
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
430 def requirecap(self, name, purpose):
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
431 if self.capable(name):
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
432 return
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
433
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
434 raise error.CapabilityError(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
435 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
436 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
437 b'\'%s\' capability'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
438 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
439 % (purpose, name)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
440 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
441
33823
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33822
diff changeset
442
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
443 class iverifyproblem(Protocol):
39847
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
444 """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
445
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
446 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
447 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
448
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
449 Instances are essentially messages associated with severity.
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
450 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
451
52496
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
452 warning: bytes | None
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
453 """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
454
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
455 error: bytes | None
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
456 """Message indicating a fatal problem."""
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
457
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
458 node: bytes | None
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
459 """Revision encountering the problem.
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
460
f968926a4207 interfaces: convert `repository.iverifyproblem` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52495
diff changeset
461 ``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
462 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
463
39877
733db72f0f54 revlog: move revision verification out of verify
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39874
diff changeset
464
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
465 class irevisiondelta(Protocol):
39258
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
466 """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
467
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
468 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
469 with another repository.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
470
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
471 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
472 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
473 are mutually exclusive.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
474
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
475 Typically used for changegroup generation.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
476 """
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
477
52498
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
478 node: bytes
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
479 """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
480
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
481 p1node: bytes
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
482 """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
483
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
484 p2node: bytes
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
485 """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
486
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
487 # 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
488 linknode: bytes | None
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
489 """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
490
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
491 flags: int
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
492 """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
493
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
494 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
495 """
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
496
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
497 basenode: bytes
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
498 """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
499
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
500 ``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
501 a delta.
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
502 """
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
503
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
504 baserevisionsize: int | None
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
505 """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
506
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
507 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
508 """
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
509
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
510 # 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
511 # storageutil.emitrevisions()).
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
512 revision: bytes | None
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
513 """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
514
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
515 delta: bytes | None
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
516 """Delta between ``basenode`` and ``node``.
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
517
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
518 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
519 """
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
520
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
521 sidedata: bytes | None
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
522 """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
523
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
524 protocol_flags: int
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
525 """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
526
2aada52e80d6 interfaces: convert `repository.irevisiondelta` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52496
diff changeset
527 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
528 """
47094
119790e1c67c cg4: introduce protocol flag to signify the presence of sidedata
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46793
diff changeset
529
39258
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38874
diff changeset
530
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
531 class ifilerevisionssequence(Protocol):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
532 """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
533
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
534 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
535 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
536 index metadata.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
537
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
538 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
539 in the index.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
540 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
541
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
542 def __len__(self):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
543 """The total number of revisions."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
544
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
545 def __getitem__(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
546 """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
547
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
548 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
549
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
550 offset+flags
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
551 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
552 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
553 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
554 compressed size
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
555 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
556 needed by the store.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
557 uncompressed size
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
558 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
559 base revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
560 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
561 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
562 link revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
563 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
564 p1 revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
565 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
566 p2 revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
567 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
568 node
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
569 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
570
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
571 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
572 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
573 recent revision.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
574 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
575
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
576 def __contains__(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
577 """Whether a revision number exists."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
578
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
579 def insert(self, i, entry):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
580 """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
581
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
582
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
583 class ifileindex(Protocol):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
584 """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
585
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
586 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
587 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
588
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
589 The index logically consists of:
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
590
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
591 * 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
592 * 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
593 * Metadata to facilitate storage.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
594 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
595
52501
0d4ead4d88bd interfaces: convert `repository.ifileindex` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52498
diff changeset
596 nullid: bytes
0d4ead4d88bd interfaces: convert `repository.ifileindex` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52498
diff changeset
597 """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
598
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
599 def __len__(self):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
600 """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
601
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
602 def __iter__(self):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
603 """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
604
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
605 def hasnode(self, node):
40387
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
606 """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
607
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
608 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
609 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
610 rejected.
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
611
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
612 The null node is never present.
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
613 """
f1a39128da95 filelog: add a hasnode() method (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40279
diff changeset
614
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
615 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
616 """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
617
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
618 def parents(self, node):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
619 """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
620
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
621 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
622 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
623
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
624 def parentrevs(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
625 """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
626
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
627 def rev(self, node):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
628 """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
629
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
630 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
631 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
632
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
633 def node(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
634 """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
635
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
636 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
637 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
638
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
639 def lookup(self, node):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
640 """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
641
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
642 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
643 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
644
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
645 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
646 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
647
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
648 def linkrev(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
649 """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
650
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
651 def iscensored(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
652 """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
653
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
654 def commonancestorsheads(self, node1, node2):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
655 """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
656
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
657 See ``ancestor.commonancestorsheads()``.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
658 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
659
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
660 def descendants(self, revs):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
661 """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
662
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
663 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
664 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
665
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
666 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
667 """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
668
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
669 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
670 ``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
671 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
672 ``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
673 encountered.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
674 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
675
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
676 def children(self, node):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
677 """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
678
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
679 Returns a list of nodes.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
680 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
681
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
682
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
683 class ifiledata(Protocol):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
684 """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
685
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
686 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
687 data for a tracked file.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
688 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
689
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
690 def size(self, rev):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
691 """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
692
39880
d909c44d29e1 filelog: stop proxying rawsize() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39878
diff changeset
693 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
694 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
695
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
696 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
697 """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
698
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
699 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
700 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
701 are not applied.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
702
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
703 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
704 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
705 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
706
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
707 def rawdata(self, node):
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45811
diff changeset
708 """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
709
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
710 def read(self, node):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
711 """Resolve file fulltext data.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
712
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
713 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
714 headers is stripped.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
715 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
716
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
717 def renamed(self, node):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
718 """Obtain copy metadata for a node.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
719
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
720 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
721 (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
722 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
723
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
724 def cmp(self, node, fulltext):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
725 """Compare fulltext to another revision.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
726
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
727 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
728
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
729 This takes copy metadata into account.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
730
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
731 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
732 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
733
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
734 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
735 self,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
736 nodes,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
737 nodesorder=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
738 revisiondata=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
739 assumehaveparentrevisions=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
740 deltamode=CG_DELTAMODE_STD,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
741 ):
39867
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
742 """Produce ``irevisiondelta`` for revisions.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
743
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
744 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
745 ``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
746
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
747 This method is a generator.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
748
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
749 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
750 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
751 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
752 ``nodes`` have also been emitted.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
753
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
754 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
755 ``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
756 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
757
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
758 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
759 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
760 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
761 fulltext is available to the receiver.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
762
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
763 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
764 the following are met:
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
765
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
766 * 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
767 * 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
768 * ``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
769 parent of the node.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
770
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
771 ``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
772 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
773 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
774 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
775 ``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
776 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
777 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
778 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
779 use it with care.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
780
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
781 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
782 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
783
40496
6a917075535a storage: also use `deltamode argument` for ifiledata
Boris Feld <boris.feld@octobus.net>
parents: 40495
diff changeset
784 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
785 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
786 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
787 1st parent.
39867
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
788 """
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
789
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
790
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
791 class ifilemutation(Protocol):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
792 """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
793
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
794 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
795 """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
796
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
797 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
798 and parent nodes.
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 Returns the node that was added.
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 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
803 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
804
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
805 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
806 self,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
807 revisiondata,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
808 transaction,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
809 linkrev,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
810 p1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
811 p2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
812 node=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
813 flags=0,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
814 cachedelta=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
815 ):
46560
f7b61ad3c64a revlog: change addrevision to return the new revision, not node
Joerg Sonnenberger <joerg@bec.de>
parents: 46445
diff changeset
816 """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
817
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
818 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
819
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
820 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
821
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
822 ``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
823 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
824 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
825
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
826 ``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
827 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
828 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
829 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
830 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
831
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
832 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
833 self,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
834 deltas,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
835 linkmapper,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
836 transaction,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
837 addrevisioncb=None,
45811
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
838 duplicaterevisioncb=None,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
839 maybemissingparents=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
840 ):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
841 """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
842
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
843 ``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
844 (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
845 to add.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
846
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
847 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
848 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
849 ``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
850 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
851
46445
711ba0f1057e revlog: decouple caching from addrevision callback for addgroup
Joerg Sonnenberger <joerg@bec.de>
parents: 46443
diff changeset
852 ``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
853 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
854 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
855 Mercurial 5.8.
711ba0f1057e revlog: decouple caching from addrevision callback for addgroup
Joerg Sonnenberger <joerg@bec.de>
parents: 46443
diff changeset
856
46561
7a93b7b3dc2d revlog: change addgroup callbacks to take revision numbers
Joerg Sonnenberger <joerg@bec.de>
parents: 46560
diff changeset
857 ``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
858 ``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
859 pre-existing node.
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
860
40389
1b183edbb68e repository: teach addgroup() to receive data with missing parents
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40387
diff changeset
861 ``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
862 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
863 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
864 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
865
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
866 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
867 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
868 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
869
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
870 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
871 """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
872
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
873 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
874 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
875 result in failure.
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
876
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
877 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
878 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
879 data.
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
880
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
881 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
882 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
883 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
884 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
885 """
a6b3c4c1019f revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39792
diff changeset
886
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
887 def getstrippoint(self, minlink):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
888 """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
889
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
890 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
891 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
892
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
893 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
894 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
895 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
896
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
897 def strip(self, minlink, transaction):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
898 """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
899
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
900 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
901 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
902
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
903 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
904 higher-level deletion API.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
905 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
906
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
907
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
908 class ifilestorage(ifileindex, ifiledata, ifilemutation):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
909 """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
910
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
911 def files(self):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
912 """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
913
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
914 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
915 be a better API for that.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
916 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
917
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
918 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
919 self,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
920 exclusivefiles=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
921 sharedfiles=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
922 revisionscount=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
923 trackedsize=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
924 storedsize=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
925 ):
39874
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
926 """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
927
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
928 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
929 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
930 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
931
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
932 exclusivefiles
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
933 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
934 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
935
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
936 sharedfiles
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
937 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
938 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
939 for other stored entities.
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
940
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
941 revisionscount
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
942 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
943
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
944 trackedsize
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
945 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
946 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
947
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
948 storedsize
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
949 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
950 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
951 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
952
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
953 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
954 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
955 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
956 """
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
957
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
958 def verifyintegrity(self, state):
39847
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
959 """Verifies the integrity of file storage.
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
960
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
961 ``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
962 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
963 primitives.
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
964
39877
733db72f0f54 revlog: move revision verification out of verify
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39874
diff changeset
965 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
966 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
967 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
968 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
969 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
970
39847
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
971 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
972 interface.
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
973 """
97986c9c69d3 verify: start to abstract file verification
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39801
diff changeset
974
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
975
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
976 class idirs(Protocol):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
977 """Interface representing a collection of directories from paths.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
978
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
979 This interface is essentially a derived data structure representing
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
980 directories from a collection of paths.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
981 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
982
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
983 def addpath(self, path):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
984 """Add a path to the collection.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
985
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
986 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
987 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
988
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
989 def delpath(self, path):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
990 """Remove a path from the collection.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
991
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
992 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
993 directory is removed from the collection.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
994 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
995
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
996 def __iter__(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
997 """Iterate over the directories in this collection of paths."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
998
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
999 def __contains__(self, path):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1000 """Whether a specific directory is in this collection."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1001
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1002
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
1003 class imanifestdict(Protocol):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1004 """Interface representing a manifest data structure.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1005
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1006 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
1007 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
1008 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1009
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1010 def __getitem__(self, path):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1011 """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
1012
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1013 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
1014
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1015 Equivalent to ``self.find(path)[0]``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1016 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1017
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1018 def find(self, path):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1019 """Returns the entry for a path in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1020
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1021 Returns a 2-tuple of (node, flags).
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1022
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1023 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
1024 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1025
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1026 def __len__(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1027 """Return the number of entries in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1028
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1029 def __nonzero__(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1030 """Returns True if the manifest has entries, False otherwise."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1031
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1032 __bool__ = __nonzero__
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1033
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1034 def set(self, path, node, flags):
51812
421c9b3f2f4e commit: set whole manifest entries at once (node with its associated flags)
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 51579
diff changeset
1035 """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
1036
421c9b3f2f4e commit: set whole manifest entries at once (node with its associated flags)
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 51579
diff changeset
1037 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
1038 """
421c9b3f2f4e commit: set whole manifest entries at once (node with its associated flags)
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 51579
diff changeset
1039
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1040 def __setitem__(self, path, node):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1041 """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
1042
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1043 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
1044 the new entry.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1045 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1046
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1047 def __contains__(self, path):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1048 """Whether a path exists in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1049
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1050 def __delitem__(self, path):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1051 """Remove a path from the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1052
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1053 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
1054 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1055
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1056 def __iter__(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1057 """Iterate over paths in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1058
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1059 def iterkeys(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1060 """Iterate over paths in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1061
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1062 def keys(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1063 """Obtain a list of paths in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1064
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 filesnotin(self, other, match=None):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1066 """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
1067
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1068 ``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
1069 manifests.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1070
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1071 Returns a set of paths.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1072 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1073
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1074 def dirs(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1075 """Returns an object implementing the ``idirs`` interface."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1076
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1077 def hasdir(self, dir):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1078 """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
1079
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 walk(self, match):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1081 """Generator of paths in manifest satisfying a matcher.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1082
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1083 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
1084 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
1085 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1086
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1087 def diff(self, other, match=None, clean=False):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1088 """Find differences between this manifest and another.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1089
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1090 This manifest is compared to ``other``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1091
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1092 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
1093 matcher and only entries satisfying the matcher are compared.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1094
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1095 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
1096 object.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1097
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1098 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
1099 the form ``((node1, flag1), (node2, flag2))`` where ``(node1, flag1)``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1100 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
1101 are the same for the other manifest.
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
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1104 def setflag(self, path, flag):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1105 """Set the flag value for a given path.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1106
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1107 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
1108 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1109
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1110 def get(self, path, default=None):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1111 """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
1112
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1113 def flags(self, path):
44304
dbbae122f5e4 manifest: remove optional default= argument on flags(path)
Augie Fackler <augie@google.com>
parents: 44073
diff changeset
1114 """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
1115
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1116 def copy(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1117 """Return a copy of this manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1118
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1119 def items(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1120 """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
1121
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1122 def iteritems(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1123 """Identical to items()."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1124
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1125 def iterentries(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1126 """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
1127
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1128 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
1129 flags.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1130 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1131
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1132 def text(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1133 """Obtain the raw data representation for this manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1134
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1135 Result is used to create a manifest revision.
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
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1138 def fastdelta(self, base, changes):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1139 """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
1140
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1141 ``base`` in the raw data representation for another manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1142
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1143 ``changes`` is an iterable of ``(path, to_delete)``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1144
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1145 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
1146 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
1147
948fac24bc39 manifest: introduce new exception to signal unavailability of fastdelta()
Augie Fackler <augie@google.com>
parents: 44386
diff changeset
1148 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
1149 raise ``mercurial.manifest.FastdeltaUnavailable``.
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1150 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1151
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1152
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
1153 class imanifestrevisionbase(Protocol):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1154 """Base interface representing a single revision of a manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1155
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1156 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
1157 as part of a larger interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1158 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1159
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1160 def copy(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1161 """Obtain a copy of this manifest instance.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1162
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1163 Returns an object conforming to the ``imanifestrevisionwritable``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1164 interface. The instance will be associated with the same
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1165 ``imanifestlog`` collection as this instance.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1166 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1167
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1168 def read(self):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1169 """Obtain the parsed manifest data structure.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1170
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1171 The returned object conforms to the ``imanifestdict`` interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1172 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1173
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1174
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1175 class imanifestrevisionstored(imanifestrevisionbase, Protocol):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1176 """Interface representing a manifest revision committed to storage."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1177
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1178 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1179 def node(self) -> bytes:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1180 """The binary node for this manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1181
52502
a1dd484bf33b interfaces: convert `imanifestrevisionstored` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52501
diff changeset
1182 parents: list[bytes]
a1dd484bf33b interfaces: convert `imanifestrevisionstored` from zope `Attribute` attrs
Matt Harbison <matt_harbison@yahoo.com>
parents: 52501
diff changeset
1183 """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
1184
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1185 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1186 def readdelta(self, shallow: bool = False):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1187 """Obtain the manifest data structure representing changes from parent.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1188
51827
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1189 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
1190 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
1191
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1192 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
1193 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
1194 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
1195 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
1196 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
1197
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1198 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
1199 """
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1200
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1201 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1202 def read_any_fast_delta(
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1203 self,
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1204 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
1205 *,
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1206 shallow: bool = False,
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1207 ):
51827
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1208 """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
1209
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1210 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
1211 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
1212 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
1213
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1214 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
1215 be performed instead.
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1216
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1217 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
1218 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
1219 manifest information.
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1220
ca4208713875 manifest: introduce a `read_any_fast_delta` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51812
diff changeset
1221 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
1222 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
1223 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
1224 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
1225 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
1226
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1227 The returned object conforms to the ``imanifestdict`` interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1228 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1229
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1230 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1231 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
1232 """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
1233
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1234 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
1235 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
1236
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1237 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
1238 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
1239 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
1240 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
1241 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
1242
a891347058e7 manifest: introduce a `read_delta_parents` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51828
diff changeset
1243 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
1244
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1245 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1246 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
1247 """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
1248 the repository.
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1249
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1250 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
1251 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
1252
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1253 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
1254 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
1255 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
1256 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
1257 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
1258
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1259 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
1260
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1261 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1262 def readfast(self, shallow: bool = False):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1263 """Calls either ``read()`` or ``readdelta()``.
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 The faster of the two options is called.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1266 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1267
52504
cdd4bc69bfc1 interfaces: convert `imanifestrevisionstored` to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 52503
diff changeset
1268 @abc.abstractmethod
52503
048c11993d6a typing: (mostly) align the signatures of `imanifestrevisionstored` overrides
Matt Harbison <matt_harbison@yahoo.com>
parents: 52502
diff changeset
1269 def find(self, key: bytes) -> tuple[bytes, bytes]:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1270 """Calls self.read().find(key)``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1271
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1272 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
1273 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1274
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1275
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1276 class imanifestrevisionwritable(imanifestrevisionbase):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1277 """Interface representing a manifest revision that can be committed."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1278
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1279 def write(
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1280 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
1281 ):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1282 """Add this revision to storage.
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 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
1285 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
1286 removed paths.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1287
39684
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1288 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
1289 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
1290 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
1291 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
1292
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1293 Returns the binary node of the created revision.
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
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
1297 class imanifeststorage(Protocol):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1298 """Storage interface for manifest data."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1299
46793
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1300 nodeconstants = interfaceutil.Attribute(
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1301 """nodeconstants used by the current repository."""
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1302 )
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1303
39342
57c3864f3aad manifest: make tree a public attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39341
diff changeset
1304 tree = interfaceutil.Attribute(
57c3864f3aad manifest: make tree a public attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39341
diff changeset
1305 """The path to the directory this manifest tracks.
57c3864f3aad manifest: make tree a public attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39341
diff changeset
1306
57c3864f3aad manifest: make tree a public attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39341
diff changeset
1307 The empty bytestring represents the root manifest.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1308 """
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1309 )
39342
57c3864f3aad manifest: make tree a public attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39341
diff changeset
1310
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1311 index = interfaceutil.Attribute(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1312 """An ``ifilerevisionssequence`` instance."""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1313 )
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1314
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1315 opener = interfaceutil.Attribute(
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1316 """VFS opener to use to access underlying files used for storage.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1317
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1318 TODO this is revlog specific and should not be exposed.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1319 """
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1320 )
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1321
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1322 fulltextcache = interfaceutil.Attribute(
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1323 """Dict with cache of fulltexts.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1324
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1325 TODO this doesn't feel appropriate for the storage interface.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1326 """
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1327 )
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1328
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1329 def __len__(self):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1330 """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
1331
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1332 def __iter__(self):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1333 """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
1334
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1335 def rev(self, node):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1336 """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
1337
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1338 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
1339 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1340
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1341 def node(self, rev):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1342 """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
1343
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1344 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
1345 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1346
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1347 def lookup(self, value):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1348 """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
1349
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1350 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
1351 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
1352
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1353 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
1354 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1355
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1356 def parents(self, node):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1357 """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
1358
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1359 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
1360 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1361
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1362 def parentrevs(self, rev):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1363 """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
1364
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1365 def linkrev(self, rev):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1366 """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
1367
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1368 def revision(self, node):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1369 """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
1370
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1371 def rawdata(self, node):
42740
2128c76c8970 rawdata: forward `rawdata` call on `manifestlog`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42620
diff changeset
1372 """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
1373
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1374 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
1375 """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
1376
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1377 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
1378 revision data.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1379 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1380
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1381 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
1382 """Compare fulltext to another revision.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1383
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1384 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
1385 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1386
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1387 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
1388 self,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1389 nodes,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1390 nodesorder=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1391 revisiondata=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1392 assumehaveparentrevisions=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1393 ):
39867
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
1394 """Produce ``irevisiondelta`` describing revisions.
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
1395
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
1396 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
1397 """
5a9ab91e0a45 revlog: new API to emit revision data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39865
diff changeset
1398
45811
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1399 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
1400 self,
45811
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1401 deltas,
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1402 linkmapper,
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1403 transaction,
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1404 addrevisioncb=None,
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1405 duplicaterevisioncb=None,
a5206e71c536 revlog: extend addgroup() with callback for duplicates
Joerg Sonnenberger <joerg@bec.de>
parents: 45671
diff changeset
1406 ):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1407 """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
1408
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1409 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
1410 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1411
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1412 def rawsize(self, rev):
39863
9534fe1e5d28 manifest: add rawsize() proxy (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39856
diff changeset
1413 """Obtain the size of tracked data.
9534fe1e5d28 manifest: add rawsize() proxy (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39856
diff changeset
1414
42795
83d090ebec0c rawdata: update callers in repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42744
diff changeset
1415 Is equivalent to ``len(m.rawdata(node))``.
39863
9534fe1e5d28 manifest: add rawsize() proxy (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39856
diff changeset
1416
9534fe1e5d28 manifest: add rawsize() proxy (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39856
diff changeset
1417 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
1418 """
9534fe1e5d28 manifest: add rawsize() proxy (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39856
diff changeset
1419
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1420 def getstrippoint(self, minlink):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1421 """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
1422
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1423 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
1424 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1425
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1426 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
1427 """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
1428
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1429 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
1430 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1431
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1432 def checksize(self):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1433 """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
1434
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1435 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
1436 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1437
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1438 def files(self):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1439 """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
1440
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1441 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
1442 for this functionality.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1443 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1444
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1445 def deltaparent(self, rev):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1446 """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
1447
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1448 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
1449 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
1450 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1451
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1452 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
1453 """Clone this instance to another."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1454
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1455 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
1456 """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
1457
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1458 def dirlog(self, d):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1459 """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
1460
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1461 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
1462 self,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1463 m,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1464 transaction,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1465 link,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1466 p1,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1467 p2,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1468 added,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1469 removed,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1470 readtree=None,
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1471 match=None,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1472 ):
39341
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1473 """Add a revision to storage.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1474
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1475 ``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
1476
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1477 ``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
1478
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1479 ``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
1480
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1481 ``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
1482 respectively.
39684
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1483
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1484 ``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
1485 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
1486 treemanifets.
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1487
24870f1be088 narrow: when writing treemanifests, skip inspecting directories outside narrow
spectral <spectral@google.com>
parents: 39342
diff changeset
1488 ``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
1489 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
1490 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
1491 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
1492 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39272
diff changeset
1493
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1494 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
1495 self,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1496 exclusivefiles=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1497 sharedfiles=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1498 revisionscount=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1499 trackedsize=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1500 storedsize=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1501 ):
39874
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1502 """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
1503
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1504 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
1505 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
1506 """
14e500b58263 revlog: add method for obtaining storage info (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39872
diff changeset
1507
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1508 def get_revlog(self):
50667
32837c7e2e4b revlog: add a `get_revlog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50474
diff changeset
1509 """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
1510
32837c7e2e4b revlog: add a `get_revlog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50474
diff changeset
1511 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
1512 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
1513 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
1514 """
32837c7e2e4b revlog: add a `get_revlog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50474
diff changeset
1515
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1516
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
1517 class imanifestlog(Protocol):
39268
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39263
diff changeset
1518 """Interface representing a collection of manifest snapshots.
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39263
diff changeset
1519
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39263
diff changeset
1520 Represents the root manifest in a repository.
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39263
diff changeset
1521
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39263
diff changeset
1522 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
1523 tree manifests.
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39263
diff changeset
1524 """
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1525
46793
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1526 nodeconstants = interfaceutil.Attribute(
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1527 """nodeconstants used by the current repository."""
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1528 )
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1529
51837
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1530 narrowed = interfaceutil.Attribute(
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1531 """True, is the manifest is narrowed by a matcher"""
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1532 )
bcb825bf0c5e manifest: add a read_delta_new_entries method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 51833
diff changeset
1533
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1534 def __getitem__(self, node):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1535 """Obtain a manifest instance for a given binary node.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1536
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1537 Equivalent to calling ``self.get('', node)``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1538
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1539 The returned object conforms to the ``imanifestrevisionstored``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1540 interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1541 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1542
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1543 def get(self, tree, node, verify=True):
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1544 """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
1545
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1546 ``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
1547 the only manifest if flat manifests are being used).
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1548
39263
43387fd2aa1f manifest: rename dir to tree to avoid shadowing built-in
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39262
diff changeset
1549 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
1550 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
1551 (requires tree manifests).
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1552
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1553 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
1554 known.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1555
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1556 The returned object conforms to the ``imanifestrevisionstored``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1557 interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1558 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1559
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1560 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
1561 """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
1562
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39269
diff changeset
1563 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
1564 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
1565
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39269
diff changeset
1566 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
1567 """
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39269
diff changeset
1568
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 clearcaches(self, clear_persisted_data: bool = False) -> None:
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1570 """Clear caches associated with this collection."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1571
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1572 def rev(self, node):
38556
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38532
diff changeset
1573 """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
1574
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38532
diff changeset
1575 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
1576 """
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38532
diff changeset
1577
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1578 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
1579 """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
1580
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1581
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
1582 class ilocalrepositoryfilestorage(Protocol):
39780
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1583 """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
1584
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1585 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
1586 tracked file path.
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1587 """
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1588
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1589 def file(self, f):
39780
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1590 """Obtain a filelog for a tracked path.
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1591
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1592 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
1593 """
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1594
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1595
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
1596 class ilocalrepositorymain(Protocol):
39780
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
1597 """Main interface for local repositories.
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1598
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1599 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
1600 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1601
46793
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1602 nodeconstants = interfaceutil.Attribute(
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1603 """Constant nodes matching the hash function used by the repository."""
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1604 )
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1605 nullid = interfaceutil.Attribute(
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1606 """null revision for the hash function used by the repository."""
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1607 )
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46726
diff changeset
1608
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1609 supported = interfaceutil.Attribute(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1610 """Set of requirements that this repo is capable of opening."""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1611 )
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1612
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1613 requirements = interfaceutil.Attribute(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1614 """Set of requirements this repo uses."""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1615 )
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1616
39855
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1617 features = interfaceutil.Attribute(
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1618 """Set of "features" this repository supports.
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1619
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1620 A "feature" is a loosely-defined term. It can refer to a feature
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1621 in the classical sense or can describe an implementation detail
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1622 of the repository. For example, a ``readonly`` feature may denote
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1623 the repository as read-only. Or a ``revlogfilestore`` feature may
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1624 denote that the repository is using revlogs for file storage.
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1625
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1626 The intent of features is to provide a machine-queryable mechanism
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1627 for repo consumers to test for various repository characteristics.
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1628
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1629 Features are similar to ``requirements``. The main difference is that
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1630 requirements are stored on-disk and represent requirements to open the
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1631 repository. Features are more run-time capabilities of the repository
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1632 and more granular capabilities (which may be derived from requirements).
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1633 """
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1634 )
39855
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1635
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1636 filtername = interfaceutil.Attribute(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1637 """Name of the repoview that is active on this repo."""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1638 )
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1639
50281
f34887316f1f undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49865
diff changeset
1640 vfs_map = interfaceutil.Attribute(
f34887316f1f undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49865
diff changeset
1641 """a bytes-key → vfs mapping used by transaction and others"""
f34887316f1f undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49865
diff changeset
1642 )
f34887316f1f undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49865
diff changeset
1643
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1644 wvfs = interfaceutil.Attribute(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1645 """VFS used to access the working directory."""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1646 )
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1647
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1648 vfs = interfaceutil.Attribute(
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1649 """VFS rooted at the .hg directory.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1650
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1651 Used to access repository data not in the store.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1652 """
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1653 )
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1654
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1655 svfs = interfaceutil.Attribute(
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1656 """VFS rooted at the store.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1657
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1658 Used to access repository data in the store. Typically .hg/store.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1659 But can point elsewhere if the store is shared.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1660 """
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1661 )
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1662
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1663 root = interfaceutil.Attribute(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1664 """Path to the root of the working directory."""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1665 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1666
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1667 path = interfaceutil.Attribute("""Path to the .hg directory.""")
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1668
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1669 origroot = interfaceutil.Attribute(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1670 """The filesystem path that was used to construct the repo."""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1671 )
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1672
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1673 auditor = interfaceutil.Attribute(
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1674 """A pathauditor for the working directory.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1675
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1676 This checks if a path refers to a nested repository.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1677
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1678 Operates on the filesystem.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1679 """
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1680 )
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1681
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1682 nofsauditor = interfaceutil.Attribute(
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1683 """A pathauditor for the working directory.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1684
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1685 This is like ``auditor`` except it doesn't do filesystem checks.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1686 """
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1687 )
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1688
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1689 baseui = interfaceutil.Attribute(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1690 """Original ui instance passed into constructor."""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1691 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1692
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1693 ui = interfaceutil.Attribute("""Main ui instance for this instance.""")
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1694
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1695 sharedpath = interfaceutil.Attribute(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1696 """Path to the .hg directory of the repo this repo was shared from."""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1697 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1698
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1699 store = interfaceutil.Attribute("""A store instance.""")
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1700
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1701 spath = interfaceutil.Attribute("""Path to the store.""")
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1702
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1703 sjoin = interfaceutil.Attribute("""Alias to self.store.join.""")
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1704
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1705 cachevfs = interfaceutil.Attribute(
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1706 """A VFS used to access the cache directory.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1707
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1708 Typically .hg/cache.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1709 """
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1710 )
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1711
40824
e1c3a2e9df59 repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents: 40497
diff changeset
1712 wcachevfs = interfaceutil.Attribute(
e1c3a2e9df59 repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents: 40497
diff changeset
1713 """A VFS used to access the cache directory dedicated to working copy
e1c3a2e9df59 repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents: 40497
diff changeset
1714
e1c3a2e9df59 repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents: 40497
diff changeset
1715 Typically .hg/wcache.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1716 """
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1717 )
40824
e1c3a2e9df59 repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents: 40497
diff changeset
1718
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1719 filteredrevcache = interfaceutil.Attribute(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1720 """Holds sets of revisions to be filtered."""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1721 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1722
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1723 names = interfaceutil.Attribute("""A ``namespaces`` instance.""")
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1724
43142
beed7ce61681 sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43077
diff changeset
1725 filecopiesmode = interfaceutil.Attribute(
beed7ce61681 sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43077
diff changeset
1726 """The way files copies should be dealt with in this repo."""
beed7ce61681 sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43077
diff changeset
1727 )
beed7ce61681 sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43077
diff changeset
1728
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1729 def close(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1730 """Close the handle on this repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1731
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1732 def peer(self, path=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1733 """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
1734
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1735 def unfiltered(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1736 """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
1737
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1738 def filtered(self, name, visibilityexceptions=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1739 """Obtain a named view of this repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1740
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1741 obsstore = interfaceutil.Attribute("""A store of obsolescence data.""")
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1742
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1743 changelog = interfaceutil.Attribute("""A handle on the changelog revlog.""")
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1744
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1745 manifestlog = interfaceutil.Attribute(
38532
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1746 """An instance conforming to the ``imanifestlog`` interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1747
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38513
diff changeset
1748 Provides access to manifests for the repository.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1749 """
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1750 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1751
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1752 dirstate = interfaceutil.Attribute("""Working directory state.""")
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1753
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1754 narrowpats = interfaceutil.Attribute(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1755 """Matcher patterns for this repository's narrowspec."""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1756 )
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1757
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1758 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
1759 """Obtain a matcher for the narrowspec."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1760
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1761 def setnarrowpats(self, newincludes, newexcludes):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1762 """Define the narrowspec for this repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1763
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1764 def __getitem__(self, changeid):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1765 """Try to resolve a changectx."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1766
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1767 def __contains__(self, changeid):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1768 """Whether a changeset exists."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1769
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1770 def __nonzero__(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1771 """Always returns True."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1772 return True
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1773
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1774 __bool__ = __nonzero__
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1775
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1776 def __len__(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1777 """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
1778
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1779 def __iter__(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1780 """Iterate over revisions in the changelog."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1781
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1782 def revs(self, expr, *args):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1783 """Evaluate a revset.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1784
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1785 Emits revisions.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1786 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1787
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1788 def set(self, expr, *args):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1789 """Evaluate a revset.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1790
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1791 Emits changectx instances.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1792 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1793
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1794 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
1795 """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
1796
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1797 def url(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1798 """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
1799
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1800 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
1801 """Call a hook."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1802
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1803 def tags(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1804 """Return a mapping of tag to node."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1805
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1806 def tagtype(self, tagname):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1807 """Return the type of a given tag."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1808
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1809 def tagslist(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1810 """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
1811
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1812 def nodetags(self, node):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1813 """Return the tags associated with a node."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1814
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1815 def nodebookmarks(self, node):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1816 """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
1817
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1818 def branchmap(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1819 """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
1820
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1821 def revbranchcache(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1822 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1823
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1824 def register_changeset(self, rev, changelogrevision):
46443
0903d6b9b1df repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents: 45961
diff changeset
1825 """Extension point for caches for new nodes.
0903d6b9b1df repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents: 45961
diff changeset
1826
0903d6b9b1df repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents: 45961
diff changeset
1827 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
1828 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
1829 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
1830 pass
0903d6b9b1df repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents: 45961
diff changeset
1831
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1832 def branchtip(self, branchtip, ignoremissing=False):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1833 """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
1834
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1835 def lookup(self, key):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1836 """Resolve the node for a revision."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1837
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1838 def lookupbranch(self, key):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1839 """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
1840
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1841 def known(self, nodes):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1842 """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
1843
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1844 Returns a list of bools.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1845 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1846
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1847 def local(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1848 """Whether the repository is local."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1849 return True
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1850
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1851 def publishing(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1852 """Whether the repository is a publishing repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1853
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1854 def cancopy(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1855 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1856
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1857 def shared(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1858 """The type of shared repository or None."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1859
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1860 def wjoin(self, f, *insidef):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1861 """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
1862
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1863 def setparents(self, p1, p2):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1864 """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
1865
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1866 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
1867 """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
1868
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1869 def getcwd(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1870 """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
1871
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1872 def pathto(self, f, cwd=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1873 """Obtain the relative path to a file."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1874
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 adddatafilter(self, name, fltr):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1876 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1877
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1878 def wread(self, filename):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1879 """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
1880
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1881 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
1882 """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
1883
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1884 def wwritedata(self, filename, data):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1885 """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
1886
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1887 def currenttransaction(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1888 """Obtain the current transaction instance or None."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1889
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1890 def transaction(self, desc, report=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1891 """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
1892
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1893 def undofiles(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1894 """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
1895
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1896 def recover(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1897 """Roll back an interrupted transaction."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1898
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1899 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
1900 """Undo the last transaction.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1901
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1902 DANGEROUS.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1903 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1904
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 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
1906 """Warm repo caches."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1907
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1908 def invalidatecaches(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1909 """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
1910
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1911 def invalidatevolatilesets(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1912 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1913
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1914 def invalidatedirstate(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1915 """Invalidate the dirstate."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1916
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 invalidate(self, clearfilecache=False):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1918 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1919
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1920 def invalidateall(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1921 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1922
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1923 def lock(self, wait=True):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1924 """Lock the repository store and return a lock instance."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1925
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1926 def currentlock(self):
50323
6901916458bd localrepo: add a `currentlock` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50281
diff changeset
1927 """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
1928
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1929 def wlock(self, wait=True):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1930 """Lock the non-store parts of the repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1931
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 currentwlock(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1933 """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
1934
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1935 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
1936 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1937
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1938 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
1939 self,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1940 text=b'',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1941 user=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1942 date=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1943 match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1944 force=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1945 editor=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1946 extra=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1947 ):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1948 """Add a new revision to the repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1949
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 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
1951 """Commit a commitctx instance to the repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1952
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1953 def destroying(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1954 """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
1955
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1956 def destroyed(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1957 """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
1958
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1959 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
1960 self,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1961 node1=b'.',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1962 node2=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1963 match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1964 ignored=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1965 clean=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1966 unknown=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1967 listsubrepos=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1968 ):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1969 """Convenience method to call repo[x].status()."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1970
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1971 def addpostdsstatus(self, ps):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1972 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1973
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 postdsstatus(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1975 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1976
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1977 def clearpostdsstatus(self):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1978 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1979
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1980 def heads(self, start=None):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1981 """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
1982
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1983 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
1984 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1985
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 branches(self, nodes):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1987 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1988
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1989 def between(self, pairs):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1990 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1991
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1992 def checkpush(self, pushop):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1993 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1994
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
1995 prepushoutgoinghooks = interfaceutil.Attribute("""util.hooks instance.""")
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1996
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
1997 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
1998 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
1999
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2000 def listkeys(self, namespace):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2001 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2002
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 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
2004 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2005
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2006 def savecommitmessage(self, text):
37183
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33823
diff changeset
2007 pass
39780
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
2008
47097
81eb7091c494 sidedata: add a way of replacing an existing sidedata computer
Rapha?l Gom?s <rgomes@octobus.net>
parents: 47095
diff changeset
2009 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
2010 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
2011 ):
46726
bc2519513ae0 sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46725
diff changeset
2012 pass
bc2519513ae0 sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46725
diff changeset
2013
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 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
2015 pass
bc2519513ae0 sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46725
diff changeset
2016
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2017
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2018 class completelocalrepository(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2019 ilocalrepositorymain, ilocalrepositoryfilestorage
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2020 ):
39780
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39716
diff changeset
2021 """Complete interface for a local repository."""
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2022
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2023
52474
26dd402c3497 interfaces: convert the repository zope interfaces to Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52463
diff changeset
2024 class iwireprotocolcommandcacher(Protocol):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2025 """Represents a caching backend for wire protocol commands.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2026
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2027 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
2028 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
2029 command responses. Objects handle both cache writing and reading.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2030 This interface defines how that response caching mechanism works.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2031
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2032 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
2033 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
2034 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
2035 objects to an output layer.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2036
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2037 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
2038 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
2039 write responses to a cache for subsequent use.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2040
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2041 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
2042 to this interface:
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2043
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2044 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
2045 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
2046 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
2047 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
2048 instance's ``adjustcachekeystate()`` method so the derivation
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2049 can be influenced.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2050 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
2051 ``setcachekey()``.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2052 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
2053 the derived key in the cache.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2054 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
2055 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
2056 is discarded.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2057 8. The command function is invoked.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2058 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
2059 function.
40279
4821affc154f wireproto: fix incorrect function name in docstring
Connor Sheehan <sheehan@mozilla.com>
parents: 40171
diff changeset
2060 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
2061 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
2062
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2063 Cache *key* derivation can be influenced by the instance.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2064
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2065 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
2066 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
2067 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
2068 data structure and feeding that output into a hasher.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2069
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2070 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
2071 via ``adjustcachekeystate()``.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2072
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2073 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
2074 ``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
2075 be consulted on subsequent operations that may require it.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2076
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2077 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
2078 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
2079 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
2080 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
2081 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
2082 the original Python objects, implementations typically call this function
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2083 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
2084 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
2085 in a ``wireprototypes.encodedresponse`` instance to tell the output
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2086 layer that they are pre-encoded.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2087
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2088 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
2089 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
2090 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
2091 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
2092
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2093 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
2094 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
2095 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
2096 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
2097 sorts.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2098
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2099 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
2100 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
2101 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
2102 output, this redundant encoding could add overhead. Implementations
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2103 could wrap the encoded object data in ``wireprototypes.encodedresponse``
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2104 instances to avoid this overhead.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2105 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43032
diff changeset
2106
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2107 def __enter__(self):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2108 """Marks the instance as active.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2109
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2110 Should return self.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2111 """
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2112
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2113 def __exit__(self, exctype, excvalue, exctb):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2114 """Called when cacher is no longer used.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2115
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2116 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
2117 disconnecting network sockets, aborting a partially cached response.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2118 """
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2119
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2120 def adjustcachekeystate(self, state):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2121 """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
2122
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2123 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
2124
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2125 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
2126 is wanted to influence key derivation.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2127
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2128 Implementations are *highly* encouraged to not modify or delete
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2129 existing keys.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2130 """
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2131
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2132 def setcachekey(self, key):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2133 """Record the derived cache key for this request.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2134
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2135 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
2136 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
2137 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
2138 the cache.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2139
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2140 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
2141 instance.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2142 """
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2143
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2144 def lookup(self):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2145 """Attempt to resolve an entry in the cache.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2146
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2147 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
2148 informed about via the call to ``setcachekey()``.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2149
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2150 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
2151 entry, ``None`` should be returned.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2152
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2153 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
2154 dict may have the following keys:
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2155
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2156 objs
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2157 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
2158 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
2159 would return if invoked or an equivalent representation thereof.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2160 """
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2161
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2162 def onobject(self, obj):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2163 """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
2164
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2165 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
2166 command function.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2167
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2168 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
2169 layer. The easiest implementation is a generator that just
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2170 ``yield obj``.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2171 """
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2172
52475
c1674551c109 interfaces: add the missing `self` arg to the repository Protocol classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52474
diff changeset
2173 def onfinished(self):
40022
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2174 """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
2175
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2176 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
2177 the output layer.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2178
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2179 This method can be a generator.
c537144fdbef wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40003
diff changeset
2180 """