|
26 | 26 | """Tests for Refdb objects.""" |
27 | 27 |
|
28 | 28 | from pathlib import Path |
| 29 | +from typing import Generator, Iterator |
29 | 30 |
|
30 | 31 | import pytest |
31 | 32 |
|
32 | 33 | import pygit2 |
| 34 | +from pygit2 import Commit, Oid, Reference, Repository, Signature |
33 | 35 |
|
34 | 36 |
|
35 | 37 | # Note: the refdb abstraction from libgit2 is meant to provide information |
|
38 | 40 | # incomplete, to avoid hitting the semi-valid states that refdbs produce by |
39 | 41 | # design. |
40 | 42 | 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 |
43 | 45 |
|
44 | | - def exists(testrepo, ref): |
45 | | - return testrepo.source.exists(ref) |
| 46 | + def exists(self, ref: str) -> bool: |
| 47 | + return self.source.exists(ref) |
46 | 48 |
|
47 | | - def lookup(testrepo, ref): |
48 | | - return testrepo.source.lookup(ref) |
| 49 | + def lookup(self, ref: str) -> Reference: |
| 50 | + return self.source.lookup(ref) |
49 | 51 |
|
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) |
52 | 62 |
|
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) |
55 | 67 |
|
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) |
58 | 70 |
|
59 | | - def compress(testrepo): |
60 | | - return testrepo.source.compress() |
| 71 | + def compress(self) -> None: |
| 72 | + return self.source.compress() |
61 | 73 |
|
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) |
64 | 76 |
|
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) |
67 | 79 |
|
68 | | - def __iter__(testrepo): |
69 | | - return iter(testrepo.source) |
| 80 | + def __iter__(self) -> Iterator[Reference]: |
| 81 | + return iter(self.source) |
70 | 82 |
|
71 | 83 |
|
72 | 84 | @pytest.fixture |
73 | | -def repo(testrepo): |
| 85 | +def repo(testrepo: Repository) -> Generator[Repository, None, None]: |
74 | 86 | testrepo.backend = ProxyRefdbBackend(pygit2.RefdbFsBackend(testrepo)) |
75 | 87 | yield testrepo |
76 | 88 |
|
77 | 89 |
|
78 | | -def test_exists(repo): |
| 90 | +def test_exists(repo: Repository) -> None: |
79 | 91 | assert not repo.backend.exists('refs/heads/does-not-exist') |
80 | 92 | assert repo.backend.exists('refs/heads/master') |
81 | 93 |
|
82 | 94 |
|
83 | | -def test_lookup(repo): |
| 95 | +def test_lookup(repo: Repository) -> None: |
84 | 96 | assert repo.backend.lookup('refs/heads/does-not-exist') is None |
85 | 97 | assert repo.backend.lookup('refs/heads/master').name == 'refs/heads/master' |
86 | 98 |
|
87 | 99 |
|
88 | | -def test_write(repo): |
| 100 | +def test_write(repo: Repository) -> None: |
89 | 101 | master = repo.backend.lookup('refs/heads/master') |
90 | | - commit = repo.get(master.target) |
| 102 | + commit = repo[master.target] |
91 | 103 | ref = pygit2.Reference('refs/heads/test-write', master.target, None) |
92 | 104 | repo.backend.write(ref, False, commit.author, 'Create test-write', None, None) |
93 | 105 | assert repo.backend.lookup('refs/heads/test-write').target == master.target |
94 | 106 |
|
95 | 107 |
|
96 | | -def test_rename(repo): |
| 108 | +def test_rename(repo: Repository) -> None: |
97 | 109 | old_ref = repo.backend.lookup('refs/heads/i18n') |
98 | 110 | target = repo.get(old_ref.target) |
| 111 | + assert isinstance(target, Commit) |
99 | 112 | repo.backend.rename( |
100 | 113 | 'refs/heads/i18n', 'refs/heads/intl', False, target.committer, target.message |
101 | 114 | ) |
102 | 115 | assert repo.backend.lookup('refs/heads/intl').target == target.id |
103 | 116 |
|
104 | 117 |
|
105 | | -def test_delete(repo): |
| 118 | +def test_delete(repo: Repository) -> None: |
106 | 119 | old = repo.backend.lookup('refs/heads/i18n') |
107 | 120 | repo.backend.delete('refs/heads/i18n', old.target, None) |
108 | 121 | assert not repo.backend.lookup('refs/heads/i18n') |
109 | 122 |
|
110 | 123 |
|
111 | | -def test_compress(repo): |
| 124 | +def test_compress(repo: Repository) -> None: |
112 | 125 | repo = repo |
113 | 126 | packed_refs_file = Path(repo.path) / 'packed-refs' |
114 | 127 | assert not packed_refs_file.exists() |
115 | 128 | repo.backend.compress() |
116 | 129 | assert packed_refs_file.exists() |
117 | 130 |
|
118 | 131 |
|
119 | | -def test_has_log(repo): |
| 132 | +def test_has_log(repo: Repository) -> None: |
120 | 133 | assert repo.backend.has_log('refs/heads/master') |
121 | 134 | assert not repo.backend.has_log('refs/heads/does-not-exist') |
122 | 135 |
|
123 | 136 |
|
124 | | -def test_ensure_log(repo): |
| 137 | +def test_ensure_log(repo: Repository) -> None: |
125 | 138 | assert not repo.backend.has_log('refs/heads/new-log') |
126 | 139 | repo.backend.ensure_log('refs/heads/new-log') |
127 | 140 | assert repo.backend.has_log('refs/heads/new-log') |
0 commit comments