git: fix `repository.imanifestdict` implementation flaws detected by pytype
The next logical step is to align the signatures on `repository.imanifestdict`
and the logical subclasses. But that requires this small detour, as doing that
caused these errors:
File "/mnt/c/Users/Matt/hg/hgext/git/manifest.py", line 247, in items:
bad return type [bad-return-type]
Expected: Tuple[bytes, bytes]
Actually returned: bytes
File "/mnt/c/Users/Matt/hg/hgext/git/manifest.py", line 255, in iterentries:
bad return type [bad-return-type]
Expected: Tuple[bytes, bytes, bytes]
Actually returned: Tuple[Any, bytes]
The type annotation added to `_resolve_entry()` here to help clarify things then
caused PyCharm to flag `gittreemanifestctx.find()` for a bad return type, also
fixed here.
--- a/hgext/git/manifest.py Wed Oct 23 15:13:40 2024 -0400
+++ b/hgext/git/manifest.py Thu Oct 24 22:24:46 2024 -0400
@@ -42,7 +42,7 @@
# dict of path: Optional[Tuple(node, flags)]
self._pending_changes = pending_changes
- def _resolve_entry(self, path):
+ def _resolve_entry(self, path) -> tuple[bytes, bytes]:
"""Given a path, load its node and flags, or raise KeyError if missing.
This takes into account any pending writes in the builder.
@@ -224,7 +224,7 @@
def items(self):
for f in self:
# TODO: build a proper iterator version of this
- yield self[f]
+ yield f, self[f]
def iteritems(self):
return self.items()
@@ -232,7 +232,7 @@
def iterentries(self):
for f in self:
# TODO: build a proper iterator version of this
- yield self._resolve_entry(f)
+ yield f, *self._resolve_entry(f)
def text(self):
assert False # TODO can this method move out of the manifest iface?
@@ -276,7 +276,7 @@
return memgittreemanifestctx(self._repo, self._tree)
def find(self, path: bytes) -> tuple[bytes, bytes]:
- return self.read()[path]
+ return self.read().find(path)
class memgittreemanifestctx(repository.imanifestrevisionwritable):