Skip to content

Commit e433a4c

Browse files
committed
typing: References.get can return None
1 parent 6028542 commit e433a4c

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

pygit2/references.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ def __init__(self, repository: BaseRepository) -> None:
4444
def __getitem__(self, name: str) -> 'Reference':
4545
return self._repository.lookup_reference(name)
4646

47-
def get(self, key: str) -> 'Reference':
47+
def get(self, key: str) -> 'Reference' | None:
4848
try:
4949
return self[key]
5050
except KeyError:
51-
return None # type: ignore # will be corrected in next commit!
51+
return None
5252

5353
def __iter__(self) -> Iterator[str]:
5454
iter = self._repository.references_iterator_init()

test/test_refs.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
GitError,
3636
InvalidSpecError,
3737
Oid,
38+
Reference,
3839
Repository,
3940
Signature,
4041
Tree,
@@ -84,41 +85,48 @@ def test_refs_getitem(testrepo: Repository) -> None:
8485

8586
# Test a lookup
8687
reference = testrepo.references.get('refs/heads/master')
88+
assert reference is not None
8789
assert reference.name == 'refs/heads/master'
8890

8991

9092
def test_refs_get_sha(testrepo: Repository) -> None:
9193
reference = testrepo.references['refs/heads/master']
94+
assert reference is not None
9295
assert reference.target == LAST_COMMIT
9396

9497

9598
def test_refs_set_sha(testrepo: Repository) -> None:
9699
NEW_COMMIT = '5ebeeebb320790caf276b9fc8b24546d63316533'
97100
reference = testrepo.references.get('refs/heads/master')
101+
assert reference is not None
98102
reference.set_target(NEW_COMMIT)
99103
assert reference.target == NEW_COMMIT
100104

101105

102106
def test_refs_set_sha_prefix(testrepo: Repository) -> None:
103107
NEW_COMMIT = '5ebeeebb320790caf276b9fc8b24546d63316533'
104108
reference = testrepo.references.get('refs/heads/master')
109+
assert reference is not None
105110
reference.set_target(NEW_COMMIT[0:6])
106111
assert reference.target == NEW_COMMIT
107112

108113

109114
def test_refs_get_type(testrepo: Repository) -> None:
110115
reference = testrepo.references.get('refs/heads/master')
116+
assert reference is not None
111117
assert reference.type == ReferenceType.DIRECT
112118

113119

114120
def test_refs_get_target(testrepo: Repository) -> None:
115121
reference = testrepo.references.get('HEAD')
122+
assert reference is not None
116123
assert reference.target == 'refs/heads/master'
117124
assert reference.raw_target == b'refs/heads/master'
118125

119126

120127
def test_refs_set_target(testrepo: Repository) -> None:
121128
reference = testrepo.references.get('HEAD')
129+
assert reference is not None
122130
assert reference.target == 'refs/heads/master'
123131
assert reference.raw_target == b'refs/heads/master'
124132
reference.set_target('refs/heads/i18n')
@@ -128,13 +136,15 @@ def test_refs_set_target(testrepo: Repository) -> None:
128136

129137
def test_refs_get_shorthand(testrepo: Repository) -> None:
130138
reference = testrepo.references.get('refs/heads/master')
139+
assert reference is not None
131140
assert reference.shorthand == 'master'
132141
reference = testrepo.references.create('refs/remotes/origin/master', LAST_COMMIT)
133142
assert reference.shorthand == 'origin/master'
134143

135144

136145
def test_refs_set_target_with_message(testrepo: Repository) -> None:
137146
reference = testrepo.references.get('HEAD')
147+
assert reference is not None
138148
assert reference.target == 'refs/heads/master'
139149
assert reference.raw_target == b'refs/heads/master'
140150
sig = Signature('foo', 'bar')
@@ -198,6 +208,7 @@ def test_refs_rename(testrepo: Repository) -> None:
198208

199209
def test_refs_resolve(testrepo: Repository) -> None:
200210
reference = testrepo.references.get('HEAD')
211+
assert reference is not None
201212
assert reference.type == ReferenceType.SYMBOLIC
202213
reference = reference.resolve()
203214
assert reference.type == ReferenceType.DIRECT
@@ -206,16 +217,20 @@ def test_refs_resolve(testrepo: Repository) -> None:
206217

207218
def test_refs_resolve_identity(testrepo: Repository) -> None:
208219
head = testrepo.references.get('HEAD')
220+
assert head is not None
209221
ref = head.resolve()
210222
assert ref.resolve() is ref
211223

212224

213225
def test_refs_create(testrepo: Repository) -> None:
214226
# We add a tag as a new reference that points to "origin/master"
215-
reference = testrepo.references.create('refs/tags/version1', LAST_COMMIT)
227+
reference: Reference | None = testrepo.references.create(
228+
'refs/tags/version1', LAST_COMMIT
229+
)
216230
refs = testrepo.references
217231
assert 'refs/tags/version1' in refs
218232
reference = testrepo.references.get('refs/tags/version1')
233+
assert reference is not None
219234
assert reference.target == LAST_COMMIT
220235

221236
# try to create existing reference
@@ -256,6 +271,7 @@ def test_refs_create_symbolic(testrepo: Repository) -> None:
256271

257272
def test_refs_peel(testrepo: Repository) -> None:
258273
ref = testrepo.references.get('refs/heads/master')
274+
assert ref is not None
259275
assert testrepo[ref.target].id == ref.peel().id
260276
assert not isinstance(ref.raw_target, bytes)
261277
assert testrepo[ref.raw_target].id == ref.peel().id

0 commit comments

Comments
 (0)