drake 0.8.2.1.0.6 → 0.8.2.1.0.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.
- 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
|