Module: HasRepository
Overview
This concern is created to handle repository actions. It should be include inside any object capable of directly having a repository, like project or snippet.
It also includes Referable, therefore the method to_reference should be overridden in case the object needs any special behavior.
Instance Method Summary
collapse
#gitlab_shell
Methods included from Referable
#referable_inspect, #reference_link_text, #to_reference, #to_reference_base
Instance Method Details
#after_change_head_branch_does_not_exist(branch) ⇒ Object
180
181
182
|
# File 'app/models/concerns/has_repository.rb', line 180
def after_change_head_branch_does_not_exist(branch)
end
|
#after_create_repository ⇒ Object
169
170
171
172
173
174
175
176
177
178
|
# File 'app/models/concerns/has_repository.rb', line 169
def after_create_repository
container_type = self.class.name
container_id = id
run_after_commit_or_now do
Gitlab::EventStore.publish(
::Repositories::RepositoryCreatedEvent.new(data: { container_id: container_id,
container_type: container_type }))
end
end
|
#after_repository_change_head ⇒ Object
158
159
160
161
162
163
164
165
166
167
|
# File 'app/models/concerns/has_repository.rb', line 158
def after_repository_change_head
reload_default_branch
container_type = self.class.name
run_after_commit_or_now do
Gitlab::EventStore.publish(
::Repositories::DefaultBranchChangedEvent.new(data: { container_id: id, container_type: container_type }))
end
end
|
#apply_desired_default_branch ⇒ Object
rubocop:disable Gitlab/ModuleWithInstanceVariables – no alternative without disabling cop
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'app/models/concerns/has_repository.rb', line 99
def apply_desired_default_branch
return unless @desired_default_branch
return if repository.empty?
return if repository.root_ref == @desired_default_branch
if repository.branch_exists?(@desired_default_branch)
repository.change_head(@desired_default_branch)
reload_default_branch
@desired_default_branch = nil
end
rescue StandardError => e
Import::Framework::Logger.warn("Failed to set default branch to #{@desired_default_branch}: #{e.message}")
end
|
#branch_exists?(branch) ⇒ Boolean
45
46
47
|
# File 'app/models/concerns/has_repository.rb', line 45
def branch_exists?(branch)
repository.branch_exists?(branch)
end
|
#commit(ref = 'HEAD') ⇒ Object
41
42
43
|
# File 'app/models/concerns/has_repository.rb', line 41
def commit(ref = 'HEAD')
repository.commit(ref)
end
|
#commit_by(oid:) ⇒ Object
53
54
55
|
# File 'app/models/concerns/has_repository.rb', line 53
def commit_by(oid:)
repository.commit_by(oid: oid)
end
|
#commits_by(oids:) ⇒ Object
57
58
59
|
# File 'app/models/concerns/has_repository.rb', line 57
def commits_by(oids:)
repository.commits_by(oids: oids)
end
|
#default_branch ⇒ Object
81
82
83
|
# File 'app/models/concerns/has_repository.rb', line 81
def default_branch
@default_branch ||= repository.empty? ? default_branch_from_preferences : repository.root_ref
end
|
#default_branch=(branch_name) ⇒ Object
85
86
87
88
89
90
91
92
93
94
95
96
|
# File 'app/models/concerns/has_repository.rb', line 85
def default_branch=(branch_name)
return if branch_name.blank?
return unless instance_of?(Project) && importing?
@desired_default_branch = branch_name
apply_desired_default_branch
end
|
#default_branch_from_group_preferences ⇒ Object
120
121
122
123
124
125
|
# File 'app/models/concerns/has_repository.rb', line 120
def default_branch_from_group_preferences
return unless respond_to?(:group)
return unless group
group.default_branch_name || group.root_ancestor.default_branch_name
end
|
#default_branch_from_preferences ⇒ Object
rubocop:enable Gitlab/ModuleWithInstanceVariables
116
117
118
|
# File 'app/models/concerns/has_repository.rb', line 116
def default_branch_from_preferences
(default_branch_from_group_preferences || Gitlab::CurrentSettings.default_branch_name).presence
end
|
#empty_repo? ⇒ Boolean
77
78
79
|
# File 'app/models/concerns/has_repository.rb', line 77
def empty_repo?
repository.empty?
end
|
#full_path ⇒ Object
69
70
71
|
# File 'app/models/concerns/has_repository.rb', line 69
def full_path
raise NotImplementedError
end
|
#http_url_to_repo ⇒ Object
141
142
143
|
# File 'app/models/concerns/has_repository.rb', line 141
def http_url_to_repo
Gitlab::RepositoryUrlBuilder.build(repository.full_path, protocol: :http)
end
|
#lfs_enabled? ⇒ Boolean
73
74
75
|
# File 'app/models/concerns/has_repository.rb', line 73
def lfs_enabled?
false
end
|
#lfs_http_url_to_repo(_operation = nil) ⇒ Object
Is overridden in EE::Project for Geo support
146
147
148
|
# File 'app/models/concerns/has_repository.rb', line 146
def lfs_http_url_to_repo(_operation = nil)
http_url_to_repo
end
|
#ref_exists?(ref) ⇒ Boolean
49
50
51
|
# File 'app/models/concerns/has_repository.rb', line 49
def ref_exists?(ref)
repository.ref_exists?(ref)
end
|
#reload_default_branch ⇒ Object
127
128
129
130
131
|
# File 'app/models/concerns/has_repository.rb', line 127
def reload_default_branch
@default_branch = nil
default_branch
end
|
#repo_exists? ⇒ Boolean
26
27
28
29
30
|
# File 'app/models/concerns/has_repository.rb', line 26
def repo_exists?
repository.exists?
rescue StandardError
false
end
|
#repository ⇒ Object
61
62
63
|
# File 'app/models/concerns/has_repository.rb', line 61
def repository
raise NotImplementedError
end
|
#repository_exists? ⇒ Boolean
33
34
35
|
# File 'app/models/concerns/has_repository.rb', line 33
def repository_exists?
!!repository.exists?
end
|
#repository_size_checker ⇒ Object
154
155
156
|
# File 'app/models/concerns/has_repository.rb', line 154
def repository_size_checker
raise NotImplementedError
end
|
#root_ref?(branch) ⇒ Boolean
37
38
39
|
# File 'app/models/concerns/has_repository.rb', line 37
def root_ref?(branch)
repository.root_ref == branch
end
|
#ssh_url_to_repo ⇒ Object
137
138
139
|
# File 'app/models/concerns/has_repository.rb', line 137
def ssh_url_to_repo
Gitlab::RepositoryUrlBuilder.build(repository.full_path, protocol: :ssh)
end
|
#storage ⇒ Object
65
66
67
|
# File 'app/models/concerns/has_repository.rb', line 65
def storage
raise NotImplementedError
end
|
#url_to_repo ⇒ Object
133
134
135
|
# File 'app/models/concerns/has_repository.rb', line 133
def url_to_repo
ssh_url_to_repo
end
|
#valid_repo? ⇒ Boolean
19
20
21
22
23
24
|
# File 'app/models/concerns/has_repository.rb', line 19
def valid_repo?
repository.exists?
rescue StandardError
errors.add(:base, _('Invalid repository path'))
false
end
|
#web_url(only_path: nil) ⇒ Object
150
151
152
|
# File 'app/models/concerns/has_repository.rb', line 150
def web_url(only_path: nil)
Gitlab::UrlBuilder.build(self, only_path: only_path)
end
|