mercurial/interfaces/dirstate.py
author Matt Harbison <matt_harbison@yahoo.com>
Mon, 09 Dec 2024 00:21:38 -0500
changeset 52452 9d79ffeed7c0
parent 52431 2c8c46c3c401
child 52507 8820c991aee4
permissions -rw-r--r--
typing: use the `Status` protocol wherever `scmutil.status` was being used This likely isn't everything, but these were all of the places the latter was referenced in the generated *.pyi files, plus a few cases that were inferred as `Any`, but found in a module that was being changed anyway. We should figure out some sort of consistency as far as naming these Protocol classes (stdlib ones tend to be CamelCase and imported directly). The current convention of `from xxx.interfaces import foo as ifoo` is a little clever, but a little annoying to type out. Also, this package is likely to grow beyond just Protocol classes, where treating the types as interfaces is wrong (e.g. a theoretical `NodeT` type to represent the binary form of a node, instead of treating that and the incompatible hex form as both bytes). But that's a project for another day.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51859
f4733654f144 typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents: 51270
diff changeset
     1
from __future__ import annotations
f4733654f144 typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents: 51270
diff changeset
     2
52431
2c8c46c3c401 interfaces: mark a few dirstate methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 51925
diff changeset
     3
import abc
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
     4
import contextlib
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
     5
import os
51919
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
     6
import typing
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
     7
51917
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
     8
from typing import (
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
     9
    Any,
51919
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
    10
    Callable,
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    11
    Dict,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    12
    Iterable,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    13
    Iterator,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    14
    List,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    15
    Optional,
51917
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    16
    Protocol,
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    17
    Tuple,
51917
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    18
)
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    19
51919
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
    20
if typing.TYPE_CHECKING:
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
    21
    # Almost all mercurial modules are only imported in the type checking phase
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
    22
    # to avoid circular imports
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
    23
    from .. import (
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
    24
        match as matchmod,
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    25
        transaction as txnmod,
51919
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
    26
    )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43008
diff changeset
    27
52452
9d79ffeed7c0 typing: use the `Status` protocol wherever `scmutil.status` was being used
Matt Harbison <matt_harbison@yahoo.com>
parents: 52431
diff changeset
    28
    from . import status as istatus
9d79ffeed7c0 typing: use the `Status` protocol wherever `scmutil.status` was being used
Matt Harbison <matt_harbison@yahoo.com>
parents: 52431
diff changeset
    29
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    30
    # TODO: finish adding type hints
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    31
    AddParentChangeCallbackT = Callable[
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    32
        ["idirstate", Tuple[Any, Any], Tuple[Any, Any]], Any
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    33
    ]
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    34
    """The callback type for dirstate.addparentchangecallback()."""
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    35
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    36
    # TODO: add a Protocol for dirstatemap.DirStateItem? (It is
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    37
    #  conditionalized with python or rust implementations.  Also,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    38
    #  git.dirstate needs to yield non-None from ``items()``.)
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    39
    DirstateItemT = Any  # dirstatemap.DirstateItem
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    40
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    41
    IgnoreFileAndLineT = Tuple[Optional[bytes], int, bytes]
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    42
    """The return type of dirstate._ignorefileandline(), which holds
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    43
    ``(file, lineno, originalline)``.
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    44
    """
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    45
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    46
    FlagFuncFallbackT = Callable[[], "FlagFuncReturnT"]
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    47
    """The type for the dirstate.flagfunc() fallback function."""
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    48
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    49
    FlagFuncReturnT = Callable[[bytes], bytes]
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    50
    """The return type of dirstate.flagfunc()."""
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    51
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    52
    # TODO: verify and complete this- it came from a pytype *.pyi file
52452
9d79ffeed7c0 typing: use the `Status` protocol wherever `scmutil.status` was being used
Matt Harbison <matt_harbison@yahoo.com>
parents: 52431
diff changeset
    53
    StatusReturnT = Tuple[Any, istatus.Status, Any]
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    54
    """The return type of dirstate.status()."""
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    55
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    56
    # TODO: probably doesn't belong here.
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    57
    TransactionT = txnmod.transaction
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    58
    """The type for a transaction used with dirstate.
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    59
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    60
    This is meant to help callers avoid having to remember to delay the import
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    61
    of the transaction module.
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    62
    """
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    63
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    64
    # TODO: The value can also be mercurial.osutil.stat
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    65
    WalkReturnT = Dict[bytes, Optional[os.stat_result]]
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    66
    """The return type of dirstate.walk().
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    67
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    68
    The matched files are keyed in the dictionary, mapped to a stat-like object
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    69
    if the file exists.
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    70
    """
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
    71
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
    72
51917
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    73
class idirstate(Protocol):
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    74
    # TODO: convert these constructor args to fields?
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    75
    # def __init__(
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    76
    #     self,
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    77
    #     opener,
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    78
    #     ui,
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    79
    #     root,
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    80
    #     validate,
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    81
    #     sparsematchfn,
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    82
    #     nodeconstants,
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    83
    #     use_dirstate_v2,
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    84
    #     use_tracked_hint=False,
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    85
    # ):
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    86
    #     """Create a new dirstate object.
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    87
    #
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    88
    #     opener is an open()-like callable that can be used to open the
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    89
    #     dirstate file; root is the root of the directory tracked by
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    90
    #     the dirstate.
382d9629cede interfaces: convert the dirstate zope interface to a Protocol class
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    91
    #     """
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
    92
42929
97b79354e9f0 idirstate: group private methods and attrs that are in the interface
Augie Fackler <augie@google.com>
parents: 42928
diff changeset
    93
    # TODO: all these private methods and attributes should be made
97b79354e9f0 idirstate: group private methods and attrs that are in the interface
Augie Fackler <augie@google.com>
parents: 42928
diff changeset
    94
    # public or removed from the interface.
51919
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
    95
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
    96
    # TODO: decorate with `@rootcache(b'.hgignore')` like dirstate class?
51924
3688a984134b interfaces: change a couple of dirstate fields to `@property`
Matt Harbison <matt_harbison@yahoo.com>
parents: 51919
diff changeset
    97
    @property
3688a984134b interfaces: change a couple of dirstate fields to `@property`
Matt Harbison <matt_harbison@yahoo.com>
parents: 51919
diff changeset
    98
    def _ignore(self) -> matchmod.basematcher:
3688a984134b interfaces: change a couple of dirstate fields to `@property`
Matt Harbison <matt_harbison@yahoo.com>
parents: 51919
diff changeset
    99
        """Matcher for ignored files."""
51919
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   100
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   101
    @property
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   102
    def is_changing_any(self) -> bool:
50023
e1cff85484e2 dirstate: introduce a `is_changing_any` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50022
diff changeset
   103
        """True if any changes in progress."""
51919
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   104
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   105
    @property
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   106
    def is_changing_parents(self) -> bool:
50022
e333cc169c45 dirstate: rename `pendingparentchange` to `is_changing_parents`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
   107
        """True if parents changes in progress."""
51919
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   108
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   109
    @property
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   110
    def is_changing_files(self) -> bool:
50026
3550e4a88ccd dirstate: add a context for tracking files change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50023
diff changeset
   111
        """True if file tracking changes in progress."""
42929
97b79354e9f0 idirstate: group private methods and attrs that are in the interface
Augie Fackler <augie@google.com>
parents: 42928
diff changeset
   112
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   113
    def _ignorefiles(self) -> List[bytes]:
42929
97b79354e9f0 idirstate: group private methods and attrs that are in the interface
Augie Fackler <augie@google.com>
parents: 42928
diff changeset
   114
        """Return a list of files containing patterns to ignore."""
97b79354e9f0 idirstate: group private methods and attrs that are in the interface
Augie Fackler <augie@google.com>
parents: 42928
diff changeset
   115
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   116
    def _ignorefileandline(self, f: bytes) -> IgnoreFileAndLineT:
43787
be8552f25cab cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents: 43077
diff changeset
   117
        """Given a file `f`, return the ignore file and line that ignores it."""
42929
97b79354e9f0 idirstate: group private methods and attrs that are in the interface
Augie Fackler <augie@google.com>
parents: 42928
diff changeset
   118
51919
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   119
    # TODO: decorate with `@util.propertycache` like dirstate class?
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   120
    #  (can't because circular import)
51924
3688a984134b interfaces: change a couple of dirstate fields to `@property`
Matt Harbison <matt_harbison@yahoo.com>
parents: 51919
diff changeset
   121
    @property
3688a984134b interfaces: change a couple of dirstate fields to `@property`
Matt Harbison <matt_harbison@yahoo.com>
parents: 51919
diff changeset
   122
    def _checklink(self) -> bool:
3688a984134b interfaces: change a couple of dirstate fields to `@property`
Matt Harbison <matt_harbison@yahoo.com>
parents: 51919
diff changeset
   123
        """Callable for checking symlinks."""  # TODO: this comment looks stale
51919
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   124
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   125
    # TODO: decorate with `@util.propertycache` like dirstate class?
b455dfddfed0 interfaces: convert the zope `Attribute` attrs to regular fields
Matt Harbison <matt_harbison@yahoo.com>
parents: 51918
diff changeset
   126
    #  (can't because circular import)
51924
3688a984134b interfaces: change a couple of dirstate fields to `@property`
Matt Harbison <matt_harbison@yahoo.com>
parents: 51919
diff changeset
   127
    @property
3688a984134b interfaces: change a couple of dirstate fields to `@property`
Matt Harbison <matt_harbison@yahoo.com>
parents: 51919
diff changeset
   128
    def _checkexec(self) -> bool:
3688a984134b interfaces: change a couple of dirstate fields to `@property`
Matt Harbison <matt_harbison@yahoo.com>
parents: 51919
diff changeset
   129
        """Callable for checking exec bits."""  # TODO: this comment looks stale
42929
97b79354e9f0 idirstate: group private methods and attrs that are in the interface
Augie Fackler <augie@google.com>
parents: 42928
diff changeset
   130
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   131
    @contextlib.contextmanager
52431
2c8c46c3c401 interfaces: mark a few dirstate methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 51925
diff changeset
   132
    @abc.abstractmethod
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   133
    def changing_parents(self, repo) -> Iterator:  # TODO: typehint this
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   134
        """Context manager for handling dirstate parents.
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   135
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   136
        If an exception occurs in the scope of the context manager,
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   137
        the incoherent dirstate won't be written when wlock is
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   138
        released.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   139
        """
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   140
50026
3550e4a88ccd dirstate: add a context for tracking files change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50023
diff changeset
   141
    @contextlib.contextmanager
52431
2c8c46c3c401 interfaces: mark a few dirstate methods abstract
Matt Harbison <matt_harbison@yahoo.com>
parents: 51925
diff changeset
   142
    @abc.abstractmethod
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   143
    def changing_files(self, repo) -> Iterator:  # TODO: typehint this
50026
3550e4a88ccd dirstate: add a context for tracking files change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50023
diff changeset
   144
        """Context manager for handling dirstate files.
3550e4a88ccd dirstate: add a context for tracking files change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50023
diff changeset
   145
3550e4a88ccd dirstate: add a context for tracking files change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50023
diff changeset
   146
        If an exception occurs in the scope of the context manager,
3550e4a88ccd dirstate: add a context for tracking files change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50023
diff changeset
   147
        the incoherent dirstate won't be written when wlock is
3550e4a88ccd dirstate: add a context for tracking files change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50023
diff changeset
   148
        released.
3550e4a88ccd dirstate: add a context for tracking files change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50023
diff changeset
   149
        """
3550e4a88ccd dirstate: add a context for tracking files change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50023
diff changeset
   150
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   151
    def hasdir(self, d: bytes) -> bool:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   152
        pass
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   153
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   154
    def flagfunc(self, buildfallback: FlagFuncFallbackT) -> FlagFuncReturnT:
49880
9ea66d166ec7 dirstate: update docstrings in idirstate from the current dirstate
Anton Shestakov <av6@dwimlabs.net>
parents: 49076
diff changeset
   155
        """build a callable that returns flags associated with a filename
9ea66d166ec7 dirstate: update docstrings in idirstate from the current dirstate
Anton Shestakov <av6@dwimlabs.net>
parents: 49076
diff changeset
   156
9ea66d166ec7 dirstate: update docstrings in idirstate from the current dirstate
Anton Shestakov <av6@dwimlabs.net>
parents: 49076
diff changeset
   157
        The information is extracted from three possible layers:
9ea66d166ec7 dirstate: update docstrings in idirstate from the current dirstate
Anton Shestakov <av6@dwimlabs.net>
parents: 49076
diff changeset
   158
        1. the file system if it supports the information
9ea66d166ec7 dirstate: update docstrings in idirstate from the current dirstate
Anton Shestakov <av6@dwimlabs.net>
parents: 49076
diff changeset
   159
        2. the "fallback" information stored in the dirstate if any
9ea66d166ec7 dirstate: update docstrings in idirstate from the current dirstate
Anton Shestakov <av6@dwimlabs.net>
parents: 49076
diff changeset
   160
        3. a more expensive mechanism inferring the flags from the parents.
9ea66d166ec7 dirstate: update docstrings in idirstate from the current dirstate
Anton Shestakov <av6@dwimlabs.net>
parents: 49076
diff changeset
   161
        """
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   162
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   163
    def getcwd(self) -> bytes:
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   164
        """Return the path from which a canonical path is calculated.
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   165
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   166
        This path should be used to resolve file patterns or to convert
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   167
        canonical paths back to file paths for display. It shouldn't be
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   168
        used to get real file paths. Use vfs functions instead.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   169
        """
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   170
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   171
    def pathto(self, f: bytes, cwd: Optional[bytes] = None) -> bytes:
49881
b3ae17037b54 dirstate: swap pathto() and get_entry() in idirstate
Anton Shestakov <av6@dwimlabs.net>
parents: 49880
diff changeset
   172
        pass
b3ae17037b54 dirstate: swap pathto() and get_entry() in idirstate
Anton Shestakov <av6@dwimlabs.net>
parents: 49880
diff changeset
   173
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   174
    def get_entry(self, path: bytes) -> DirstateItemT:
49076
9c8d67a3af5e idirstate: add missing get_entry() method
Matt Harbison <matt_harbison@yahoo.com>
parents: 48875
diff changeset
   175
        """return a DirstateItem for the associated path"""
9c8d67a3af5e idirstate: add missing get_entry() method
Matt Harbison <matt_harbison@yahoo.com>
parents: 48875
diff changeset
   176
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   177
    def __contains__(self, key: Any) -> bool:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   178
        """Check if bytestring `key` is known to the dirstate."""
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   179
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   180
    def __iter__(self) -> Iterator[bytes]:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   181
        """Iterate the dirstate's contained filenames as bytestrings."""
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   182
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   183
    def items(self) -> Iterator[Tuple[bytes, DirstateItemT]]:
47539
84391ddf4c78 dirstate-item: rename the class to DirstateItem
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47280
diff changeset
   184
        """Iterate the dirstate's entries as (filename, DirstateItem.
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   185
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   186
        As usual, filename is a bytestring.
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   187
        """
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   188
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   189
    iteritems = items
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   190
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   191
    def parents(self) -> List[bytes]:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   192
        pass
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   193
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   194
    def p1(self) -> bytes:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   195
        pass
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   196
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   197
    def p2(self) -> bytes:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   198
        pass
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   199
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   200
    def branch(self) -> bytes:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   201
        pass
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   202
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   203
    # TODO: typehint the return.  It's a copies Map of some sort.
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   204
    def setparents(self, p1: bytes, p2: Optional[bytes] = None):
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   205
        """Set dirstate parents to p1 and p2.
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   206
49880
9ea66d166ec7 dirstate: update docstrings in idirstate from the current dirstate
Anton Shestakov <av6@dwimlabs.net>
parents: 49076
diff changeset
   207
        When moving from two parents to one, "merged" entries a
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   208
        adjusted to normal and previous copy records discarded and
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   209
        returned by the call.
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   210
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   211
        See localrepo.setparents()
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   212
        """
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   213
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   214
    def setbranch(
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   215
        self, branch: bytes, transaction: Optional[TransactionT]
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   216
    ) -> None:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   217
        pass
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   218
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   219
    def invalidate(self) -> None:
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   220
        """Causes the next access to reread the dirstate.
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   221
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   222
        This is different from localrepo.invalidatedirstate() because it always
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   223
        rereads the dirstate. Use localrepo.invalidatedirstate() if you want to
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   224
        check whether the dirstate has changed before rereading it."""
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   225
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   226
    def copy(self, source: Optional[bytes], dest: bytes) -> None:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   227
        """Mark dest as a copy of source. Unmark dest if source is None."""
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   228
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   229
    def copied(self, file: bytes) -> Optional[bytes]:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   230
        pass
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   231
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   232
    def copies(self) -> Dict[bytes, bytes]:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   233
        pass
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   234
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   235
    def normalize(
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   236
        self, path: bytes, isknown: bool = False, ignoremissing: bool = False
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   237
    ) -> bytes:
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   238
        """
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   239
        normalize the case of a pathname when on a casefolding filesystem
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   240
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   241
        isknown specifies whether the filename came from walking the
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   242
        disk, to avoid extra filesystem access.
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   243
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   244
        If ignoremissing is True, missing path are returned
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   245
        unchanged. Otherwise, we try harder to normalize possibly
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   246
        existing path components.
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   247
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   248
        The normalized case is determined based on the following precedence:
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   249
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   250
        - version of name already stored in the dirstate
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   251
        - version of name stored on disk
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   252
        - version provided via command arguments
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   253
        """
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   254
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   255
    def clear(self) -> None:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   256
        pass
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   257
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   258
    def rebuild(
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   259
        self,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   260
        parent: bytes,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   261
        allfiles: Iterable[bytes],  # TODO: more than iterable? (uses len())
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   262
        changedfiles: Optional[Iterable[bytes]] = None,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   263
    ) -> None:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   264
        pass
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   265
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   266
    def write(self, tr: Optional[TransactionT]) -> None:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   267
        pass
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   268
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   269
    def addparentchangecallback(
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   270
        self, category: bytes, callback: AddParentChangeCallbackT
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   271
    ) -> None:
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   272
        """add a callback to be called when the wd parents are changed
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   273
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   274
        Callback will be called with the following arguments:
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   275
            dirstate, (oldp1, oldp2), (newp1, newp2)
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   276
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   277
        Category is a unique identifier to allow overwriting an old callback
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   278
        with a newer callback.
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   279
        """
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   280
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   281
    def walk(
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   282
        self,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   283
        match: matchmod.basematcher,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   284
        subrepos: Any,  # TODO: figure out what this is
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   285
        unknown: bool,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   286
        ignored: bool,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   287
        full: bool = True,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   288
    ) -> WalkReturnT:
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   289
        """
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   290
        Walk recursively through the directory tree, finding all files
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   291
        matched by match.
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   292
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   293
        If full is False, maybe skip some known-clean files.
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   294
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   295
        Return a dict mapping filename to stat-like object (either
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   296
        mercurial.osutil.stat instance or return value of os.stat()).
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   297
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   298
        """
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   299
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   300
    def status(
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   301
        self,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   302
        match: matchmod.basematcher,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   303
        subrepos: bool,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   304
        ignored: bool,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   305
        clean: bool,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   306
        unknown: bool,
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   307
    ) -> StatusReturnT:
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   308
        """Determine the status of the working copy relative to the
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   309
        dirstate and return a pair of (unsure, status), where status is of type
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   310
        scmutil.status and:
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   311
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   312
          unsure:
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   313
            files that might have been modified since the dirstate was
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   314
            written, but need to be read to be sure (size is the same
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   315
            but mtime differs)
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   316
          status.modified:
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   317
            files that have definitely been modified since the dirstate
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   318
            was written (different size or mode)
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   319
          status.clean:
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   320
            files that have definitely not been modified since the
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   321
            dirstate was written
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   322
        """
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   323
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   324
    # TODO: could return a list, except git.dirstate is a generator
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   325
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   326
    def matches(self, match: matchmod.basematcher) -> Iterable[bytes]:
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   327
        """
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   328
        return files in the dirstate (in whatever state) filtered by match
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43787
diff changeset
   329
        """
42927
d459cd8ea42d interfaces: introduce an interface for dirstate implementations
Augie Fackler <augie@google.com>
parents:
diff changeset
   330
51925
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   331
    # TODO: finish adding typehints here, and to subclasses
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   332
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   333
    def verify(
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   334
        self, m1, m2, p1: bytes, narrow_matcher: Optional[Any] = None
93d872a06132 typing: add type annotations to the dirstate classes
Matt Harbison <matt_harbison@yahoo.com>
parents: 51924
diff changeset
   335
    ) -> Iterator[bytes]:
49882
8c7895db8955 dirstate: add missing methods and kwargs to idirstate interface
Anton Shestakov <av6@dwimlabs.net>
parents: 49881
diff changeset
   336
        """
8c7895db8955 dirstate: add missing methods and kwargs to idirstate interface
Anton Shestakov <av6@dwimlabs.net>
parents: 49881
diff changeset
   337
        check the dirstate contents against the parent manifest and yield errors
8c7895db8955 dirstate: add missing methods and kwargs to idirstate interface
Anton Shestakov <av6@dwimlabs.net>
parents: 49881
diff changeset
   338
        """