|
2 | 2 | import logging |
3 | 3 | import os |
4 | 4 | import stat |
| 5 | +import sys |
5 | 6 | from collections.abc import Iterable, Iterator, Mapping |
6 | 7 | from contextlib import contextmanager |
7 | 8 | from io import BytesIO, StringIO, TextIOWrapper |
@@ -731,14 +732,21 @@ def _default_status( |
731 | 732 | SCMError(f"Git failed to fetch ref from '{url}'"), |
732 | 733 | ): |
733 | 734 | with RemoteCallbacks(progress=progress) as cb: |
734 | | - remote_refs: dict[str, Oid] = ( |
735 | | - { |
736 | | - head["name"]: head["oid"] |
737 | | - for head in remote.ls_remotes(callbacks=cb, proxy=True) |
738 | | - } |
739 | | - if not force |
740 | | - else {} |
741 | | - ) |
| 735 | + remote_refs: dict[str, Oid] = {} |
| 736 | + if not force: |
| 737 | + # pygit2 1.19.0 deprecated ls_remotes() in favor of list_heads() |
| 738 | + # but 1.19.0+ requires Python 3.11+ |
| 739 | + if sys.version_info >= (3, 11): |
| 740 | + for head in remote.list_heads(callbacks=cb, proxy=True): |
| 741 | + assert head.name is not None |
| 742 | + remote_refs[head.name] = head.oid |
| 743 | + else: |
| 744 | + remote_refs = { |
| 745 | + head["name"]: head["oid"] |
| 746 | + for head in remote.ls_remotes( # type: ignore[attr-defined] |
| 747 | + callbacks=cb, proxy=True |
| 748 | + ) |
| 749 | + } |
742 | 750 | remote.fetch( |
743 | 751 | refspecs=refspecs, callbacks=cb, message="fetch", proxy=True |
744 | 752 | ) |
|
0 commit comments