vendorificator 0.5.git.v0.4.0.17.g26d50d8 → 0.5.git.v0.4.0.60.g9c35209
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Gemfile +1 -0
- data/README.md +7 -7
- data/features/chef_cookbook.feature +4 -4
- data/features/download.feature +1 -1
- data/features/edgecases.feature +2 -2
- data/features/environment.feature +54 -3
- data/features/git.feature +5 -5
- data/features/needed.feature +2 -2
- data/features/status.feature +3 -3
- data/features/tarball.feature +5 -5
- data/features/tarball_edit.feature +1 -1
- data/features/tool.feature +4 -4
- data/features/tool_shortcuts.feature +2 -2
- data/features/vendor.feature +1 -1
- data/lib/vendorificator/cli.rb +84 -30
- data/lib/vendorificator/environment.rb +118 -44
- data/lib/vendorificator/errors.rb +1 -0
- data/lib/vendorificator/hooks/chef_cookbook.rb +1 -1
- data/lib/vendorificator/io_proxy.rb +46 -0
- data/lib/vendorificator/vendor/archive.rb +2 -2
- data/lib/vendorificator/vendor/chef_cookbook.rb +1 -1
- data/lib/vendorificator/vendor/download.rb +2 -2
- data/lib/vendorificator/vendor/git.rb +1 -1
- data/lib/vendorificator/vendor.rb +50 -24
- data/lib/vendorificator.rb +1 -0
- data/spec/spec_helper.rb +4 -3
- data/spec/vendorificator/environment_spec.rb +59 -14
- data/spec/vendorificator/vendor_spec.rb +66 -25
- metadata +3 -6
- data/spec/vendorificator/fixtures/vendorfiles/empty_vendor.rb +0 -1
- data/spec/vendorificator/fixtures/vendorfiles/vendor.rb +0 -15
@@ -6,23 +6,28 @@ require 'vendorificator/config'
|
|
6
6
|
module Vendorificator
|
7
7
|
class Environment
|
8
8
|
attr_reader :config
|
9
|
-
attr_accessor :
|
9
|
+
attr_accessor :vendor_instances, :io
|
10
10
|
|
11
|
-
def initialize(vendorfile=nil, &block)
|
11
|
+
def initialize(shell, verbosity = :default, vendorfile = nil, &block)
|
12
12
|
@vendor_instances = []
|
13
|
+
@io = IOProxy.new(shell, verbosity)
|
14
|
+
@vendorfile = find_vendorfile(vendorfile)
|
15
|
+
@vendor_block = block
|
13
16
|
|
14
17
|
@config = Vendorificator::Config.new
|
15
18
|
@config.environment = self
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
19
|
+
end
|
20
|
+
|
21
|
+
def shell
|
22
|
+
io.shell
|
23
|
+
end
|
20
24
|
|
21
|
-
|
25
|
+
def say(*args)
|
26
|
+
io.say(*args)
|
22
27
|
end
|
23
28
|
|
24
29
|
def say_status(*args)
|
25
|
-
|
30
|
+
io.say_status(*args)
|
26
31
|
end
|
27
32
|
|
28
33
|
# Main MiniGit instance
|
@@ -49,10 +54,12 @@ module Vendorificator
|
|
49
54
|
#
|
50
55
|
# Returns nothing.
|
51
56
|
def pull_all(options = {})
|
57
|
+
load_vendorfile
|
58
|
+
|
52
59
|
ensure_clean!
|
53
60
|
remotes = options[:remote] ? options[:remote].split(',') : config[:remotes]
|
54
61
|
remotes.each do |remote|
|
55
|
-
indent 'remote', remote do
|
62
|
+
indent :default, 'remote', remote do
|
56
63
|
pull(remote, options)
|
57
64
|
end
|
58
65
|
end
|
@@ -68,7 +75,10 @@ module Vendorificator
|
|
68
75
|
|
69
76
|
git.fetch(remote)
|
70
77
|
git.fetch({:tags => true}, remote)
|
71
|
-
|
78
|
+
begin
|
79
|
+
git.fetch(remote, 'refs/notes/vendor:refs/notes/vendor')
|
80
|
+
rescue MiniGit::GitError # ignore
|
81
|
+
end
|
72
82
|
|
73
83
|
ref_rx = /^refs\/remotes\/#{Regexp.quote(remote)}\//
|
74
84
|
remote_branches = Hash[ git.capturing.show_ref.
|
@@ -82,20 +92,20 @@ module Vendorificator
|
|
82
92
|
theirs = remote_branches[mod.branch_name]
|
83
93
|
if theirs
|
84
94
|
if not ours
|
85
|
-
say_status 'new', mod.branch_name, :yellow
|
95
|
+
say_status :default, 'new', mod.branch_name, :yellow
|
86
96
|
git.branch({:track => true}, mod.branch_name, theirs) unless options[:dry_run]
|
87
97
|
elsif ours == theirs
|
88
|
-
say_status 'unchanged', mod.branch_name
|
98
|
+
say_status :default, 'unchanged', mod.branch_name
|
89
99
|
elsif fast_forwardable?(theirs, ours)
|
90
|
-
say_status 'updated', mod.name, :yellow
|
100
|
+
say_status :default, 'updated', mod.name, :yellow
|
91
101
|
mod.in_branch { git.merge({:ff_only => true}, theirs) } unless options[:dry_run]
|
92
102
|
elsif fast_forwardable?(ours, theirs)
|
93
|
-
say_status 'older', mod.branch_name
|
103
|
+
say_status :default, 'older', mod.branch_name
|
94
104
|
else
|
95
|
-
say_status 'complicated', mod.branch_name, :red
|
105
|
+
say_status :default, 'complicated', mod.branch_name, :red
|
96
106
|
end
|
97
107
|
else
|
98
|
-
say_status 'unknown', mod.branch_name
|
108
|
+
say_status :default, 'unknown', mod.branch_name
|
99
109
|
end
|
100
110
|
end
|
101
111
|
end
|
@@ -107,35 +117,64 @@ module Vendorificator
|
|
107
117
|
#
|
108
118
|
# Returns nothing.
|
109
119
|
def info(mod_name, options = {})
|
120
|
+
load_vendorfile
|
121
|
+
|
110
122
|
if vendor = find_vendor_instance_by_name(mod_name)
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
123
|
+
say :default, "Module name: #{vendor.name}\n"
|
124
|
+
say :default, "Module group: #{vendor.group}\n"
|
125
|
+
say :default, "Module merged version: #{vendor.merged_version}\n"
|
126
|
+
say :default, "Module merged notes: #{vendor.merged_notes.ai}\n"
|
115
127
|
elsif (commit = Commit.new(mod_name, git)).exists?
|
116
|
-
|
117
|
-
|
128
|
+
say :default, "Branches that contain this commit: #{commit.branches.join(', ')}\n"
|
129
|
+
say :default, "Vendorificator notes on this commit: #{commit.notes.ai}\n"
|
118
130
|
else
|
119
|
-
|
131
|
+
say :default, "Module or ref #{mod_name.inspect} not found."
|
120
132
|
end
|
121
133
|
end
|
122
134
|
|
135
|
+
# Public: Displays info about current modules.
|
136
|
+
#
|
137
|
+
# Returns nothing.
|
138
|
+
def list
|
139
|
+
load_vendorfile
|
140
|
+
|
141
|
+
each_vendor_instance do |mod|
|
142
|
+
shell.say "Module: #{mod.name}, version: #{mod.version}"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
# Public: Displays info about outdated modules.
|
147
|
+
#
|
148
|
+
# Returns nothing.
|
149
|
+
def outdated
|
150
|
+
load_vendorfile
|
151
|
+
|
152
|
+
outdated = []
|
153
|
+
each_vendor_instance do |mod|
|
154
|
+
outdated << mod if [:unpulled, :unmerged, :outdated].include? mod.status
|
155
|
+
end
|
156
|
+
|
157
|
+
outdated.each { |mod| say_status :quiet, 'outdated', mod.name }
|
158
|
+
end
|
159
|
+
|
123
160
|
# Public: Push changes on module branches.
|
124
161
|
#
|
125
162
|
# options - The Hash containing options
|
126
163
|
#
|
127
164
|
# Returns nothing.
|
128
165
|
def push(options = {})
|
166
|
+
load_vendorfile
|
167
|
+
|
129
168
|
ensure_clean!
|
130
169
|
|
131
170
|
pushable = []
|
132
|
-
each_vendor_instance{ |mod| pushable += mod.pushable_refs }
|
171
|
+
each_vendor_instance { |mod| pushable += mod.pushable_refs }
|
172
|
+
|
173
|
+
pushable << 'refs/notes/vendor' if has_notes?
|
133
174
|
|
134
175
|
remotes = options[:remote] ? options[:remote].split(',') : config[:remotes]
|
135
176
|
remotes.each do |remote|
|
136
177
|
git.push remote, pushable
|
137
|
-
git.push remote, :tags => true
|
138
|
-
git.push remote, 'refs/notes/vendor'
|
139
178
|
end
|
140
179
|
end
|
141
180
|
|
@@ -145,12 +184,14 @@ module Vendorificator
|
|
145
184
|
#
|
146
185
|
# Returns nothing.
|
147
186
|
def sync(options = {})
|
187
|
+
load_vendorfile
|
188
|
+
|
148
189
|
ensure_clean!
|
149
190
|
config[:use_upstream_version] = options[:update]
|
150
191
|
metadata = metadata_snapshot
|
151
192
|
|
152
193
|
each_vendor_instance(*options[:modules]) do |mod|
|
153
|
-
say_status :module, mod.name
|
194
|
+
say_status :default, :module, mod.name
|
154
195
|
indent do
|
155
196
|
mod.run!(:metadata => metadata)
|
156
197
|
end
|
@@ -159,12 +200,10 @@ module Vendorificator
|
|
159
200
|
|
160
201
|
# Public: Goes through all the Vendor instances and runs the block
|
161
202
|
#
|
162
|
-
# modules -
|
203
|
+
# modules - An Array of vendor modules to yield the block for.
|
163
204
|
#
|
164
205
|
# Returns nothing.
|
165
206
|
def each_vendor_instance(*modules)
|
166
|
-
modpaths = modules.map { |m| File.expand_path(m) }
|
167
|
-
|
168
207
|
# We don't use @vendor_instances.each here, because Vendor#run! is
|
169
208
|
# explicitly allowed to append to instantiate new dependencies, and #each
|
170
209
|
# fails to catch up on some Ruby implementations.
|
@@ -172,9 +211,7 @@ module Vendorificator
|
|
172
211
|
while true
|
173
212
|
break if i >= @vendor_instances.length
|
174
213
|
mod = @vendor_instances[i]
|
175
|
-
yield mod if modules.empty? ||
|
176
|
-
modules.include?(mod.name) ||
|
177
|
-
modpaths.include?(mod.work_dir)
|
214
|
+
yield mod if modules.empty? || mod.included_in_list?(modules)
|
178
215
|
i += 1
|
179
216
|
end
|
180
217
|
end
|
@@ -204,7 +241,8 @@ module Vendorificator
|
|
204
241
|
# Public: returns `config[:root_dir]` relative to Git repository root
|
205
242
|
def relative_root_dir
|
206
243
|
@relative_root_dir ||= config[:root_dir].relative_path_from(
|
207
|
-
Pathname.new(git.git_work_tree)
|
244
|
+
Pathname.new(git.git_work_tree)
|
245
|
+
)
|
208
246
|
end
|
209
247
|
|
210
248
|
# Public: Returns module with given name
|
@@ -212,16 +250,41 @@ module Vendorificator
|
|
212
250
|
vendor_instances.find { |v| v.name == name }
|
213
251
|
end
|
214
252
|
|
253
|
+
# Public: Loads the vendorfile.
|
254
|
+
#
|
255
|
+
# Returns nothing.
|
256
|
+
def load_vendorfile
|
257
|
+
raise RuntimeError, 'Vendorfile has been already loaded!' if @vendorfile_loaded
|
258
|
+
|
259
|
+
if @vendorfile
|
260
|
+
@config.read_file @vendorfile.to_s
|
261
|
+
else
|
262
|
+
raise MissingVendorfileError unless @vendor_block
|
263
|
+
end
|
264
|
+
@config.instance_eval(&@vendor_block) if @vendor_block
|
265
|
+
|
266
|
+
each_vendor_instance{ |mod| mod.compute_dependencies! }
|
267
|
+
|
268
|
+
@vendorfile_loaded = true
|
269
|
+
end
|
270
|
+
|
271
|
+
# Public: Checks if vendorfile has been already loaded.
|
272
|
+
#
|
273
|
+
# Returns boolean.
|
274
|
+
def vendorfile_loaded?
|
275
|
+
defined?(@vendorfile_loaded) && @vendorfile_loaded
|
276
|
+
end
|
277
|
+
|
215
278
|
private
|
216
279
|
|
217
|
-
# Private: Finds a vendor instance by module name.
|
280
|
+
# Private: Finds a vendor instance by module (qualified) name, path or branch.
|
218
281
|
#
|
219
|
-
# mod_name - The String containing the module
|
282
|
+
# mod_name - The String containing the module id.
|
220
283
|
#
|
221
284
|
# Returns Vendor instance.
|
222
285
|
def find_vendor_instance_by_name(mod_name)
|
223
|
-
each_vendor_instance do |mod|
|
224
|
-
return mod
|
286
|
+
each_vendor_instance(mod_name) do |mod|
|
287
|
+
return mod
|
225
288
|
end
|
226
289
|
nil
|
227
290
|
end
|
@@ -231,8 +294,8 @@ module Vendorificator
|
|
231
294
|
# given - the optional String containing vendorfile path.
|
232
295
|
#
|
233
296
|
# Returns a String containing the vendorfile path.
|
234
|
-
def find_vendorfile(given=nil)
|
235
|
-
given = [
|
297
|
+
def find_vendorfile(given = nil)
|
298
|
+
given = [given, ENV['VENDORFILE']].find do |candidate|
|
236
299
|
candidate && !(candidate.respond_to?(:empty?) && candidate.empty?)
|
237
300
|
end
|
238
301
|
return given if given
|
@@ -247,11 +310,11 @@ module Vendorificator
|
|
247
310
|
# avoid stepping above the tmp directory when testing
|
248
311
|
if ENV['VENDORIFICATOR_SPEC_RUN'] &&
|
249
312
|
dir.join('vendorificator.gemspec').exist?
|
250
|
-
|
313
|
+
break
|
251
314
|
end
|
252
315
|
end
|
253
316
|
|
254
|
-
|
317
|
+
return nil
|
255
318
|
end
|
256
319
|
|
257
320
|
# Private: Aborts on a dirty repository.
|
@@ -264,12 +327,23 @@ module Vendorificator
|
|
264
327
|
# Private: Indents the output.
|
265
328
|
#
|
266
329
|
# Returns nothing.
|
267
|
-
def indent(*args, &block)
|
268
|
-
say_status *args unless args.empty?
|
330
|
+
def indent(verb_level = :default, *args, &block)
|
331
|
+
say_status verb_level, *args unless args.empty?
|
269
332
|
shell.padding += 1 if shell
|
270
333
|
yield
|
271
334
|
ensure
|
272
335
|
shell.padding -= 1 if shell
|
273
336
|
end
|
337
|
+
|
338
|
+
# Private: Checks if there are git vendor notes.
|
339
|
+
#
|
340
|
+
# Returns true/false.
|
341
|
+
def has_notes?
|
342
|
+
git.capturing.rev_parse({:quiet => true, :verify => true}, 'refs/notes/vendor')
|
343
|
+
true
|
344
|
+
rescue MiniGit::GitError
|
345
|
+
false
|
346
|
+
end
|
347
|
+
|
274
348
|
end
|
275
349
|
end
|
@@ -26,7 +26,7 @@ module Vendorificator::Hooks
|
|
26
26
|
metadata = File.join(self.work_dir, 'metadata.rb')
|
27
27
|
|
28
28
|
unless File.exist?(metadata)
|
29
|
-
|
29
|
+
say_status :quiet, 'WARNING', "Metadata of #{name} does not exist at #{metadata}, could not gather dependencies", :red
|
30
30
|
return super
|
31
31
|
end
|
32
32
|
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
3
|
+
module Vendorificator
|
4
|
+
class IOProxy < StringIO
|
5
|
+
attr_reader :shell
|
6
|
+
|
7
|
+
def initialize(shell, verbosity = :default)
|
8
|
+
@shell = shell
|
9
|
+
@verbosity = verbosity
|
10
|
+
|
11
|
+
super()
|
12
|
+
capture_stdout
|
13
|
+
end
|
14
|
+
|
15
|
+
def puts(value, verb_level = :default)
|
16
|
+
@orig_stdout.puts value if should_speak?(verb_level)
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def say_status(verb_level, *args)
|
21
|
+
write args[0..1].join(' ' * @shell.padding)
|
22
|
+
@shell.say_status(*args) if @shell && should_speak?(verb_level)
|
23
|
+
end
|
24
|
+
|
25
|
+
def say(verb_level, *args)
|
26
|
+
write args[0]
|
27
|
+
@shell.say(*args) if @shell && should_speak?(verb_level)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def capture_stdout
|
33
|
+
@orig_stdout = $stdout
|
34
|
+
|
35
|
+
$stdout = self
|
36
|
+
end
|
37
|
+
|
38
|
+
def should_speak?(level)
|
39
|
+
levels = {:quiet => 1, :default => 2, :chatty => 3, :debug => 9}
|
40
|
+
raise "Unknown verbosity level: #{level.inspect}" if levels[level].nil?
|
41
|
+
|
42
|
+
levels[level] <= levels[@verbosity]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
@@ -13,9 +13,9 @@ module Vendorificator
|
|
13
13
|
attr_reader :conjured_checksum, :conjured_filesize
|
14
14
|
|
15
15
|
def conjure!
|
16
|
-
|
16
|
+
say_status :default, :download, url
|
17
17
|
archive = download_file
|
18
|
-
|
18
|
+
say_status :default, :unpack, filename
|
19
19
|
unpack_file archive
|
20
20
|
add_archive_metadata
|
21
21
|
super
|
@@ -11,11 +11,11 @@ module Vendorificator
|
|
11
11
|
attr_reader :conjured_checksum, :conjured_filesize
|
12
12
|
|
13
13
|
def path
|
14
|
-
args[:path] ||
|
14
|
+
args[:path] || group
|
15
15
|
end
|
16
16
|
|
17
17
|
def conjure!
|
18
|
-
|
18
|
+
say_status :default, :download, url
|
19
19
|
File.open name, 'w' do |outf|
|
20
20
|
outf.write( open(url).read )
|
21
21
|
end
|
@@ -8,7 +8,7 @@ module Vendorificator
|
|
8
8
|
class Vendor
|
9
9
|
|
10
10
|
class << self
|
11
|
-
attr_accessor :
|
11
|
+
attr_accessor :group, :method_name
|
12
12
|
|
13
13
|
def arg_reader(*names)
|
14
14
|
names.each do |name|
|
@@ -41,19 +41,28 @@ module Vendorificator
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def path
|
44
|
-
args[:path] || _join(
|
44
|
+
args[:path] || _join(group, name)
|
45
45
|
end
|
46
46
|
|
47
47
|
def shell
|
48
|
-
@shell
|
48
|
+
@environment.shell
|
49
49
|
end
|
50
50
|
|
51
|
-
def
|
52
|
-
|
51
|
+
def say(verb_level= :default, &block)
|
52
|
+
output = yield
|
53
|
+
@environment.say verb_level, output
|
54
|
+
end
|
55
|
+
|
56
|
+
def say_status(*args, &block)
|
57
|
+
@environment.say_status(*args, &block)
|
58
|
+
end
|
59
|
+
|
60
|
+
def group
|
61
|
+
defined?(@group) ? @group : self.class.group
|
53
62
|
end
|
54
63
|
|
55
64
|
def branch_name
|
56
|
-
_join(config[:branch_prefix],
|
65
|
+
_join(config[:branch_prefix], group, name)
|
57
66
|
end
|
58
67
|
|
59
68
|
def to_s
|
@@ -167,14 +176,17 @@ module Vendorificator
|
|
167
176
|
rescue MiniGit::GitError
|
168
177
|
nil
|
169
178
|
end
|
170
|
-
Dir.mktmpdir("vendor-#{
|
179
|
+
Dir.mktmpdir("vendor-#{group}-#{name}") do |tmpdir|
|
171
180
|
clone_opts = {:shared => true, :no_checkout => true}
|
172
181
|
clone_opts[:branch] = branch_name if branch_exists
|
173
|
-
MiniGit.git(:clone, clone_opts, git.git_dir, tmpdir)
|
174
|
-
tmpgit = MiniGit
|
182
|
+
say { MiniGit::Capturing.git(:clone, clone_opts, git.git_dir, tmpdir) }
|
183
|
+
tmpgit = MiniGit.new(tmpdir)
|
184
|
+
#TODO: Silence/handle the stderr output from git-checkout
|
185
|
+
tmpgit.capturing.checkout({orphan: true}, branch_name) unless branch_exists
|
175
186
|
tmpgit.fetch(git.git_dir, "refs/notes/vendor:refs/notes/vendor") if notes_exist
|
176
|
-
|
177
|
-
|
187
|
+
if options[:clean] || !branch_exists
|
188
|
+
tmpgit.rm({ :r => true, :f => true, :q => true, :ignore_unmatch => true }, '.')
|
189
|
+
end
|
178
190
|
|
179
191
|
begin
|
180
192
|
@git = tmpgit
|
@@ -185,6 +197,7 @@ module Vendorificator
|
|
185
197
|
@git = nil
|
186
198
|
end
|
187
199
|
|
200
|
+
#TODO: Silence/handle the stderr output from git-fetch
|
188
201
|
git.fetch(tmpdir)
|
189
202
|
git.fetch({tags: true}, tmpdir)
|
190
203
|
git.fetch(tmpdir,
|
@@ -197,16 +210,16 @@ module Vendorificator
|
|
197
210
|
case status
|
198
211
|
|
199
212
|
when :up_to_date
|
200
|
-
|
213
|
+
say_status :default, 'up to date', self.to_s
|
201
214
|
|
202
215
|
when :unpulled, :unmerged
|
203
|
-
|
216
|
+
say_status :default, 'merging', self.to_s, :yellow
|
204
217
|
git.merge({:no_edit => true, :no_ff => true}, tagged_sha1)
|
205
218
|
postprocess! if self.respond_to? :postprocess!
|
206
219
|
compute_dependencies!
|
207
220
|
|
208
221
|
when :outdated, :new
|
209
|
-
|
222
|
+
say_status :default, 'fetching', self.to_s, :yellow
|
210
223
|
begin
|
211
224
|
shell.padding += 1
|
212
225
|
before_conjure!
|
@@ -237,7 +250,7 @@ module Vendorificator
|
|
237
250
|
end
|
238
251
|
|
239
252
|
else
|
240
|
-
say_status self.status, "I'm unsure what to do.", :red
|
253
|
+
say_status :quiet, self.status, "I'm unsure what to do.", :red
|
241
254
|
end
|
242
255
|
end
|
243
256
|
|
@@ -245,30 +258,41 @@ module Vendorificator
|
|
245
258
|
block.call(self) if block
|
246
259
|
end
|
247
260
|
|
248
|
-
#
|
249
261
|
# Hook points
|
250
262
|
def git_add_extra_paths ; [] ; end
|
251
263
|
def before_conjure! ; end
|
252
264
|
def compute_dependencies! ; end
|
253
265
|
|
254
266
|
def pushable_refs
|
255
|
-
created_tags.
|
256
|
-
map { |tag| '+' << tag }.
|
257
|
-
unshift("+refs/heads/#{branch_name}")
|
267
|
+
created_tags.unshift("refs/heads/#{branch_name}")
|
258
268
|
end
|
259
269
|
|
260
270
|
def metadata
|
261
271
|
default = {
|
262
272
|
:module_version => version,
|
263
|
-
:
|
273
|
+
:module_group => @group,
|
264
274
|
}
|
265
275
|
default.merge @metadata
|
266
276
|
end
|
267
277
|
|
278
|
+
def included_in_list?(module_list)
|
279
|
+
modpaths = module_list.map { |m| File.expand_path(m) }
|
280
|
+
|
281
|
+
module_list.include?(name) ||
|
282
|
+
module_list.include?("#{group}/#{name}") ||
|
283
|
+
modpaths.include?(File.expand_path(work_dir)) ||
|
284
|
+
module_list.include?(merged) ||
|
285
|
+
module_list.include?(branch_name)
|
286
|
+
end
|
287
|
+
|
268
288
|
private
|
269
289
|
|
270
290
|
def parse_initialize_args(args = {})
|
271
|
-
@
|
291
|
+
@group = args.delete(:group) if args.key?(:group)
|
292
|
+
if args.key?(:category)
|
293
|
+
@group ||= args.delete(:category)
|
294
|
+
say_status :default, 'DEPRECATED', 'Using :category option is deprecated and will be removed in future versions. Use :group instead.'
|
295
|
+
end
|
272
296
|
|
273
297
|
unless (hooks = Array(args.delete(:hooks))).empty?
|
274
298
|
hooks.each do |hook|
|
@@ -282,7 +306,7 @@ module Vendorificator
|
|
282
306
|
end
|
283
307
|
|
284
308
|
def tag_name_base
|
285
|
-
_join('vendor',
|
309
|
+
_join('vendor', group, name)
|
286
310
|
end
|
287
311
|
|
288
312
|
def conjure_commit_message
|
@@ -294,7 +318,9 @@ module Vendorificator
|
|
294
318
|
end
|
295
319
|
|
296
320
|
def tagged_sha1
|
297
|
-
@tagged_sha1 ||= git.capturing.rev_parse(
|
321
|
+
@tagged_sha1 ||= git.capturing.rev_parse(
|
322
|
+
{:verify => true, :quiet => true}, "refs/tags/#{tag_name}^{commit}"
|
323
|
+
).strip
|
298
324
|
rescue MiniGit::GitError
|
299
325
|
nil
|
300
326
|
end
|
@@ -340,7 +366,7 @@ module Vendorificator
|
|
340
366
|
git.capturing.commit :m => conjure_commit_message
|
341
367
|
git.capturing.notes({:ref => 'vendor'}, 'add', {:m => conjure_note(environment_metadata)}, 'HEAD')
|
342
368
|
git.capturing.tag( { :a => true, :m => tag_message }, tag_name )
|
343
|
-
|
369
|
+
say_status :default, :tag, tag_name
|
344
370
|
end
|
345
371
|
|
346
372
|
# Private: Merges all the data we use for the commit note.
|
data/lib/vendorificator.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -44,8 +44,9 @@ class MiniTest::Spec
|
|
44
44
|
include Vendorificator::Spec::Helpers::Wrong
|
45
45
|
|
46
46
|
before do
|
47
|
-
_git = stub
|
48
|
-
|
47
|
+
_git = stub('git')
|
48
|
+
_capturing = stub('git.capturing')
|
49
|
+
_git.stubs(:capturing).returns(_capturing)
|
49
50
|
Vendorificator::Environment.any_instance.stubs(:git).returns(_git)
|
50
51
|
end
|
51
52
|
|
@@ -55,7 +56,7 @@ class MiniTest::Spec
|
|
55
56
|
|
56
57
|
def basic_environment
|
57
58
|
@basic_environment ||= Vendorificator::Environment.new(
|
58
|
-
|
59
|
+
Thor::Shell::Basic.new, :quiet, nil
|
59
60
|
)
|
60
61
|
end
|
61
62
|
|