dake 0.2.1 → 0.2.2

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