Skip to content

Commit f8d9a05

Browse files
committed
improve types according to test/test_refdb_backend.py
also renamed testrepo to self in ProxyRefdbBackend class
1 parent ab2a5fe commit f8d9a05

2 files changed

Lines changed: 50 additions & 33 deletions

File tree

pygit2/_pygit2.pyi

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,9 @@ class Refdb:
643643
class RefdbBackend:
644644
def __init__(self, *args, **kwargs) -> None: ...
645645
def compress(self) -> None: ...
646-
def delete(self, ref_name: str, old_id: _OidArg, old_target: str) -> None: ...
646+
def delete(
647+
self, ref_name: str, old_id: _OidArg, old_target: str | None
648+
) -> None: ...
647649
def ensure_log(self, ref_name: str) -> bool: ...
648650
def exists(self, refname: str) -> bool: ...
649651
def has_log(self, ref_name: str) -> bool: ...
@@ -657,9 +659,10 @@ class RefdbBackend:
657659
force: bool,
658660
who: Signature,
659661
message: str,
660-
old: _OidArg,
661-
old_target: str,
662+
old: None | _OidArg,
663+
old_target: None | str,
662664
) -> None: ...
665+
def __iter__(self) -> Iterator[Reference]: ...
663666

664667
class RefdbFsBackend(RefdbBackend):
665668
def __init__(self, *args, **kwargs) -> None: ...
@@ -738,6 +741,7 @@ class Branches:
738741
class Repository:
739742
_pointer: GitRepositoryC
740743
_repo: GitRepositoryC
744+
backend: RefdbBackend
741745
default_signature: Signature
742746
head: Reference
743747
head_is_detached: bool

test/test_refdb_backend.py

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@
2626
"""Tests for Refdb objects."""
2727

2828
from pathlib import Path
29+
from typing import Generator, Iterator
2930

3031
import pytest
3132

3233
import pygit2
34+
from pygit2 import Commit, Oid, Reference, Repository, Signature
3335

3436

3537
# Note: the refdb abstraction from libgit2 is meant to provide information
@@ -38,90 +40,101 @@
3840
# incomplete, to avoid hitting the semi-valid states that refdbs produce by
3941
# design.
4042
class ProxyRefdbBackend(pygit2.RefdbBackend):
41-
def __init__(testrepo, source):
42-
testrepo.source = source
43+
def __init__(self, source: pygit2.RefdbBackend) -> None:
44+
self.source = source
4345

44-
def exists(testrepo, ref):
45-
return testrepo.source.exists(ref)
46+
def exists(self, ref: str) -> bool:
47+
return self.source.exists(ref)
4648

47-
def lookup(testrepo, ref):
48-
return testrepo.source.lookup(ref)
49+
def lookup(self, ref: str) -> Reference:
50+
return self.source.lookup(ref)
4951

50-
def write(testrepo, ref, force, who, message, old, old_target):
51-
return testrepo.source.write(ref, force, who, message, old, old_target)
52+
def write(
53+
self,
54+
ref: Reference,
55+
force: bool,
56+
who: Signature,
57+
message: str,
58+
old: None | str | Oid,
59+
old_target: None | str,
60+
) -> None:
61+
return self.source.write(ref, force, who, message, old, old_target)
5262

53-
def rename(testrepo, old_name, new_name, force, who, message):
54-
return testrepo.source.rename(old_name, new_name, force, who, message)
63+
def rename(
64+
self, old_name: str, new_name: str, force: bool, who: Signature, message: str
65+
) -> Reference:
66+
return self.source.rename(old_name, new_name, force, who, message)
5567

56-
def delete(testrepo, ref_name, old_id, old_target):
57-
return testrepo.source.delete(ref_name, old_id, old_target)
68+
def delete(self, ref_name: str, old_id: Oid | str, old_target: str | None) -> None:
69+
return self.source.delete(ref_name, old_id, old_target)
5870

59-
def compress(testrepo):
60-
return testrepo.source.compress()
71+
def compress(self) -> None:
72+
return self.source.compress()
6173

62-
def has_log(testrepo, ref_name):
63-
return testrepo.source.has_log(ref_name)
74+
def has_log(self, ref_name: str) -> bool:
75+
return self.source.has_log(ref_name)
6476

65-
def ensure_log(testrepo, ref_name):
66-
return testrepo.source.ensure_log(ref_name)
77+
def ensure_log(self, ref_name: str) -> bool:
78+
return self.source.ensure_log(ref_name)
6779

68-
def __iter__(testrepo):
69-
return iter(testrepo.source)
80+
def __iter__(self) -> Iterator[Reference]:
81+
return iter(self.source)
7082

7183

7284
@pytest.fixture
73-
def repo(testrepo):
85+
def repo(testrepo: Repository) -> Generator[Repository, None, None]:
7486
testrepo.backend = ProxyRefdbBackend(pygit2.RefdbFsBackend(testrepo))
7587
yield testrepo
7688

7789

78-
def test_exists(repo):
90+
def test_exists(repo: Repository) -> None:
7991
assert not repo.backend.exists('refs/heads/does-not-exist')
8092
assert repo.backend.exists('refs/heads/master')
8193

8294

83-
def test_lookup(repo):
95+
def test_lookup(repo: Repository) -> None:
8496
assert repo.backend.lookup('refs/heads/does-not-exist') is None
8597
assert repo.backend.lookup('refs/heads/master').name == 'refs/heads/master'
8698

8799

88-
def test_write(repo):
100+
def test_write(repo: Repository) -> None:
89101
master = repo.backend.lookup('refs/heads/master')
90-
commit = repo.get(master.target)
102+
commit = repo[master.target]
91103
ref = pygit2.Reference('refs/heads/test-write', master.target, None)
92104
repo.backend.write(ref, False, commit.author, 'Create test-write', None, None)
93105
assert repo.backend.lookup('refs/heads/test-write').target == master.target
94106

95107

96-
def test_rename(repo):
108+
def test_rename(repo: Repository) -> None:
97109
old_ref = repo.backend.lookup('refs/heads/i18n')
98110
target = repo.get(old_ref.target)
111+
assert isinstance(target, Commit)
99112
repo.backend.rename(
100113
'refs/heads/i18n', 'refs/heads/intl', False, target.committer, target.message
101114
)
102115
assert repo.backend.lookup('refs/heads/intl').target == target.id
103116

104117

105-
def test_delete(repo):
118+
def test_delete(repo: Repository) -> None:
106119
old = repo.backend.lookup('refs/heads/i18n')
107120
repo.backend.delete('refs/heads/i18n', old.target, None)
108121
assert not repo.backend.lookup('refs/heads/i18n')
109122

110123

111-
def test_compress(repo):
124+
def test_compress(repo: Repository) -> None:
112125
repo = repo
113126
packed_refs_file = Path(repo.path) / 'packed-refs'
114127
assert not packed_refs_file.exists()
115128
repo.backend.compress()
116129
assert packed_refs_file.exists()
117130

118131

119-
def test_has_log(repo):
132+
def test_has_log(repo: Repository) -> None:
120133
assert repo.backend.has_log('refs/heads/master')
121134
assert not repo.backend.has_log('refs/heads/does-not-exist')
122135

123136

124-
def test_ensure_log(repo):
137+
def test_ensure_log(repo: Repository) -> None:
125138
assert not repo.backend.has_log('refs/heads/new-log')
126139
repo.backend.ensure_log('refs/heads/new-log')
127140
assert repo.backend.has_log('refs/heads/new-log')

0 commit comments

Comments
 (0)