comparison mercurial/util.py @ 52886:abcfb4ce132e

py-compat: backed out changeset 7ca9c05ec335 This currently fails on 3.8 with the following error:: fatal: fetching library from `hg` failed with 1: Traceback (most recent call last): File "/tmp/hgtests.hus0o5qa/install/bin/hg", line 61, in <module> dispatch.run() File "/opt/vendor/pyenv/pyenv-2.4.13/versions/3.8.19/lib/python3.8/importlib/util.py", line 245, in __getattribute__ self.__spec__.loader.exec_module(self) File "<frozen importlib._bootstrap_external>", line 843, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/tmp/hgtests.hus0o5qa/install/lib/python3.8/site-packages/mercurial/dispatch.py", line 758, in <module> class lazyaliasentry: File "/tmp/hgtests.hus0o5qa/install/lib/python3.8/site-packages/mercurial/dispatch.py", line 769, in lazyaliasentry @util.propertycache File "/opt/vendor/pyenv/pyenv-2.4.13/versions/3.8.19/lib/python3.8/importlib/util.py", line 245, in __getattribute__ self.__spec__.loader.exec_module(self) File "<frozen importlib._bootstrap_external>", line 843, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/tmp/hgtests.hus0o5qa/install/lib/python3.8/site-packages/mercurial/util.py", line 1360, in <module> class sortdict(collections.OrderedDict[_KT, _VT]): TypeError: 'type' object is not subscriptable
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sat, 15 Feb 2025 14:11:43 +0100
parents f4dd447e6efd
children acaf6bad6b89
comparison
equal deleted inserted replaced
52885:f4dd447e6efd 52886:abcfb4ce132e
92 from typing_extensions import ( 92 from typing_extensions import (
93 Self, 93 Self,
94 ) 94 )
95 95
96 _Tcow = TypeVar('_Tcow', bound="cow") 96 _Tcow = TypeVar('_Tcow', bound="cow")
97
98 _KT = TypeVar("_KT")
99 """An unconstrained key type for container classes (see typing.KT)."""
100
101 _VT = TypeVar("_VT")
102 """An unconstrained value type for container classes (see typing.VT)."""
103 97
104 base85: intmod.Base85 = policy.importmod('base85') 98 base85: intmod.Base85 = policy.importmod('base85')
105 osutil = policy.importmod('osutil') 99 osutil = policy.importmod('osutil')
106 100
107 b85decode = base85.b85decode 101 b85decode = base85.b85decode
1355 """always do a cheap copy""" 1349 """always do a cheap copy"""
1356 self._copied = getattr(self, '_copied', 0) + 1 1350 self._copied = getattr(self, '_copied', 0) + 1
1357 return self 1351 return self
1358 1352
1359 1353
1360 class sortdict(collections.OrderedDict[_KT, _VT]): 1354 class sortdict(collections.OrderedDict):
1361 """a simple sorted dictionary 1355 """a simple sorted dictionary
1362 1356
1363 >>> d1 = sortdict([(b'a', 0), (b'b', 1)]) 1357 >>> d1 = sortdict([(b'a', 0), (b'b', 1)])
1364 >>> d2 = d1.copy() 1358 >>> d2 = d1.copy()
1365 >>> list(d2.items()) 1359 >>> list(d2.items())
1370 >>> d1.insert(1, b'a.5', 0.5) 1364 >>> d1.insert(1, b'a.5', 0.5)
1371 >>> list(d1.items()) 1365 >>> list(d1.items())
1372 [('a', 0), ('a.5', 0.5), ('b', 1)] 1366 [('a', 0), ('a.5', 0.5), ('b', 1)]
1373 """ 1367 """
1374 1368
1375 def __setitem__(self, key: _KT, value: _VT) -> None: 1369 def __setitem__(self, key, value):
1376 if key in self: 1370 if key in self:
1377 del self[key] 1371 del self[key]
1378 super().__setitem__(key, value) 1372 super().__setitem__(key, value)
1379 1373
1380 if pycompat.ispypy: 1374 if pycompat.ispypy:
1385 for k, v in src: 1379 for k, v in src:
1386 self[k] = v 1380 self[k] = v
1387 for k in f: 1381 for k in f:
1388 self[k] = f[k] 1382 self[k] = f[k]
1389 1383
1390 def insert(self, position: int, key: _KT, value: _VT): 1384 def insert(self, position, key, value):
1391 for i, (k, v) in enumerate(list(self.items())): 1385 for i, (k, v) in enumerate(list(self.items())):
1392 if i == position: 1386 if i == position:
1393 self[key] = value 1387 self[key] = value
1394 if i >= position: 1388 if i >= position:
1395 del self[k] 1389 del self[k]