Class: Teapot::Command::Build
- Defined in:
- lib/teapot/command/build.rb
Overview
A command to build targets in the project.
Instance Method Summary collapse
-
#call ⇒ Object
Build the selected targets or default build targets, resolving dependencies and executing the build controller.
-
#show_dependencies(walker) ⇒ Object
Display task dependencies for debugging, showing which tasks generate which outputs.
Methods inherited from Selection
Instance Method Details
#call ⇒ Object
Build the selected targets or default build targets, resolving dependencies and executing the build controller.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/teapot/command/build.rb', line 31 def call context = parent.context # The targets to build: if @targets.any? selection = context.select(@targets) else selection = context.select(context.configuration.targets[:build]) end chain = selection.chain environment = context.configuration.environment controller = ::Build::Controller.build(limit: @options[:limit]) do |builder| builder.add_chain(chain, self.argv, environment) end walker = nil # We need to catch interrupt here, and exit with the correct exit code: begin controller.run do |walker| show_dependencies(walker) if @options[:show_dependencies] # Only run once is asked: unless @options[:continuous] if walker.failed? raise BuildFailedError.new("Failed to build all nodes successfully!") end break end end rescue Interrupt if walker && walker.failed? raise BuildFailedError.new("Failed to build all nodes successfully!") end end return chain end |
#show_dependencies(walker) ⇒ Object
Display task dependencies for debugging, showing which tasks generate which outputs.
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/teapot/command/build.rb', line 75 def show_dependencies(walker) outputs = {} walker.tasks.each do |node, task| # puts "Task #{task} (#{node}) outputs:" task.outputs.each do |path| path = path.to_s # puts "\t#{path}" outputs[path] = task end end walker.tasks.each do |node, task| dependencies = {} task.inputs.each do |path| path = path.to_s if = outputs[path] dependencies[path] = end end puts "Task #{task.inspect} has #{dependencies.count} dependencies." dependencies.each do |path, task| puts "\t#{task.inspect}: #{path}" end end end |