build-graph 0.3.2 → 0.3.3

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 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
  - - ">="