Class: Gitlab::SignedTag
- Inherits:
-
Object
show all
- Includes:
- Utils::StrongMemoize
- Defined in:
- lib/gitlab/signed_tag.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(repository, context) ⇒ SignedTag
Returns a new instance of SignedTag.
50
51
52
53
|
# File 'lib/gitlab/signed_tag.rb', line 50
def initialize(repository, context)
@repository = repository
@context = context
end
|
Instance Attribute Details
#context ⇒ Object
Returns the value of attribute context.
55
56
57
|
# File 'lib/gitlab/signed_tag.rb', line 55
def context
@context
end
|
#repository ⇒ Object
Returns the value of attribute repository.
55
56
57
|
# File 'lib/gitlab/signed_tag.rb', line 55
def repository
@repository
end
|
Class Method Details
.batch_read_cached_signatures(project, signed_tags) ⇒ Object
32
33
34
35
36
37
38
|
# File 'lib/gitlab/signed_tag.rb', line 32
def batch_read_cached_signatures(project, signed_tags)
signed_tags.group_by(&:signature_class).flat_map do |klass, signed_tags|
next [] unless klass
klass.by_project(project).by_object_name(signed_tags.map(&:object_name))
end
end
|
.batch_write_cached_signatures(signed_tags, timeout: GitalyClient.fast_timeout) ⇒ Object
40
41
42
43
44
45
46
47
|
# File 'lib/gitlab/signed_tag.rb', line 40
def batch_write_cached_signatures(signed_tags, timeout: GitalyClient.fast_timeout)
signed_tags.each { |st| st.signature_data(timeout: timeout) }
new_cached_signatures = signed_tags.filter_map(&:build_cached_signature)
new_cached_signatures.group_by(&:class).flat_map do |klass, tag_signatures|
klass.bulk_insert!(tag_signatures)
end
new_cached_signatures
end
|
.class_for_signature_type(signature_type) ⇒ Object
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/gitlab/signed_tag.rb', line 13
def class_for_signature_type(signature_type)
case signature_type
when :PGP
Gitlab::Gpg::Tag
when :X509
Gitlab::X509::Tag
when :SSH
Gitlab::Ssh::Tag
end
end
|
.context_from_tag(tag) ⇒ Object
24
25
26
27
28
29
30
|
# File 'lib/gitlab/signed_tag.rb', line 24
def context_from_tag(tag)
{
user_email: tag.user_email,
id: tag.id,
has_signature: tag.has_signature?
}
end
|
.from_repository_tag(repository, tag) ⇒ Object
8
9
10
11
|
# File 'lib/gitlab/signed_tag.rb', line 8
def from_repository_tag(repository, tag)
klass = class_for_signature_type(tag.signature_type)
klass&.new(repository, klass.context_from_tag(tag))
end
|
Instance Method Details
#attributes ⇒ Object
104
|
# File 'lib/gitlab/signed_tag.rb', line 104
def attributes; end
|
#build_cached_signature ⇒ Object
96
97
98
99
100
101
102
|
# File 'lib/gitlab/signed_tag.rb', line 96
def build_cached_signature
attrs = attributes
return if attrs.nil?
now = Time.now.utc
signature_class.new(attrs.merge(created_at: now, updated_at: now))
end
|
#lazy_cached_signature(timeout: GitalyClient.fast_timeout) ⇒ Object
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'lib/gitlab/signed_tag.rb', line 72
def lazy_cached_signature(timeout: GitalyClient.fast_timeout)
BatchLoader.for(self).batch(key: @repository.container.id) do |signed_tags, loader, args|
tags_by_id = signed_tags.group_by(&:object_name)
cache_hits = Set.new
cached_signatures = Gitlab::SignedTag.batch_read_cached_signatures(args[:key], signed_tags)
cached_signatures.each do |tag_signature|
cache_hits.add(tag_signature.object_name)
loader.call(tags_by_id[tag_signature.object_name].first, tag_signature)
end
cache_misses = signed_tags.reject { |t| cache_hits.include?(t.object_name) }
new_cached_signatures = Gitlab::SignedTag.batch_write_cached_signatures(cache_misses,
timeout: timeout)
new_cached_signatures.each do |tag_signature|
loader.call(tags_by_id[tag_signature.object_name].first, tag_signature)
end
end
end
|
#object_name ⇒ Object
57
58
59
|
# File 'lib/gitlab/signed_tag.rb', line 57
def object_name
@context[:id]
end
|
#signature ⇒ Object
68
69
70
|
# File 'lib/gitlab/signed_tag.rb', line 68
def signature
return unless context[:has_signature]
end
|
#signature_class ⇒ Object
94
|
# File 'lib/gitlab/signed_tag.rb', line 94
def signature_class; end
|
#signature_data(timeout: GitalyClient.fast_timeout) ⇒ Object
61
62
63
64
65
66
|
# File 'lib/gitlab/signed_tag.rb', line 61
def signature_data(timeout: GitalyClient.fast_timeout)
return unless @repository
@signature_data ||= Gitlab::Git::Tag.(@repository, object_name,
timeout: timeout)
end
|
#signature_text ⇒ Object
106
107
108
|
# File 'lib/gitlab/signed_tag.rb', line 106
def signature_text
signature_data&.fetch(0)
end
|
#signed_text ⇒ Object
110
111
112
|
# File 'lib/gitlab/signed_tag.rb', line 110
def signed_text
signature_data&.fetch(1)
end
|