build-graph 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 099abe451e05dd43b268f1d85551a88b01ad1a9b
4
- data.tar.gz: 09d54433b10c28b942bb4e195896023bf3067190
3
+ metadata.gz: 0ac0622352764d8a850dc19bd98394fad151e1fe
4
+ data.tar.gz: 67f61c902d33f69b7ea262532dd135bd5b58fa95
5
5
  SHA512:
6
- metadata.gz: b7f79b01e9dfe117f74d3a2a9e566dc55795ac47ce791a5ac8a341bc5a46d1cad3b7c3b5f6c8575d201b0b5b2b3684783830327de0a2627ab05d274d2893f443
7
- data.tar.gz: d47a65ba2f7168fa8bb6646d45f309495f135512149ec5b08cc719c1337da12726c29b5fd8cbec45b821bf8b30692183f215c9a86d535861db909a4c3dbfaefd
6
+ metadata.gz: acaf99a70edf2f1540e5814b70f9e879d48494a8509462a87c262d7cd1000172445bfec444bd2d6eff1bef620f5ebd6eef86470e34be9929edba4cc9a5c9fb76
7
+ data.tar.gz: e3abaa8571aac1584b6578fa42f58f1cd3fdc2f51033b080cc3e0a581e3f8327d5acf83bc34669641ca0d0dda4dbb79866400744bde03826052e8c1198e944f2
@@ -19,13 +19,15 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
20
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
21
  spec.require_paths = ["lib"]
22
-
22
+
23
+ spec.required_ruby_version = '>= 2.0'
24
+
23
25
  spec.add_dependency "process-group", "~> 0.2.1"
24
- spec.add_dependency "build-files", "~> 0.2.0"
26
+ spec.add_dependency "build-files", "~> 0.2.6"
25
27
 
26
28
  spec.add_dependency "system"
27
29
  spec.add_dependency "rainbow", "~> 2.0.0"
28
-
30
+
29
31
  spec.add_development_dependency "bundler", "~> 1.3"
30
32
  spec.add_development_dependency "rspec", "~> 3.0.0"
31
33
  spec.add_development_dependency "build-makefile", "~> 0.2.0"
@@ -27,6 +27,7 @@ require_relative 'edge'
27
27
 
28
28
  module Build
29
29
  module Graph
30
+ # The top level graph controller is responsible for managing build graph state.
30
31
  class Controller < Files::Monitor
31
32
  def initialize
32
33
  super
@@ -35,43 +36,46 @@ module Build
35
36
 
36
37
  build_graph!
37
38
  end
38
-
39
+
39
40
  attr :nodes
40
-
41
- # You need to override this to traverse the top nodes as required:
41
+
42
+ # Override this to traverse the top nodes as required.
42
43
  def traverse!(walker)
43
44
  #Array(top).each do |node|
44
45
  # node.update!(walker)
45
46
  #end
46
47
  end
47
-
48
+
49
+ # Walk the graph with the given callback.
48
50
  def walk(&block)
49
51
  Walker.new(self, &block)
50
52
  end
51
-
53
+
54
+ # Build the initial graph structure.
52
55
  def build_graph!
53
56
  # We build the graph without doing any actual execution:
54
57
  nodes = []
55
-
58
+
56
59
  walker = walk do |walker, node|
57
60
  nodes << node
58
61
 
59
62
  yield walker, node
60
63
  end
61
-
64
+
62
65
  traverse! walker
63
-
66
+
64
67
  # We should update the status of all nodes in the graph once we've traversed the graph.
65
68
  nodes.each do |node|
66
69
  node.update_status!
67
70
  end
68
71
  end
69
-
72
+
73
+ # Update the graph and print out timing information.
70
74
  def update_with_log
71
75
  puts Rainbow("*** Graph update traversal ***").green
72
-
76
+
73
77
  start_time = Time.now
74
-
78
+
75
79
  walker = update!
76
80
  ensure
77
81
  end_time = Time.now
@@ -80,14 +84,15 @@ module Build
80
84
  $stdout.flush
81
85
  $stderr.puts Rainbow("Graph Update Time: %0.3fs" % elapsed_time).magenta
82
86
  end
83
-
87
+
88
+ # Update the graph.
84
89
  def update!
85
90
  walker = walk do |walker, node|
86
91
  yield walker, node
87
92
  end
88
-
93
+
89
94
  traverse! walker
90
-
95
+
91
96
  return walker
92
97
  end
93
98
  end
@@ -24,12 +24,14 @@ require 'fiber'
24
24
 
25
25
  module Build
26
26
  module Graph
27
- # Represents an input to a graph node, with count inputs.
27
+ # Represents a set of inputs to a graph node.
28
28
  class Edge
29
29
  def initialize(count = 0)
30
30
  @fiber = Fiber.current
31
+
32
+ # The number of inputs we are waiting for:
31
33
  @count = count
32
-
34
+
33
35
  @failed = []
34
36
  end
35
37
 
@@ -37,7 +39,8 @@ module Build
37
39
 
38
40
  attr :fiber
39
41
  attr :count
40
-
42
+
43
+ # Wait until all inputs to the edge have been traversed.
41
44
  def wait
42
45
  if @count > 0
43
46
  Fiber.yield
@@ -51,7 +54,8 @@ module Build
51
54
  def failed?
52
55
  @failed.size != 0
53
56
  end
54
-
57
+
58
+ # Traverse the edge, mark the edge as failed if the source was also failed.
55
59
  def traverse(node)
56
60
  @count -= 1
57
61
 
@@ -63,7 +67,8 @@ module Build
63
67
  @fiber.resume
64
68
  end
65
69
  end
66
-
70
+
71
+ # Increase the number of traversals we are waiting for.
67
72
  def increment!
68
73
  @count += 1
69
74
  end
@@ -19,18 +19,20 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  module Build
22
- class TransientError < StandardError
23
- end
22
+ module Graph
23
+ class TransientError < StandardError
24
+ end
24
25
 
25
- class CommandFailure < TransientError
26
- def initialize(command, status)
27
- super "Command #{command.inspect} failed with exit status #{status}!"
26
+ class CommandFailure < TransientError
27
+ def initialize(command, status)
28
+ super "Command #{command.inspect} failed with exit status #{status}!"
28
29
 
29
- @command = command
30
- @status = status
31
- end
30
+ @command = command
31
+ @status = status
32
+ end
32
33
 
33
- attr :command
34
- attr :status
34
+ attr :command
35
+ attr :status
36
+ end
35
37
  end
36
38
  end
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Build
22
22
  module Graph
23
- VERSION = "0.3.2"
23
+ VERSION = "0.3.3"
24
24
  end
25
25
  end
@@ -29,9 +29,10 @@ module Build
29
29
  def initialize(controller, &task)
30
30
  @controller = controller
31
31
  @task = task
32
-
32
+
33
+ # The number of nodes we have touched:
33
34
  @count = 0
34
-
35
+
35
36
  @outputs = {}
36
37
  @dirty = Set.new
37
38
 
@@ -40,9 +41,9 @@ module Build
40
41
  # For a given child, a list of any parents waiting on it.
41
42
  if node.dirty?
42
43
  @dirty << node
43
-
44
+
44
45
  @outputs[node] = []
45
-
46
+
46
47
  node.outputs.each do |output|
47
48
  @outputs[output] = []
48
49
  end
@@ -54,19 +55,21 @@ module Build
54
55
  # Failed output paths:
55
56
  @failed = Set.new
56
57
  end
57
-
58
+
58
59
  attr :controller
59
- attr :output
60
-
60
+ attr :task
61
+
62
+ attr :outputs
63
+
61
64
  attr_accessor :count
62
-
63
65
  attr :dirty
66
+
64
67
  attr :parents
65
-
68
+
66
69
  def task(*arguments)
67
70
  @task.call(self, *arguments)
68
71
  end
69
-
72
+
70
73
  def wait_on_paths(paths)
71
74
  edge = Edge.new
72
75
  failed = false
@@ -155,7 +158,6 @@ module Build
155
158
  # If all inputs were good, we can update the node.
156
159
  unless any_inputs_failed?
157
160
  begin
158
- #self.instance_eval(&update)e
159
161
  yield
160
162
  rescue TransientError => error
161
163
  $stderr.puts Rainbow("Error: #{error.inspect}").red
@@ -172,9 +174,9 @@ module Build
172
174
  elsif wet?
173
175
  @node.clean!
174
176
  end
175
-
177
+
176
178
  @walker.exit(@node)
177
-
179
+
178
180
  @walker.count += 1
179
181
  end
180
182
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: build-graph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-07 00:00:00.000000000 Z
11
+ date: 2014-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: process-group
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.0
33
+ version: 0.2.6
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.0
40
+ version: 0.2.6
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: system
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -167,7 +167,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
167
  requirements:
168
168
  - - ">="
169
169
  - !ruby/object:Gem::Version
170
- version: '0'
170
+ version: '2.0'
171
171
  required_rubygems_version: !ruby/object:Gem::Requirement
172
172
  requirements:
173
173
  - - ">="