dake 0.2.1 → 0.2.2

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
  SHA256:
3
- metadata.gz: 6015ab5226665506052c97193879c5747c726924fe1a0706ed68d26e6616e067
4
- data.tar.gz: 9566fa629a716eede2f11277c7cdc40c009377e33ae84c05261ec28c433821e3
3
+ metadata.gz: e5cbfb1274b657c4a5e7c998d196af197ecbe2efe4ff8f48131a99220d5a76e3
4
+ data.tar.gz: 5f58940173637dc3e4733f2cb242d88b4a2e3080054108101831576890648c10
5
5
  SHA512:
6
- metadata.gz: 3f53b15a4c8edf2f1559f1c45f573762393652f2fd924c61c834d76a092acb37dce1b22efef07f58b34eeb7f8e272d14a40997bd7b7b44b0e62a7cc7129bb1ef
7
- data.tar.gz: d2516d0cf223c38b599ca96beb37fc3f4d87e68dd04772313255d669eb3ccfe6f3f97740a6910e1268259a6f3db1a73875998082bbdc5bdbb164b52e86e42c73
6
+ metadata.gz: 78aa071f1564255a83ac88c241b2ea3756ef63abbd65f201d918d580e1cd81ae2ae56065801fa1808cfd62e642f7aacbabcecca48e9f74689793451acf6e0e3e
7
+ data.tar.gz: e121ff5e715686e55d2922d16df895359b516809402b54223175b7c5c65245d9bdaa53496156aac5ccc9d9054b7ec135b5a71ccacc46486ceacb6ece01cd2efe
data/lib/dake/executor.rb CHANGED
@@ -43,7 +43,7 @@ class DakeExecutor
43
43
  end
44
44
 
45
45
  lock = Concurrent::ReadWriteLock.new
46
- @dep_graph.leaf_step.each { |step| queue << step if rebuild_set.include? step }
46
+ rebuild_set.each { |step| queue << step if @dep_graph.dep_step[step].all? { |dep| not rebuild_set.include? dep} }
47
47
 
48
48
  while next_step = queue.deq
49
49
  @pool.post(next_step) do |step|
data/lib/dake/resolver.rb CHANGED
@@ -2,12 +2,12 @@
2
2
  # note that this is not nessesarily the complete graph,
3
3
  # the graph is only used to produce the given targets
4
4
  DepGraph = Struct.new(
5
- :succ_step, # a dict maps each step in the DepGraph to the steps depend on it
6
- :dep_step, # a dict maps each step in the DepGraph to the steps it depends on
7
- :step_list, # a list of steps represents one sequential execution order
8
- :root_step, # a set of steps that hos no dependant
9
- :leaf_step, # a set of steps that has no prerequisite
10
- :step_target # a dict maps each step in the DepGraph to its output files used while resolving targets
5
+ :succ_step, # a dict maps each step in the DepGraph to the steps depend on it
6
+ :dep_step, # a dict maps each step in the DepGraph to the steps it depends on
7
+ :step_list, # a list of steps represents one sequential execution order
8
+ :root_step, # a set of steps that hos no dependant
9
+ :step_prereq, # a dict maps step to its prerequisite which has no corresponding step
10
+ :step_target # a dict maps each step in the DepGraph to its output files used while resolving targets
11
11
  )
12
12
 
13
13
  class DakeResolver
@@ -57,8 +57,8 @@ class DakeResolver
57
57
  else
58
58
  stack.pop
59
59
 
60
- if dep_graph.leaf_step.include? step
61
- step.prerequisites.each do |prereq|
60
+ if dep_graph.step_prereq[step]
61
+ dep_graph.step_prereq[step].each do |prereq|
62
62
  if prereq.flag != '?' and not prereq.scheme.exist?
63
63
  raise "No step found for building file `#{prereq.scheme.path}'."
64
64
  end
@@ -70,14 +70,10 @@ class DakeResolver
70
70
  end
71
71
 
72
72
  if target_opts.build_mode == :check and (up_tree_steps.include? step or down_tree_steps.include? step)
73
- if dep_graph.leaf_step.include? step
74
- need_rebuild << step if need_execute?(dep_graph.step_target[step], step)
73
+ if dep_graph.dep_step[step].any? { |dep_step| need_rebuild.include? dep_step }
74
+ need_rebuild << step
75
75
  else
76
- if dep_graph.dep_step[step].any? { |dep_step| need_rebuild.include? dep_step }
77
- need_rebuild << step
78
- else
79
- need_rebuild << step if need_execute?(dep_graph.step_target[step], step)
80
- end
76
+ need_rebuild << step if need_execute?(dep_graph.step_target[step], step)
81
77
  end
82
78
  end
83
79
 
@@ -239,12 +235,12 @@ class DakeResolver
239
235
  step_list = []
240
236
  visited = Set.new
241
237
  path_visited = Set.new
242
- leaf_steps = Set.new
243
238
  target_steps = Set.new
244
239
  succ_step_dict = {}
245
240
  dep_step_dict = {}
246
241
  dep_step_list = {}
247
242
  succ_target_dict = {}
243
+ step_prereq_dict = {}
248
244
 
249
245
  target_pairs.each do |target_name, target_opts|
250
246
  if target_opts.tag
@@ -275,6 +271,10 @@ class DakeResolver
275
271
  step.prerequisites.map! { |file| @analyzer.analyze_file(file, :prerequisites, step) }.flatten!
276
272
  step.prerequisites.each do |dep|
277
273
  dep_steps = find_steps(dep.scheme, dep.tag)
274
+ if dep_steps.empty?
275
+ step_prereq_dict[step] ||= Set.new
276
+ step_prereq_dict[step] << dep
277
+ end
278
278
  dep_steps.each do |dep_step|
279
279
  dep_step_dict[step] << dep_step
280
280
  succ_step_dict[dep_step] ||= Set.new
@@ -302,11 +302,10 @@ class DakeResolver
302
302
  stack.pop
303
303
  path_visited.delete step
304
304
  step_list << step
305
- leaf_steps << step if dep_step_dict[step].empty?
306
305
  end
307
306
  end
308
307
  end
309
308
  root_steps = target_steps.select { |step| succ_step_dict[step].empty? }.to_set
310
- DepGraph.new(succ_step_dict, dep_step_dict, step_list, root_steps, leaf_steps, succ_target_dict)
309
+ DepGraph.new(succ_step_dict, dep_step_dict, step_list, root_steps, step_prereq_dict, succ_target_dict)
311
310
  end
312
311
  end
data/lib/dake/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dake
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dake
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - minor6th
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-09 00:00:00.000000000 Z
11
+ date: 2019-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler