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