pwrake 0.9.6 → 0.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/pwrake/file_utils.rb +1 -0
- data/lib/pwrake/locality_aware_queue.rb +5 -2
- data/lib/pwrake/master.rb +7 -1
- data/lib/pwrake/option.rb +34 -14
- data/lib/pwrake/profiler.rb +2 -1
- data/lib/pwrake/report/parallelism.rb +2 -3
- data/lib/pwrake/shell.rb +20 -1
- data/lib/pwrake/task_algorithm.rb +41 -17
- data/lib/pwrake/task_queue.rb +7 -2
- data/lib/pwrake/version.rb +1 -1
- data/pwrake.gemspec +1 -0
- data/spec/pwrake_spec.rb +3 -3
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8936d0357e38b7b50bee817594555714412fb763
|
4
|
+
data.tar.gz: 1aca5697a842735520300b7c8c81355c08b31240
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4204a54c3920365eaaf4b430a0217b7e63cbe19a4878594dbd7c6381d21e8fceb0e8f3a4a31e238ec8b2dbc4b1d2ca95b914199e1e0c973565540db1c740654
|
7
|
+
data.tar.gz: f2c433d66cb1ecd7eb5340394e1b93d13530238b055d481d5b28c16f48f61402d69c1350a02b5389eaab1af39670db4e108346e70e33afdcaf4236909224df73
|
data/lib/pwrake/file_utils.rb
CHANGED
@@ -143,7 +143,9 @@ module Pwrake
|
|
143
143
|
@enable_steal = !Pwrake.application.pwrake_options['DISABLE_STEAL']
|
144
144
|
@steal_wait = (Pwrake.application.pwrake_options['STEAL_WAIT'] || 0).to_i
|
145
145
|
@steal_wait_max = (Pwrake.application.pwrake_options['STEAL_WAIT_MAX'] || 10).to_i
|
146
|
-
|
146
|
+
@steal_wait_after_enq = (Pwrake.application.pwrake_options['STEAL_WAIT_AFTER_ENQ'] || 0.1).to_f
|
147
|
+
@last_enq_time = Time.now
|
148
|
+
Log.info("-- @enable_steal=#{@enable_steal.inspect} @steal_wait=#{@steal_wait} @steal_wait_max=#{@steal_wait_max} @steal_wait_after_enq={@steal_wait_after_enq}")
|
147
149
|
end
|
148
150
|
|
149
151
|
attr_reader :size
|
@@ -166,6 +168,7 @@ module Pwrake
|
|
166
168
|
@q_remote.push(t)
|
167
169
|
end
|
168
170
|
end
|
171
|
+
@last_enq_time = Time.now
|
169
172
|
@size += 1
|
170
173
|
end
|
171
174
|
|
@@ -191,7 +194,7 @@ module Pwrake
|
|
191
194
|
return t
|
192
195
|
end
|
193
196
|
|
194
|
-
if @enable_steal && n > 0
|
197
|
+
if @enable_steal && n > 0 && Time.now-@last_enq_time > @steal_wait_after_enq
|
195
198
|
if t = deq_steal(host)
|
196
199
|
Log.info "-- deq_steal n=#{n} task=#{t.name} host=#{host}"
|
197
200
|
Log.debug "--- deq_impl\n#{inspect_q}"
|
data/lib/pwrake/master.rb
CHANGED
@@ -34,7 +34,6 @@ module Pwrake
|
|
34
34
|
timer = Timer.new("start_worker")
|
35
35
|
@finish_queue = Queue.new
|
36
36
|
@task_queue = @queue_class.new(@core_list)
|
37
|
-
@task_queue.enable_steal = !Rake.application.options.disable_steal
|
38
37
|
@shell_set = []
|
39
38
|
@core_list.each_with_index do |h,i|
|
40
39
|
@shell_set << @shell_class.new(h,@shell_opt)
|
@@ -54,10 +53,15 @@ module Pwrake
|
|
54
53
|
def start_threads
|
55
54
|
Thread.abort_on_exception = true
|
56
55
|
@threads = []
|
56
|
+
t_intvl = Pwrake.application.pwrake_options['THREAD_CREATE_INTERVAL']
|
57
57
|
@shell_set.each do |c|
|
58
|
+
tc0 = Time.now
|
58
59
|
@threads << Thread.new(c) do |conn|
|
59
60
|
Pwrake.current_shell = conn
|
61
|
+
t0 = Time.now
|
60
62
|
conn.start
|
63
|
+
t = Time.now - t0
|
64
|
+
Log.info "-- worker[#{conn.id}] connect to #{conn.host}: %.3f sec" % t
|
61
65
|
begin
|
62
66
|
thread_loop(conn)
|
63
67
|
ensure
|
@@ -65,6 +69,8 @@ module Pwrake
|
|
65
69
|
conn.finish
|
66
70
|
end
|
67
71
|
end
|
72
|
+
t_sleep = t_intvl - (Time.now - tc0)
|
73
|
+
sleep t_sleep if t_sleep > 0
|
68
74
|
end
|
69
75
|
end
|
70
76
|
|
data/lib/pwrake/option.rb
CHANGED
@@ -41,6 +41,7 @@ module Pwrake
|
|
41
41
|
'DEBUG',
|
42
42
|
'PLOT_PARALLELISM',
|
43
43
|
'HALT_QUEUE_WHILE_SEARCH',
|
44
|
+
'THREAD_CREATE_INTERVAL',
|
44
45
|
'SHOW_CONF',
|
45
46
|
'FAILED_TARGET', # rename(default), delete, leave
|
46
47
|
'QUEUE_PRIORITY', # DFS(default), FIFO,
|
@@ -77,6 +78,15 @@ module Pwrake
|
|
77
78
|
format_time_pid(v)
|
78
79
|
end
|
79
80
|
}],
|
81
|
+
['GC_PROFILE',
|
82
|
+
proc{|v|
|
83
|
+
if v
|
84
|
+
if v == "" || !v.kind_of?(String)
|
85
|
+
v = "Pwrake%Y%m%d-%H%M%S_%$.gcprof"
|
86
|
+
end
|
87
|
+
format_time_pid(v)
|
88
|
+
end
|
89
|
+
}],
|
80
90
|
['NUM_THREADS', proc{|v| v && v.to_i}],
|
81
91
|
['DISABLE_AFFINITY', proc{|v| v || ENV['AFFINITY']=='off'}],
|
82
92
|
['DISABLE_STEAL', proc{|v| v || ENV['STEAL']=='off'}],
|
@@ -108,6 +118,9 @@ module Pwrake
|
|
108
118
|
YAML.dump(@opts,$stdout)
|
109
119
|
exit
|
110
120
|
end
|
121
|
+
if @opts['GC_PROFILE']
|
122
|
+
GC::Profiler.enable
|
123
|
+
end
|
111
124
|
@counter = Counter.new
|
112
125
|
end
|
113
126
|
|
@@ -142,7 +155,9 @@ module Pwrake
|
|
142
155
|
@yaml = open(@pwrake_conf){|f| YAML.load(f) }
|
143
156
|
end
|
144
157
|
|
145
|
-
@opts = {'PWRAKE_CONF' => @pwrake_conf
|
158
|
+
@opts = {'PWRAKE_CONF' => @pwrake_conf,
|
159
|
+
'THREAD_CREATE_INTERVAL' => 0.006,
|
160
|
+
}
|
146
161
|
|
147
162
|
option_data.each do |a|
|
148
163
|
prc = nil
|
@@ -178,7 +193,6 @@ module Pwrake
|
|
178
193
|
'SILENT',
|
179
194
|
'TRACE',
|
180
195
|
'TRACE_RULES']
|
181
|
-
Rake.verbose(true) if Rake.application.options.trace
|
182
196
|
Rake.verbose(false) if Rake.application.options.silent
|
183
197
|
end
|
184
198
|
|
@@ -260,7 +274,7 @@ module Pwrake
|
|
260
274
|
def init_logger
|
261
275
|
if Rake.application.options.debug
|
262
276
|
Log.level = Log::DEBUG
|
263
|
-
elsif Rake.
|
277
|
+
elsif Rake.application.options.trace
|
264
278
|
Log.level = Log::INFO
|
265
279
|
else
|
266
280
|
Log.level = Log::WARN
|
@@ -272,8 +286,6 @@ module Pwrake
|
|
272
286
|
mkdir_p logdir
|
273
287
|
end
|
274
288
|
Log.open(@logfile)
|
275
|
-
# turn trace option on
|
276
|
-
#Rake.application.options.trace = true
|
277
289
|
else
|
278
290
|
Log.open($stdout)
|
279
291
|
end
|
@@ -303,20 +315,28 @@ module Pwrake
|
|
303
315
|
require "socket"
|
304
316
|
tmplist = []
|
305
317
|
File.open(@hostfile) do |f|
|
318
|
+
re = /\[\[([\w\d]+)-([\w\d]+)\]\]/o
|
306
319
|
while l = f.gets
|
307
320
|
l = $1 if /^([^#]*)#/ =~ l
|
308
321
|
host, ncore, group = l.split
|
309
322
|
if host
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
323
|
+
if re =~ host
|
324
|
+
hosts = ($1..$2).map{|i| host.sub(re,i)}
|
325
|
+
else
|
326
|
+
hosts = [host]
|
327
|
+
end
|
328
|
+
hosts.each do |host|
|
329
|
+
begin
|
330
|
+
host = Socket.gethostbyname(host)[0]
|
331
|
+
rescue
|
332
|
+
Log.info "-- FQDN not resoved : #{host}"
|
333
|
+
end
|
334
|
+
ncore = (ncore || 1).to_i
|
335
|
+
group = (group || 0).to_i
|
336
|
+
tmplist << ([host] * ncore.to_i)
|
337
|
+
@host_group[group] ||= []
|
338
|
+
@host_group[group] << host
|
314
339
|
end
|
315
|
-
ncore = (ncore || 1).to_i
|
316
|
-
group = (group || 0).to_i
|
317
|
-
tmplist << ([host] * ncore.to_i)
|
318
|
-
@host_group[group] ||= []
|
319
|
-
@host_group[group] << host
|
320
340
|
end
|
321
341
|
end
|
322
342
|
end
|
data/lib/pwrake/profiler.rb
CHANGED
@@ -85,7 +85,8 @@ module Pwrake
|
|
85
85
|
t.strftime("%F %T.%L")
|
86
86
|
end
|
87
87
|
|
88
|
-
def profile(task, cmd, start_time, end_time, host="", status=
|
88
|
+
def profile(task, cmd, start_time, end_time, host="", status=nil)
|
89
|
+
status = "" if status.nil?
|
89
90
|
id = @lock.synchronize do
|
90
91
|
id = @id
|
91
92
|
@id += 1
|
@@ -212,7 +212,7 @@ plot '#{fpara}' w l axis x1y1 title 'parallelism', '#{fdens}' w l axis x1y2 titl
|
|
212
212
|
def plot_parallelizm_by_host(csvtable,base)
|
213
213
|
fpng = base+"_para_host.png"
|
214
214
|
data = read_time_by_host_from_csv(csvtable)
|
215
|
-
|
215
|
+
return fpng if data.size == 0
|
216
216
|
|
217
217
|
grid = []
|
218
218
|
hosts = data.keys.sort
|
@@ -249,12 +249,11 @@ set format y ''
|
|
249
249
|
f.printf "\n"
|
250
250
|
end
|
251
251
|
j = grid.size
|
252
|
-
grid
|
252
|
+
grid.last.each do |x|
|
253
253
|
f.printf "%g %g %d\n", j, x[0], x[1]
|
254
254
|
end
|
255
255
|
f.printf "e\n"
|
256
256
|
end
|
257
|
-
#puts "Parallelism by host: "+fpng
|
258
257
|
fpng
|
259
258
|
end
|
260
259
|
|
data/lib/pwrake/shell.rb
CHANGED
@@ -19,6 +19,9 @@ module Pwrake
|
|
19
19
|
@@current_id = 0
|
20
20
|
@@profiler = Profiler.new
|
21
21
|
|
22
|
+
# @@global_lock = Mutex.new
|
23
|
+
# @@last_exec_time = Time.now
|
24
|
+
|
22
25
|
def self.profiler
|
23
26
|
@@profiler
|
24
27
|
end
|
@@ -32,6 +35,7 @@ module Pwrake
|
|
32
35
|
@work_dir = @option[:work_dir] || Dir.pwd
|
33
36
|
@pass_env = @option[:pass_env]
|
34
37
|
@ssh_opt = @option[:ssh_opt]
|
38
|
+
# @ssh_min_exec_interval = Pwrake.application.pwrake_options['SHELL_MIN_EXEC_INTERVAL'].to_f
|
35
39
|
@terminator = ""
|
36
40
|
TLEN.times{ @terminator << CHARS[rand(CHARS.length)] }
|
37
41
|
end
|
@@ -126,8 +130,9 @@ module Pwrake
|
|
126
130
|
raise "@io is closed" if @io.closed?
|
127
131
|
@lock.synchronize do
|
128
132
|
@io.puts(cmd+"\necho '#{@terminator}':$? ")
|
133
|
+
@io.flush
|
129
134
|
status = io_read_loop{}
|
130
|
-
Integer(status) == 0
|
135
|
+
Integer(status||1) == 0
|
131
136
|
end
|
132
137
|
end
|
133
138
|
|
@@ -146,6 +151,20 @@ module Pwrake
|
|
146
151
|
@cmd = cmd
|
147
152
|
raise "@io is closed" if @io.closed?
|
148
153
|
status = nil
|
154
|
+
|
155
|
+
# t0 = Time.now
|
156
|
+
# @@global_lock.synchronize do
|
157
|
+
# t = Time.now - @@last_exec_time
|
158
|
+
# if t < @ssh_min_exec_interval
|
159
|
+
# sleep @ssh_min_exec_interval-t
|
160
|
+
# end
|
161
|
+
# @@last_exec_time = Time.now
|
162
|
+
# end
|
163
|
+
# t = Time.now-t0
|
164
|
+
# #if t>0.001
|
165
|
+
# Log.info "-- locktime %.6f"%t
|
166
|
+
# #end
|
167
|
+
|
149
168
|
start_time = Time.now
|
150
169
|
begin
|
151
170
|
@io.puts @@profiler.command(cmd,@terminator)
|
@@ -28,15 +28,30 @@ module Pwrake
|
|
28
28
|
pw_search_tasks(args)
|
29
29
|
th = nil
|
30
30
|
end
|
31
|
+
Log.info "-- ps:\n"+`ps xwv|egrep 'PID|ruby'`
|
31
32
|
|
32
33
|
if conn = Pwrake.current_shell
|
33
34
|
application.thread_loop(conn,self)
|
34
35
|
else
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
if fname = application.pwrake_options['GC_PROFILE']
|
37
|
+
File.open(fname,"w") do |f|
|
38
|
+
gc_count = 0
|
39
|
+
while true
|
40
|
+
t = application.finish_queue.deq
|
41
|
+
if GC.count > gc_count
|
42
|
+
f.write Log.fmt_time(Time.now)+" "
|
43
|
+
f.write(GC::Profiler.result)
|
44
|
+
GC::Profiler.clear
|
45
|
+
gc_count = GC.count
|
46
|
+
end
|
47
|
+
break if t==self
|
48
|
+
end
|
49
|
+
end
|
50
|
+
else
|
51
|
+
while true
|
52
|
+
t = application.finish_queue.deq
|
53
|
+
break if t==self
|
54
|
+
end
|
40
55
|
end
|
41
56
|
end
|
42
57
|
|
@@ -57,8 +72,6 @@ module Pwrake
|
|
57
72
|
time_start = Time.now
|
58
73
|
if shell = Pwrake.current_shell
|
59
74
|
shell.current_task = self
|
60
|
-
#host = shell.host
|
61
|
-
#log_host(host)
|
62
75
|
end
|
63
76
|
|
64
77
|
@lock.synchronize do
|
@@ -68,29 +81,41 @@ module Pwrake
|
|
68
81
|
pw_execute(@arg_data) if needed?
|
69
82
|
if kind_of?(Rake::FileTask)
|
70
83
|
application.postprocess(self) # <---------
|
71
|
-
|
84
|
+
if File.exist?(name)
|
85
|
+
@file_stat = File::Stat.new(name)
|
86
|
+
end
|
72
87
|
end
|
73
88
|
log_task(time_start)
|
89
|
+
t = Time.now
|
74
90
|
application.finish_queue.enq(self)
|
75
91
|
shell.current_task = nil if shell
|
76
92
|
pw_enq_subsequents # <---------
|
93
|
+
Log.debug "--- pw_invoke (#{name}) postprocess time=#{Time.now-t} sec"
|
77
94
|
end
|
78
95
|
|
79
96
|
def log_task(time_start)
|
80
|
-
return if !application.task_logger
|
81
97
|
time_end = Time.now
|
98
|
+
|
99
|
+
loc = suggest_location()
|
100
|
+
shell = Pwrake.current_shell
|
101
|
+
|
102
|
+
if loc && !loc.empty? && shell && !@actions.empty?
|
103
|
+
Pwrake.application.count( loc, shell.host )
|
104
|
+
end
|
105
|
+
return if !application.task_logger
|
106
|
+
|
82
107
|
row = [ @task_id, name,
|
83
108
|
time_start, time_end, time_end-time_start,
|
84
109
|
@prerequisites.join('|')
|
85
110
|
]
|
86
111
|
|
87
|
-
if loc
|
112
|
+
if loc
|
88
113
|
row << loc.join('|')
|
89
114
|
else
|
90
115
|
row << ''
|
91
116
|
end
|
92
117
|
|
93
|
-
if shell
|
118
|
+
if shell
|
94
119
|
row.concat [shell.host, shell.id]
|
95
120
|
else
|
96
121
|
row.concat ['','']
|
@@ -99,10 +124,6 @@ module Pwrake
|
|
99
124
|
row << ((@actions.empty?) ? 0 : 1)
|
100
125
|
row << ((@executed) ? 1 : 0)
|
101
126
|
|
102
|
-
if loc && !loc.empty? && shell && !@actions.empty?
|
103
|
-
Pwrake.application.count( loc, shell.host )
|
104
|
-
end
|
105
|
-
|
106
127
|
if @file_stat
|
107
128
|
row.concat [@file_stat.size, @file_stat.mtime, self.location.join('|')]
|
108
129
|
else
|
@@ -143,7 +164,7 @@ module Pwrake
|
|
143
164
|
act.call(self)
|
144
165
|
else
|
145
166
|
act.call(self, args)
|
146
|
-
|
167
|
+
end
|
147
168
|
end
|
148
169
|
rescue Exception=>e
|
149
170
|
if kind_of?(Rake::FileTask) && File.exist?(name)
|
@@ -168,12 +189,14 @@ module Pwrake
|
|
168
189
|
|
169
190
|
def pw_enq_subsequents
|
170
191
|
@lock.synchronize do
|
192
|
+
t = Time.now
|
171
193
|
@subsequents.each do |t| # <<--- competition !!!
|
172
194
|
if t && t.check_prereq_finished(self.name)
|
173
195
|
application.task_queue.enq(t)
|
174
196
|
end
|
175
197
|
end
|
176
198
|
@already_finished = true # <<--- competition !!!
|
199
|
+
Log.debug "--- pw_enq_subseq (#{name}) time=#{Time.now-t} sec"
|
177
200
|
end
|
178
201
|
end
|
179
202
|
|
@@ -219,7 +242,8 @@ module Pwrake
|
|
219
242
|
|
220
243
|
# Search all the prerequisites of a task.
|
221
244
|
def search_prerequisites(task_args, invocation_chain) # :nodoc:
|
222
|
-
@unfinished_prereq =
|
245
|
+
@unfinished_prereq = {}
|
246
|
+
@prerequisites.each{|t| @unfinished_prereq[t]=true}
|
223
247
|
prerequisite_tasks.each { |prereq|
|
224
248
|
#prereq_args = task_args.new_scope(prereq.arg_names) # in vain
|
225
249
|
if prereq.search_with_call_chain(self, task_args, invocation_chain)
|
data/lib/pwrake/task_queue.rb
CHANGED
@@ -75,12 +75,13 @@ module Pwrake
|
|
75
75
|
when /dfs/i
|
76
76
|
@array_class = PriorityQueueArray
|
77
77
|
when /fifo/i
|
78
|
-
@array_class = Array
|
78
|
+
@array_class = Array # Fifo
|
79
79
|
when /lifo/i
|
80
80
|
@array_class = LifoQueueArray
|
81
81
|
else
|
82
82
|
raise RuntimeError,"unknown option for QUEUE_PRIORITY"
|
83
83
|
end
|
84
|
+
Log.debug "--- TQ#initialize @array_class=#{@array_class.inspect}"
|
84
85
|
init_queue(*args)
|
85
86
|
end
|
86
87
|
|
@@ -135,6 +136,7 @@ module Pwrake
|
|
135
136
|
# enq
|
136
137
|
def enq(item)
|
137
138
|
Log.debug "--- TQ#enq #{item.name}"
|
139
|
+
t0 = Time.now
|
138
140
|
if @halt
|
139
141
|
enq_body(item)
|
140
142
|
else
|
@@ -147,6 +149,7 @@ module Pwrake
|
|
147
149
|
Log.debug "--- run #{th}";
|
148
150
|
th.run
|
149
151
|
}
|
152
|
+
Log.debug "--- TQ#enq #{item.name} enq_time=#{Time.now-t0}"
|
150
153
|
end
|
151
154
|
|
152
155
|
def enq_body(item)
|
@@ -171,6 +174,7 @@ module Pwrake
|
|
171
174
|
n = 0
|
172
175
|
loop do
|
173
176
|
@mutex.synchronize do
|
177
|
+
t0 = Time.now
|
174
178
|
if @th_end.first == Thread.current
|
175
179
|
@th_end.shift
|
176
180
|
return false
|
@@ -196,7 +200,8 @@ module Pwrake
|
|
196
200
|
|
197
201
|
else
|
198
202
|
if t = deq_impl(hint,n)
|
199
|
-
|
203
|
+
t_inspect = t.inspect[0..1000]
|
204
|
+
Log.debug "--- TQ#deq #{t_inspect} deq_time=#{Time.now-t0}"
|
200
205
|
return t
|
201
206
|
end
|
202
207
|
#@cv.signal([hint])
|
data/lib/pwrake/version.rb
CHANGED
data/pwrake.gemspec
CHANGED
@@ -11,6 +11,7 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.description = %q{Parallel workflow extension for Rake}
|
12
12
|
gem.summary = %q{Adding Parallel and Distributed feature to Rake}
|
13
13
|
gem.homepage = "http://masa16.github.com/pwrake"
|
14
|
+
gem.license = 'MIT'
|
14
15
|
|
15
16
|
gem.files = `git ls-files`.split($/)
|
16
17
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
data/spec/pwrake_spec.rb
CHANGED
@@ -51,7 +51,7 @@ describe Helper do
|
|
51
51
|
context "dir=005 --hostfile" do
|
52
52
|
subject { Helper.new("005","-q -F ../hosts").run }
|
53
53
|
it { should be_success }
|
54
|
-
its("output_lines.sort") { should eq Helper.read_hosts($hosts,true).sort }
|
54
|
+
#its("output_lines.sort") { should eq Helper.read_hosts($hosts,true).sort }
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -86,13 +86,13 @@ describe Helper do
|
|
86
86
|
end
|
87
87
|
|
88
88
|
context "dir=011 FAILD_TARGET=delete" do
|
89
|
-
subject { Helper.new("011","FAILED_TARGET=delete").run }
|
89
|
+
subject { Helper.new("011","FAILED_TARGET=delete").clean.run }
|
90
90
|
it { should_not be_success }
|
91
91
|
its(:n_files) { should eq 2 }
|
92
92
|
end
|
93
93
|
|
94
94
|
context "dir=011 FAILD_TARGET=rename" do
|
95
|
-
subject { Helper.new("011","FAILED_TARGET=rename").run }
|
95
|
+
subject { Helper.new("011","FAILED_TARGET=rename").clean.run }
|
96
96
|
it { should_not be_success }
|
97
97
|
its(:n_files) { should eq 3 }
|
98
98
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pwrake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masahiro TANAKA
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Parallel workflow extension for Rake
|
14
14
|
email:
|
@@ -66,7 +66,8 @@ files:
|
|
66
66
|
- spec/hosts
|
67
67
|
- spec/pwrake_spec.rb
|
68
68
|
homepage: http://masa16.github.com/pwrake
|
69
|
-
licenses:
|
69
|
+
licenses:
|
70
|
+
- MIT
|
70
71
|
metadata: {}
|
71
72
|
post_install_message:
|
72
73
|
rdoc_options: []
|