| 
1 | 1 | """Base class for VCS Project plugins."""  | 
2 | 2 | import logging  | 
3 | 3 | import pathlib  | 
4 |  | -from typing import NamedTuple, Optional, Tuple  | 
 | 4 | +from typing import NamedTuple, Optional, Protocol, Tuple  | 
5 | 5 | from urllib import parse as urlparse  | 
6 | 6 | 
 
  | 
7 | 7 | from libvcs._internal.run import CmdLoggingAdapter, run  | 
@@ -32,18 +32,21 @@ def convert_pip_url(pip_url: str) -> VCSLocation:  | 
32 | 32 |     return VCSLocation(url=url, rev=rev)  | 
33 | 33 | 
 
  | 
34 | 34 | 
 
  | 
35 |  | -class BaseProject:  | 
 | 35 | +class BaseProject(Protocol):  | 
36 | 36 |     """Base class for repositories."""  | 
37 | 37 | 
 
  | 
38 |  | -    log_in_real_time = None  | 
 | 38 | +    log_in_real_time: bool  | 
39 | 39 |     """Log command output to buffer"""  | 
40 | 40 | 
 
  | 
41 |  | -    bin_name = ""  | 
 | 41 | +    bin_name: str  | 
42 | 42 |     """VCS app name, e.g. 'git'"""  | 
43 | 43 | 
 
  | 
44 | 44 |     schemes: Tuple[str, ...] = ()  | 
45 | 45 |     """List of supported schemes to register in ``urlparse.uses_netloc``"""  | 
46 | 46 | 
 
  | 
 | 47 | +    dir: StrPath  | 
 | 48 | +    """CWD of project"""  | 
 | 49 | + | 
47 | 50 |     def __init__(self, *, url: str, dir: StrPath, progress_callback=None, **kwargs):  | 
48 | 51 |         r"""  | 
49 | 52 |         Parameters  | 
@@ -85,7 +88,6 @@ def __init__(self, *, url: str, dir: StrPath, progress_callback=None, **kwargs):  | 
85 | 88 |         self.progress_callback = progress_callback  | 
86 | 89 | 
 
  | 
87 | 90 |         #: Directory to check out  | 
88 |  | -        self.dir: pathlib.Path  | 
89 | 91 |         if isinstance(dir, pathlib.Path):  | 
90 | 92 |             self.dir = dir  | 
91 | 93 |         else:  | 
 | 
0 commit comments