annotate mercurial/interfaces/misc.py @ 52894:bde94bd8e8a2

typing: use a protocol to annotate `pathutil.dirs` in repository.py That is one external import for the repository interface module. One more to go.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sat, 08 Feb 2025 18:15:18 +0100
parents 483b0bb23085
children ba343f763595
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
52893
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
1 # misc.py - Various Interface that did not deserve a dedicated module (yet)
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
2 #
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
3 # Copyright 2025 Octobus, contact@octobus.net
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
4 from __future__ import annotations
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
5
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
6 import abc
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
7
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
8 from typing import (
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
9 Callable,
52894
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
10 Iterator,
52893
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
11 List,
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
12 Protocol,
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
13 )
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
14
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
15
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
16 class IHooks(Protocol):
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
17 """A collection of hook functions that can be used to extend a
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
18 function's behavior. Hooks are called in lexicographic order,
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
19 based on the names of their sources."""
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
20
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
21 @abc.abstractmethod
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
22 def add(self, source: bytes, hook: Callable):
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
23 ...
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
24
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
25 @abc.abstractmethod
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
26 def __call__(self, *args) -> List:
483b0bb23085 typing: use a protocol to annotate `hooks` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
27 ...
52894
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
28
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
29
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
30 class IDirs(Protocol):
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
31 '''a multiset of directory names from a set of file paths'''
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
32
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
33 @abc.abstractmethod
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
34 def addpath(self, path: bytes) -> None:
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
35 ...
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
36
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
37 @abc.abstractmethod
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
38 def delpath(self, path: bytes) -> None:
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
39 ...
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
40
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
41 @abc.abstractmethod
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
42 def __iter__(self) -> Iterator[bytes]:
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
43 ...
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
44
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
45 @abc.abstractmethod
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
46 def __contains__(self, d: bytes) -> bool:
bde94bd8e8a2 typing: use a protocol to annotate `pathutil.dirs` in repository.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52893
diff changeset
47 ...