annotate mercurial/interfaces/repository.py @ 52492:48cdbd4d5443

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