Skip to content

Commit 8244ab5

Browse files
committed
Merge pull request #570 from mastahyeti/tag_sigs
Add Tag.extract_signature method
2 parents 32de866 + 8f0d5ca commit 8244ab5

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

lib/rugged/tag.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,24 @@
11
module Rugged
22
class Tag < Rugged::Reference
3+
GPG_SIGNATURE_PREFIX = "-----BEGIN PGP SIGNATURE-----".freeze
4+
5+
def self.extract_signature(repo, oid, prefix=GPG_SIGNATURE_PREFIX)
6+
object = repo.read(oid)
7+
8+
unless object.type == :tag
9+
raise GitRPC::InvalidObject, "Invalid object type #{object.type}, expected tag"
10+
end
11+
12+
if index = object.data.index(prefix)
13+
[
14+
object.data.byteslice(index..-1),
15+
object.data.byteslice(0...index)
16+
]
17+
else
18+
[nil, object.data]
19+
end
20+
end
21+
322
def name
423
canonical_name.sub(%r{^refs/tags/}, "")
524
end

test/tag_test.rb

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,61 @@ def test_each_name
9898
assert_equal tag_names[0], "annotated_tag_to_blob"
9999
assert_equal tag_names[1], "e90810b"
100100
end
101+
102+
def test_extract_signature
103+
raw_tag = <<-TAG
104+
object 36060c58702ed4c2a40832c51758d5344201d89a
105+
type commit
106+
tag signed
107+
tagger Ben Toews <[email protected]> 1455121460 -0700
108+
109+
my signed tag
110+
-----BEGIN PGP SIGNATURE-----
111+
Version: GnuPG v1
112+
113+
iQEcBAABAgAGBQJWu2Q0AAoJEDJi7/JboNJwYNgH/0NQAgNthQi5kiZL5LdAKNE9
114+
HRHj1Gumcqf04pPbuNXBTt4jdsWka8cTLu8q4CVE2EBtJRJfYhoKXt+bhDSa4WRc
115+
W/M02GASaqBbY3BVAI0+jd/nmoUqz97jsYotOjVOhUbIGJjo2V2nKi1x6lAN3Nr2
116+
bq9zJBbYWkIExZU29ycWWk+yTLPGcmcnr0itoUyywgg9NKivH2e8EmyQgAjLUp+M
117+
NL9Fgg5UMTDoRvJs98i+SIJAkNzxN0mypr51G0kmZbWkSEshHvBoZlV731QqmT+j
118+
1+eI1odAMHSNHqkmel8+1yooQQzPFc9ZmxGi8DdyuSv6AD7pzxX5vmU0AuBU9C4=
119+
=Tmm9
120+
-----END PGP SIGNATURE-----
121+
TAG
122+
123+
exp_signature = <<-SIGNATURE
124+
-----BEGIN PGP SIGNATURE-----
125+
Version: GnuPG v1
126+
127+
iQEcBAABAgAGBQJWu2Q0AAoJEDJi7/JboNJwYNgH/0NQAgNthQi5kiZL5LdAKNE9
128+
HRHj1Gumcqf04pPbuNXBTt4jdsWka8cTLu8q4CVE2EBtJRJfYhoKXt+bhDSa4WRc
129+
W/M02GASaqBbY3BVAI0+jd/nmoUqz97jsYotOjVOhUbIGJjo2V2nKi1x6lAN3Nr2
130+
bq9zJBbYWkIExZU29ycWWk+yTLPGcmcnr0itoUyywgg9NKivH2e8EmyQgAjLUp+M
131+
NL9Fgg5UMTDoRvJs98i+SIJAkNzxN0mypr51G0kmZbWkSEshHvBoZlV731QqmT+j
132+
1+eI1odAMHSNHqkmel8+1yooQQzPFc9ZmxGi8DdyuSv6AD7pzxX5vmU0AuBU9C4=
133+
=Tmm9
134+
-----END PGP SIGNATURE-----
135+
SIGNATURE
136+
137+
exp_signed_data = <<-SIGNEDDATA
138+
object 36060c58702ed4c2a40832c51758d5344201d89a
139+
type commit
140+
tag signed
141+
tagger Ben Toews <[email protected]> 1455121460 -0700
142+
143+
my signed tag
144+
SIGNEDDATA
145+
146+
tag_oid = @repo.write(raw_tag, :tag)
147+
148+
signature, signed_data = Rugged::Tag.extract_signature(@repo, tag_oid)
149+
assert_equal exp_signature, signature
150+
assert_equal exp_signed_data, signed_data
151+
152+
signature, signed_data = Rugged::Tag.extract_signature(@repo, tag_oid, Rugged::Tag::GPG_SIGNATURE_PREFIX)
153+
assert_equal exp_signature, signature
154+
assert_equal exp_signed_data, signed_data
155+
end
101156
end
102157

103158
class AnnotatedTagTest < Rugged::TestCase

0 commit comments

Comments
 (0)