Mercurial > hg
view mercurial/requirements.py @ 51891:ad83e4f9b40e
typing: correct pytype mistakes in `mercurial/vfs.py`
With the previous changes in this series (prior to merging the *.pyi file), this
wasn't too bad- the only definitively wrong things were the `data` argument to
`writelines()`, and the return type on `backgroundclosing()` (both of these
errors were dropped in the previous commit; for some reason pytype doesn't like
`contextlib._GeneratorContextManager`, even though that's what it determined it
is):
File "/mnt/c/Users/Matt/hg/mercurial/vfs.py", line 411, in abstractvfs:
Bad return type 'contextlib._GeneratorContextManager' for generator function abstractvfs.backgroundclosing [bad-yield-annotation]
Expected Generator, Iterable or Iterator
PyCharm thinks this is `Generator[backgroundfilecloser], Any, None]`, which can
be reduced to `Iterator[backgroundfilecloser]`, but pytype flagged the line that
calls `yield` without an argument unless it's also `Optional`. PyCharm is happy
either way. For some reason, `Iterable` didn't work for pytype:
File "/mnt/c/Users/Matt/hg/mercurial/vfs.py", line 390, in abstractvfs:
Function contextlib.contextmanager was called with the wrong arguments [wrong-arg-types]
Expected: (func: Callable[[Any], Iterator])
Actually passed: (func: Callable[[Any, Any, Any], Iterable[Optional[Any]]])
Attributes of protocol Iterator[_T_co] are not implemented on Iterable[Optional[Any]]: __next__
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 20 Sep 2024 16:36:28 -0400 |
parents | f4733654f144 |
children |
line wrap: on
line source
# requirements.py - objects and functions related to repository requirements # # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com> # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. from __future__ import annotations # obsolete experimental requirements: # - manifestv2: An experimental new manifest format that allowed # for stem compression of long paths. Experiment ended up not # being successful (repository sizes went up due to worse delta # chains), and the code was deleted in 4.6. GENERALDELTA_REQUIREMENT = b'generaldelta' DOTENCODE_REQUIREMENT = b'dotencode' STORE_REQUIREMENT = b'store' FNCACHE_REQUIREMENT = b'fncache' DIRSTATE_TRACKED_HINT_V1 = b'dirstate-tracked-key-v1' DIRSTATE_V2_REQUIREMENT = b'dirstate-v2' # When narrowing is finalized and no longer subject to format changes, # we should move this to just "narrow" or similar. NARROW_REQUIREMENT = b'narrowhg-experimental' # Enables sparse working directory usage SPARSE_REQUIREMENT = b'exp-sparse' # Enables the internal phase which is used to hide changesets instead # of stripping them INTERNAL_PHASE_REQUIREMENT = b'internal-phase-2' # Enables the internal phase which is used to hide changesets instead # of stripping them ARCHIVED_PHASE_REQUIREMENT = b'exp-archived-phase' # Stores manifest in Tree structure TREEMANIFEST_REQUIREMENT = b'treemanifest' REVLOGV1_REQUIREMENT = b'revlogv1' # allow using ZSTD as compression engine for revlog content REVLOG_COMPRESSION_ZSTD = b'revlog-compression-zstd' # Increment the sub-version when the revlog v2 format changes to lock out old # clients. CHANGELOGV2_REQUIREMENT = b'exp-changelog-v2' # Increment the sub-version when the revlog v2 format changes to lock out old # clients. REVLOGV2_REQUIREMENT = b'exp-revlogv2.2' # A repository with the sparserevlog feature will have delta chains that # can spread over a larger span. Sparse reading cuts these large spans into # pieces, so that each piece isn't too big. # Without the sparserevlog capability, reading from the repository could use # huge amounts of memory, because the whole span would be read at once, # including all the intermediate revisions that aren't pertinent for the chain. # This is why once a repository has enabled sparse-read, it becomes required. SPARSEREVLOG_REQUIREMENT = b'sparserevlog' # A repository with the the copies-sidedata-changeset requirement will store # copies related information in changeset's sidedata. COPIESSDC_REQUIREMENT = b'exp-copies-sidedata-changeset' # The repository use persistent nodemap for the changelog and the manifest. NODEMAP_REQUIREMENT = b'persistent-nodemap' # Denotes that the current repository is a share SHARED_REQUIREMENT = b'shared' # Denotes that current repository is a share and the shared source path is # relative to the current repository root path RELATIVE_SHARED_REQUIREMENT = b'relshared' # A repository with share implemented safely. The repository has different # store and working copy requirements i.e. both `.hg/requires` and # `.hg/store/requires` are present. SHARESAFE_REQUIREMENT = b'share-safe' # Bookmarks must be stored in the `store` part of the repository and will be # share accross shares BOOKMARKS_IN_STORE_REQUIREMENT = b'bookmarksinstore' # List of requirements which are working directory specific # These requirements cannot be shared between repositories if they # share the same store # * sparse is a working directory specific functionality and hence working # directory specific requirement # * SHARED_REQUIREMENT and RELATIVE_SHARED_REQUIREMENT are requirements which # represents that the current working copy/repository shares store of another # repo. Hence both of them should be stored in working copy # * SHARESAFE_REQUIREMENT needs to be stored in working dir to mark that rest of # the requirements are stored in store's requires # * DIRSTATE_V2_REQUIREMENT affects .hg/dirstate, of which there is one per # working directory. WORKING_DIR_REQUIREMENTS = { SPARSE_REQUIREMENT, SHARED_REQUIREMENT, RELATIVE_SHARED_REQUIREMENT, SHARESAFE_REQUIREMENT, DIRSTATE_TRACKED_HINT_V1, DIRSTATE_V2_REQUIREMENT, } # List of requirement that impact "stream-clone" (and hardlink clone) and # cannot be changed in such cases. # # requirements not in this list are safe to be altered during stream-clone. # # note: the list is currently inherited from previous code and miss some relevant requirement while containing some irrelevant ones. STREAM_FIXED_REQUIREMENTS = { ARCHIVED_PHASE_REQUIREMENT, BOOKMARKS_IN_STORE_REQUIREMENT, CHANGELOGV2_REQUIREMENT, COPIESSDC_REQUIREMENT, GENERALDELTA_REQUIREMENT, INTERNAL_PHASE_REQUIREMENT, REVLOG_COMPRESSION_ZSTD, REVLOGV1_REQUIREMENT, REVLOGV2_REQUIREMENT, SPARSEREVLOG_REQUIREMENT, TREEMANIFEST_REQUIREMENT, }