Class: Braid::Mirror
Defined Under Namespace
Classes: NoTagAndBranch, PathRequired, UnknownType
Constant Summary
collapse
- ATTRIBUTES =
Since Braid 1.1.0, the attributes are written to .braids.json in this canonical order. For now, the order is chosen to match what Braid 1.0.22 produced for newly added mirrors.
T.let(%w(url branch path tag revision), T::Array[String])
- BreakingChangeCallback =
T.type_alias { T.proc.params(arg0: String).void }
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from T::Sig
sig
#git, #git_cache
Constructor Details
#initialize(path, attributes = {}, breaking_change_cb = DUMMY_BREAKING_CHANGE_CB) ⇒ Mirror
Returns a new instance of Mirror.
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/braid/mirror.rb', line 42
def initialize(path, attributes = {}, breaking_change_cb = DUMMY_BREAKING_CHANGE_CB)
@path = T.let(path.sub(/\/$/, ''), String)
@attributes = T.let(attributes.dup, T::Hash[String, T.untyped])
if !@attributes['type'].nil? && @attributes['type'] != 'git'
breaking_change_cb.call <<-DESC
- Mirror '#{path}' is of a Subversion repository, which is no
longer supported. The mirror will be removed from your configuration, leaving
the data in the tree.
DESC
raise Config::RemoveMirrorDueToBreakingChange
end
@attributes.delete('type')
if @attributes['lock']
@attributes.delete('lock')
@attributes['branch'] = nil
@attributes['tag'] = nil
end
if !@attributes['squashed'].nil? && @attributes['squashed'] != true
breaking_change_cb.call <<-DESC
- Mirror '#{path}' is full-history, which is no longer supported.
It will be changed to squashed. Upstream history already imported will remain
in your project's history and will have no effect on Braid.
DESC
end
@attributes.delete('squashed')
end
|
Instance Attribute Details
#attributes ⇒ Object
Returns the value of attribute attributes.
37
38
39
|
# File 'lib/braid/mirror.rb', line 37
def attributes
@attributes
end
|
#path ⇒ Object
Returns the value of attribute path.
33
34
35
|
# File 'lib/braid/mirror.rb', line 33
def path
@path
end
|
Class Method Details
.new_from_options(url, options = {}) ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# File 'lib/braid/mirror.rb', line 83
def self.new_from_options(url, options = {})
url = url.sub(/\/$/, '')
raise NoTagAndBranch if options['tag'] && options['branch']
tag = options['tag']
branch = options['branch']
path = (options['path'] || (url, options['remote_path'])).sub(/\/$/, '')
raise PathRequired unless path
remote_path = options['remote_path']
attributes = {'url' => url, 'branch' => branch, 'path' => remote_path, 'tag' => tag}
self.new(path, attributes)
end
|
Instance Method Details
#==(comparison) ⇒ Object
101
102
103
|
# File 'lib/braid/mirror.rb', line 101
def ==(comparison)
path == comparison.path && attributes == comparison.attributes
end
|
#base_revision ⇒ Object
215
216
217
218
219
220
221
222
223
224
225
|
# File 'lib/braid/mirror.rb', line 215
def base_revision
nilable_revision = T.let(revision, T.nilable(String))
if nilable_revision
git.rev_parse(revision)
else
inferred_revision
end
end
|
#branch ⇒ Object
265
266
267
|
# File 'lib/braid/mirror.rb', line 265
def branch
self.attributes['branch']
end
|
#branch=(new_value) ⇒ Object
270
271
272
|
# File 'lib/braid/mirror.rb', line 270
def branch=(new_value)
self.attributes['branch'] = new_value
end
|
#cached? ⇒ Boolean
210
211
212
|
# File 'lib/braid/mirror.rb', line 210
def cached?
git.remote_url(remote) == cached_url
end
|
#cached_url ⇒ Object
307
308
309
|
# File 'lib/braid/mirror.rb', line 307
def cached_url
git_cache.path(url)
end
|
#diff ⇒ Object
182
183
184
185
|
# File 'lib/braid/mirror.rb', line 182
def diff
fetch_base_revision_if_missing
git.diff(diff_args)
end
|
#diff_args(user_args = []) ⇒ Object
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
# File 'lib/braid/mirror.rb', line 131
def diff_args(user_args = [])
upstream_item = upstream_item_for_revision(base_revision)
base_tree = git.make_tree_with_item(nil, path, upstream_item)
if upstream_item.is_a?(git.BlobWithMode)
return [
'--relative=' + path,
'--src-prefix=a/' + File.basename(T.must(remote_path)),
'--dst-prefix=b/' + File.basename(path),
base_tree,
*user_args,
path
]
else
return [
'--relative=' + path + '/',
base_tree,
*user_args
]
end
end
|
#fetch ⇒ Object
204
205
206
207
|
# File 'lib/braid/mirror.rb', line 204
def fetch
git_cache.fetch(url) if cached?
git.fetch(remote)
end
|
#fetch_base_revision_if_missing ⇒ Object
193
194
195
196
197
198
199
200
201
|
# File 'lib/braid/mirror.rb', line 193
def fetch_base_revision_if_missing
begin
git.rev_parse(base_revision + '^{commit}')
rescue Operations::UnknownRevision
fetch
end
end
|
#local_ref ⇒ Object
228
229
230
231
232
233
|
# File 'lib/braid/mirror.rb', line 228
def local_ref
return "#{self.remote}/#{self.branch}" unless self.branch.nil?
return "tags/#{self.tag}" unless self.tag.nil?
T.must(self.revision)
end
|
#locked? ⇒ Boolean
106
107
108
|
# File 'lib/braid/mirror.rb', line 106
def locked?
branch.nil? && tag.nil?
end
|
#merged?(commit) ⇒ Boolean
111
112
113
114
115
116
|
# File 'lib/braid/mirror.rb', line 111
def merged?(commit)
commit = git.rev_parse(commit)
!!base_revision && git.merge_base(commit, base_revision) == commit
end
|
#remote ⇒ Object
312
313
314
|
# File 'lib/braid/mirror.rb', line 312
def remote
"#{branch || tag || 'revision'}/braid/#{path}".gsub(/\/\./, '/_')
end
|
#remote_path ⇒ Object
275
276
277
|
# File 'lib/braid/mirror.rb', line 275
def remote_path
self.attributes['path']
end
|
#remote_path=(remote_path) ⇒ Object
280
281
282
|
# File 'lib/braid/mirror.rb', line 280
def remote_path=(remote_path)
self.attributes['path'] = remote_path
end
|
#remote_ref ⇒ Object
239
240
241
|
# File 'lib/braid/mirror.rb', line 239
def remote_ref
self.branch.nil? ? "+refs/tags/#{self.tag}" : "+refs/heads/#{self.branch}"
end
|
#revision ⇒ Object
297
298
299
|
# File 'lib/braid/mirror.rb', line 297
def revision
self.attributes['revision']
end
|
#revision=(new_value) ⇒ Object
302
303
304
|
# File 'lib/braid/mirror.rb', line 302
def revision=(new_value)
self.attributes['revision'] = new_value
end
|
#tag ⇒ Object
285
286
287
|
# File 'lib/braid/mirror.rb', line 285
def tag
self.attributes['tag']
end
|
#tag=(new_value) ⇒ Object
290
291
292
|
# File 'lib/braid/mirror.rb', line 290
def tag=(new_value)
self.attributes['tag'] = new_value
end
|
#upstream_item_for_revision(revision) ⇒ Object
121
122
123
|
# File 'lib/braid/mirror.rb', line 121
def upstream_item_for_revision(revision)
git.get_tree_item(revision, self.remote_path)
end
|
#url ⇒ Object
255
256
257
|
# File 'lib/braid/mirror.rb', line 255
def url
self.attributes['url']
end
|
#url=(new_value) ⇒ Object
260
261
262
|
# File 'lib/braid/mirror.rb', line 260
def url=(new_value)
self.attributes['url'] = new_value
end
|