Sha256: abfae44028a9443624f25695d8f5549ef4865f68c05f8f865eef612291e218be

Contents?: true

Size: 1.95 KB

Versions: 1

Compression:

Stored size: 1.95 KB

Contents

class Step
  def rec_dependencies
    rec_dependencies = dependencies.dup
    dependencies.inject(rec_dependencies){|acc,d| acc.concat d.rec_dependencies }
  end

  def recursive_inputs
    recursive_inputs = @inputs.to_hash
    dependencies.inject(recursive_inputs) do |acc,dep|
      acc.merge(dep.recursive_inputs)
    end
  end

  def input_dependencies
    return [] unless inputs
    inputs.collect do |d|
      if Step === d
        d
      elsif (Path === d) && (Step === d.pkgdir)
        d.pkgdir
      else
        nil
      end
    end.compact.uniq
  end

  def prepare_dependencies
    inverse_dep = {}
    dependencies.each{|dep|
      if dep.present? && ! dep.updated?
        Log.debug "Clean outdated #{dep.path}"
        dep.clean
      end
      next if dep.done?
      if dep.dependencies
        dep.dependencies.each do |d|
          inverse_dep[d] ||= []
          inverse_dep[d] << dep
        end
      end
      input_dependencies.each do |d|
        inverse_dep[d] ||= []
        inverse_dep[d] << dep
      end
    }
    inverse_dep.each do |dep,list|
      dep.tee_copies = list.length
    end
  end

  def run_dependencies
    dependencies.each{|dep| 
      next if dep.running? || dep.done?
      compute_options = compute[dep.path] if compute
      compute_options = [] if compute_options.nil?

      stream = compute_options.include?(:stream)
      stream = true unless ENV["SCOUT_EXPLICIT_STREAMING"] == 'true'
      stream = false if compute_options.include?(:produce)

      begin
        dep.run(stream)
      rescue ScoutException
        if compute_options.include?(:canfail)
          Log.medium "Allow failing of #{dep.path}"
        else
          raise $!
        end
      end
    }
  end

  def abort_dependencies
    dependencies.each{|dep| dep.abort if dep.running? }
  end

  def self.wait_for_jobs(jobs)
    threads = []
    jobs.each do |job|
      threads << Thread.new{ job.join }
    end
    threads.each do |t|
      t.join
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
scout-gear-8.1.0 lib/scout/workflow/step/dependencies.rb