comparison mercurial/context.py @ 52452:9d79ffeed7c0

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.
author Matt Harbison <matt_harbison@yahoo.com>
date Mon, 09 Dec 2024 00:21:38 -0500
parents f4733654f144
children 24ee91ba9aa8
comparison
equal deleted inserted replaced
52451:f5d134e57f51 52452:9d79ffeed7c0
35 subrepo, 35 subrepo,
36 subrepoutil, 36 subrepoutil,
37 testing, 37 testing,
38 util, 38 util,
39 ) 39 )
40 from .interfaces import (
41 status as istatus,
42 )
40 from .utils import ( 43 from .utils import (
41 dateutil, 44 dateutil,
42 stringutil, 45 stringutil,
43 ) 46 )
44 from .dirstateutils import ( 47 from .dirstateutils import (
97 """ 100 """
98 return match 101 return match
99 102
100 def _buildstatus( 103 def _buildstatus(
101 self, other, s, match, listignored, listclean, listunknown 104 self, other, s, match, listignored, listclean, listunknown
102 ): 105 ) -> istatus.Status:
103 """build a status with respect to another context""" 106 """build a status with respect to another context"""
104 # Load earliest manifest first for caching reasons. More specifically, 107 # Load earliest manifest first for caching reasons. More specifically,
105 # if you have revisions 1000 and 1001, 1001 is probably stored as a 108 # if you have revisions 1000 and 1001, 1001 is probably stored as a
106 # delta against 1000. Thus, if you read 1000 first, we'll reconstruct 109 # delta against 1000. Thus, if you read 1000 first, we'll reconstruct
107 # 1000 and cache it so that when you read 1001, we just need to apply a 110 # 1000 and cache it so that when you read 1001, we just need to apply a
386 match=None, 389 match=None,
387 listignored=False, 390 listignored=False,
388 listclean=False, 391 listclean=False,
389 listunknown=False, 392 listunknown=False,
390 listsubrepos=False, 393 listsubrepos=False,
391 ): 394 ) -> istatus.Status:
392 """return status of files between two nodes or node and working 395 """return status of files between two nodes or node and working
393 directory. 396 directory.
394 397
395 If other is None, compare this node with working directory. 398 If other is None, compare this node with working directory.
396 399
1903 dirstate.invalidate() 1906 dirstate.invalidate()
1904 finally: 1907 finally:
1905 # Even if the wlock couldn't be grabbed, clear out the list. 1908 # Even if the wlock couldn't be grabbed, clear out the list.
1906 self._repo.clearpostdsstatus() 1909 self._repo.clearpostdsstatus()
1907 1910
1908 def _dirstatestatus(self, match, ignored=False, clean=False, unknown=False): 1911 def _dirstatestatus(
1912 self, match, ignored=False, clean=False, unknown=False
1913 ) -> istatus.Status:
1909 '''Gets the status from the dirstate -- internal use only.''' 1914 '''Gets the status from the dirstate -- internal use only.'''
1910 subrepos = [] 1915 subrepos = []
1911 if b'.hgsub' in self: 1916 if b'.hgsub' in self:
1912 subrepos = sorted(self.substate) 1917 subrepos = sorted(self.substate)
1913 dirstate = self._repo.dirstate 1918 dirstate = self._repo.dirstate
2727 ): 2732 ):
2728 super(workingcommitctx, self).__init__( 2733 super(workingcommitctx, self).__init__(
2729 repo, text, user, date, extra, changes 2734 repo, text, user, date, extra, changes
2730 ) 2735 )
2731 2736
2732 def _dirstatestatus(self, match, ignored=False, clean=False, unknown=False): 2737 def _dirstatestatus(
2738 self, match, ignored=False, clean=False, unknown=False
2739 ) -> istatus.Status:
2733 """Return matched files only in ``self._status`` 2740 """Return matched files only in ``self._status``
2734 2741
2735 Uncommitted files appear "clean" via this context, even if 2742 Uncommitted files appear "clean" via this context, even if
2736 they aren't actually so in the working directory. 2743 they aren't actually so in the working directory.
2737 """ 2744 """
2922 del man[f] 2929 del man[f]
2923 2930
2924 return man 2931 return man
2925 2932
2926 @propertycache 2933 @propertycache
2927 def _status(self): 2934 def _status(self) -> istatus.Status:
2928 """Calculate exact status from ``files`` specified at construction""" 2935 """Calculate exact status from ``files`` specified at construction"""
2929 man1 = self.p1().manifest() 2936 man1 = self.p1().manifest()
2930 p2 = self._parents[1] 2937 p2 = self._parents[1]
2931 # "1 < len(self._parents)" can't be used for checking 2938 # "1 < len(self._parents)" can't be used for checking
2932 # existence of the 2nd parent, because "memctx._parents" is 2939 # existence of the 2nd parent, because "memctx._parents" is
3087 @property 3094 @property
3088 def _manifest(self): 3095 def _manifest(self):
3089 return self._originalctx.manifest() 3096 return self._originalctx.manifest()
3090 3097
3091 @propertycache 3098 @propertycache
3092 def _status(self): 3099 def _status(self) -> istatus.Status:
3093 """Calculate exact status from ``files`` specified in the ``origctx`` 3100 """Calculate exact status from ``files`` specified in the ``origctx``
3094 and parents manifests. 3101 and parents manifests.
3095 """ 3102 """
3096 man1 = self.p1().manifest() 3103 man1 = self.p1().manifest()
3097 p2 = self._parents[1] 3104 p2 = self._parents[1]