Skip to content

Commit d35b4e5

Browse files
authored
add Tag.raw_without_sig method and unittest (#1450)
2 parents 5f4839b + b3c6c71 commit d35b4e5

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

dulwich/objects.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -917,6 +917,16 @@ def sign(self, keyid: Optional[str] = None) -> None:
917917
self.as_raw_string(), mode=gpg.constants.sig.mode.DETACH
918918
)
919919

920+
def raw_without_sig(self) -> bytes:
921+
"""Return raw string serialization without the GPG/SSH signature.
922+
923+
self.signature is a signature for the returned raw byte string serialization.
924+
"""
925+
ret = self.as_raw_string()
926+
if self._signature:
927+
ret = ret[: -len(self._signature)]
928+
return ret
929+
920930
def verify(self, keyids: Optional[Iterable[str]] = None) -> None:
921931
"""Verify GPG signature for this tag (if it is signed).
922932
@@ -938,7 +948,7 @@ def verify(self, keyids: Optional[Iterable[str]] = None) -> None:
938948

939949
with gpg.Context() as ctx:
940950
data, result = ctx.verify(
941-
self.as_raw_string()[: -len(self._signature)],
951+
self.raw_without_sig(),
942952
signature=self._signature,
943953
)
944954
if keyids:

tests/test_objects.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ def test_read_tag_from_file(self) -> None:
218218
b"=ql7y\n"
219219
b"-----END PGP SIGNATURE-----\n",
220220
)
221+
self.assertEqual(t.raw_without_sig() + t.signature, bytes(t))
221222

222223
def test_read_commit_from_file(self) -> None:
223224
sha = b"60dacdc733de308bb77bb76ce0fb0f9b44c9769e"
@@ -1238,6 +1239,23 @@ def test_tree_copy_after_update(self) -> None:
12381239
self.assertNotIn(shas[0], shas[1:])
12391240
self.assertEqual(shas[1], shas[2])
12401241

1242+
def test_tag_withough_sig(self) -> None:
1243+
x = Tag()
1244+
x.set_raw_string(self.make_tag_text())
1245+
self.assertEqual(bytes(x), x.raw_without_sig() + x.signature)
1246+
self.assertEqual(
1247+
b"""\
1248+
-----BEGIN PGP SIGNATURE-----
1249+
Version: GnuPG v1.4.7 (GNU/Linux)
1250+
1251+
iD8DBQBGiAaAF3YsRnbiHLsRAitMAKCiLboJkQECM/jpYsY3WPfvUgLXkACgg3ql
1252+
OK2XeQOiEeXtT76rV4t2WR4=
1253+
=ivrA
1254+
-----END PGP SIGNATURE-----
1255+
""",
1256+
x.signature,
1257+
)
1258+
12411259

12421260
class CheckTests(TestCase):
12431261
def test_check_hexsha(self) -> None:

0 commit comments

Comments
 (0)