drake 0.8.2.1.0.6 → 0.8.2.1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.drake +5 -0
- data/README +37 -0
- data/lib/rake.rb +16 -4
- data/lib/rake/comp_tree/algorithm.rb +2 -2
- data/lib/rake/comp_tree/bucket_ipc.rb +3 -3
- data/lib/rake/comp_tree/{quix/diagnostic.rb → diagnostic.rb} +2 -2
- data/lib/rake/comp_tree/driver.rb +4 -4
- data/lib/rake/comp_tree/{quix/kernel.rb → misc.rb} +2 -2
- data/lib/rake/comp_tree/node.rb +2 -2
- data/lib/rake/comp_tree/{quix/builtin/kernel/tap.rb → tap.rb} +0 -0
- metadata +4 -4
data/CHANGES.drake
CHANGED
data/README
CHANGED
@@ -75,6 +75,43 @@ other tasks is rather contrary to this notion, throwing a monkey
|
|
75
75
|
wrench into the system. An exception will be raised when this is
|
76
76
|
attempted in multi-threaded mode.
|
77
77
|
|
78
|
+
=== Migrating to -j
|
79
|
+
|
80
|
+
First of all, do you want to bother with <tt>-j</tt>? If you are
|
81
|
+
satisfied with your build time, then there is really no reason to use
|
82
|
+
it.
|
83
|
+
|
84
|
+
If on the other hand your build takes twenty minutes to complete, you
|
85
|
+
may be interested in investing some time getting the full dependency
|
86
|
+
tree correct in order to take advantage of multiple CPUs or cores.
|
87
|
+
|
88
|
+
Though there is no way for Drake to fathom what <em>you</em> mean by a
|
89
|
+
correct dependency, there is a tool available which helps you get
|
90
|
+
closer to saying what you mean.
|
91
|
+
|
92
|
+
% drake --rand[=SEED]
|
93
|
+
|
94
|
+
This will randomize the order of sibling prerequisites for each task.
|
95
|
+
When given the optional SEED integer, it will call
|
96
|
+
<tt>srand(SEED)</tt> to produce the same permutation each time. The
|
97
|
+
randomize option also disables +multitask+.
|
98
|
+
|
99
|
+
Though this option may produce an error due to an unspecified
|
100
|
+
dependency, at least it will be an error which is exactly the same on
|
101
|
+
each run (with SEED). In addition, you'll have the major debugging
|
102
|
+
advantage of using a single thread.
|
103
|
+
|
104
|
+
This option will also work in multi-threaded mode. After all, once
|
105
|
+
<tt>-jN</tt> is running smoothly there is <em>still</em> no guarantee
|
106
|
+
that you have it right. However with each successful execution of
|
107
|
+
<tt>drake -jN --rand</tt>, the probability of correctness approaches 1
|
108
|
+
(though asymptotically so).
|
109
|
+
|
110
|
+
(The only way to <em>prove</em> correctness is to test <em>all</em>
|
111
|
+
such permutations, which for any non-trivial project would be
|
112
|
+
prohibitively large, especially those which meaningfully benefit from
|
113
|
+
<tt>-j</tt>.)
|
114
|
+
|
78
115
|
== Links
|
79
116
|
|
80
117
|
* Download: http://rubyforge.org/frs/?group_id=6530
|
data/lib/rake.rb
CHANGED
@@ -29,7 +29,7 @@
|
|
29
29
|
# as a library via a require statement, but it can be distributed
|
30
30
|
# independently as an application.
|
31
31
|
|
32
|
-
RAKEVERSION = '0.8.2.1.0.
|
32
|
+
RAKEVERSION = '0.8.2.1.0.7'
|
33
33
|
|
34
34
|
require 'rbconfig'
|
35
35
|
require 'getoptlong'
|
@@ -595,6 +595,11 @@ module Rake
|
|
595
595
|
end
|
596
596
|
return if @already_invoked
|
597
597
|
@already_invoked = true
|
598
|
+
|
599
|
+
if application.options.randomize
|
600
|
+
@prerequisites = @prerequisites.sort_by { rand }
|
601
|
+
end
|
602
|
+
|
598
603
|
prereqs =
|
599
604
|
if application.num_threads == 1
|
600
605
|
invoke_prerequisites(task_args, new_chain)
|
@@ -602,6 +607,7 @@ module Rake
|
|
602
607
|
else
|
603
608
|
invoke_prerequisites_parallel(task_args, new_chain)
|
604
609
|
end
|
610
|
+
|
605
611
|
if needed?
|
606
612
|
if application.num_threads == 1
|
607
613
|
execute(task_args)
|
@@ -2276,9 +2282,15 @@ module Rake
|
|
2276
2282
|
['--threads', '-j N', "Specifies the number of threads to run simultaneously.",
|
2277
2283
|
lambda { |value| self.num_threads = value.to_i }
|
2278
2284
|
],
|
2279
|
-
|
2280
|
-
|
2281
|
-
|
2285
|
+
['--rand[=SEED]', "Randomize task prerequisite orders",
|
2286
|
+
lambda { |value|
|
2287
|
+
MultiTask.class_eval { remove_method(:invoke_prerequisites) }
|
2288
|
+
options.randomize = true
|
2289
|
+
if value
|
2290
|
+
srand(value.to_i)
|
2291
|
+
end
|
2292
|
+
}
|
2293
|
+
],
|
2282
2294
|
['--libdir', '-I LIBDIR', "Include LIBDIR in the search path for required modules.",
|
2283
2295
|
lambda { |value| $:.push(value) }
|
2284
2296
|
],
|
@@ -1,10 +1,10 @@
|
|
1
1
|
|
2
|
-
require 'rake/comp_tree/
|
2
|
+
require 'rake/comp_tree/diagnostic'
|
3
3
|
require 'rake/comp_tree/retriable_fork'
|
4
4
|
|
5
5
|
module Rake::CompTree
|
6
6
|
module Algorithm
|
7
|
-
include
|
7
|
+
include Diagnostic
|
8
8
|
|
9
9
|
def compute_multithreaded(root, num_threads, use_fork, buckets)
|
10
10
|
trace "Computing #{root.name} with #{num_threads} threads"
|
@@ -3,13 +3,13 @@ require 'drb'
|
|
3
3
|
require 'thread'
|
4
4
|
|
5
5
|
require 'rake/comp_tree/retriable_fork'
|
6
|
-
require 'rake/comp_tree/
|
7
|
-
require 'rake/comp_tree/
|
6
|
+
require 'rake/comp_tree/diagnostic'
|
7
|
+
require 'rake/comp_tree/tap'
|
8
8
|
|
9
9
|
module Rake::CompTree
|
10
10
|
module BucketIPC
|
11
11
|
class Bucket
|
12
|
-
include
|
12
|
+
include Diagnostic
|
13
13
|
include RetriableFork
|
14
14
|
|
15
15
|
def initialize(address, timeout, wait_interval)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
require 'rake/comp_tree/bucket_ipc'
|
3
|
-
require 'rake/comp_tree/
|
4
|
-
require 'rake/comp_tree/
|
3
|
+
require 'rake/comp_tree/diagnostic'
|
4
|
+
require 'rake/comp_tree/misc'
|
5
5
|
require 'rake/comp_tree/algorithm'
|
6
6
|
require 'rake/comp_tree/node'
|
7
7
|
require 'rake/comp_tree/task_node'
|
@@ -22,8 +22,8 @@ module Rake::CompTree
|
|
22
22
|
:wait_interval => 0.02,
|
23
23
|
}
|
24
24
|
|
25
|
-
include
|
26
|
-
include
|
25
|
+
include Diagnostic
|
26
|
+
include Misc
|
27
27
|
|
28
28
|
#
|
29
29
|
# Begin a new computation tree.
|
data/lib/rake/comp_tree/node.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
require 'rake/comp_tree/
|
2
|
+
require 'rake/comp_tree/diagnostic'
|
3
3
|
require 'thread'
|
4
4
|
|
5
5
|
module Rake::CompTree
|
@@ -7,7 +7,7 @@ module Rake::CompTree
|
|
7
7
|
# Base class for nodes in the computation tree.
|
8
8
|
#
|
9
9
|
class Node
|
10
|
-
include
|
10
|
+
include Diagnostic
|
11
11
|
|
12
12
|
attr_reader :name #:nodoc:
|
13
13
|
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.2.1.0.
|
4
|
+
version: 0.8.2.1.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James M. Lawrence
|
@@ -71,13 +71,13 @@ files:
|
|
71
71
|
- lib/rake.rb
|
72
72
|
- lib/rake/comp_tree/algorithm.rb
|
73
73
|
- lib/rake/comp_tree/bucket_ipc.rb
|
74
|
+
- lib/rake/comp_tree/diagnostic.rb
|
74
75
|
- lib/rake/comp_tree/driver.rb
|
75
76
|
- lib/rake/comp_tree/error.rb
|
77
|
+
- lib/rake/comp_tree/misc.rb
|
76
78
|
- lib/rake/comp_tree/node.rb
|
77
|
-
- lib/rake/comp_tree/quix/builtin/kernel/tap.rb
|
78
|
-
- lib/rake/comp_tree/quix/diagnostic.rb
|
79
|
-
- lib/rake/comp_tree/quix/kernel.rb
|
80
79
|
- lib/rake/comp_tree/retriable_fork.rb
|
80
|
+
- lib/rake/comp_tree/tap.rb
|
81
81
|
- lib/rake/comp_tree/task_node.rb
|
82
82
|
- test/capture_stdout.rb
|
83
83
|
- test/check_expansion.rb
|