class Bricolage::JobNet

Attributes

ref[R]

Public Class Methods

load(path, ref = JobNetRef.for_path(path)) click to toggle source
# File lib/bricolage/jobnet.rb, line 165
def JobNet.load(path, ref = JobNetRef.for_path(path))
  File.open(path) {|f|
    Parser.new(ref).parse_stream(f)
  }
rescue SystemCallError => err
  raise ParameterError, "could not load jobnet: #{path} (#{err.message})"
end
load_multiple_jobs(pathes, ref = JobNetRef.for_job_path(pathes.first)) click to toggle source
# File lib/bricolage/jobnet.rb, line 177
def JobNet.load_multiple_jobs(pathes, ref = JobNetRef.for_job_path(pathes.first))
  jobnet_script = StringIO.new
  prev = nil
  pathes.each do |path|
    jobnet_script.print '-> ' if prev
    case path.extname
    when '.job'
      r = JobRef.for_path(path)
      jobnet_script.puts r.to_s
    when '.jobnet'
      r = JobNetRef.for_job_path(path)
      jobnet_script.puts r.to_s
    else
      raise ParameterError, "is not a job nor a jobnet: #{path}"
    end
    prev = r
  end
  jobnet_script.rewind
  Parser.new(ref).parse_stream(jobnet_script)
end
load_single_job(path, ref = JobNetRef.for_job_path(path)) click to toggle source
# File lib/bricolage/jobnet.rb, line 173
def JobNet.load_single_job(path, ref = JobNetRef.for_job_path(path))
  load_multiple_jobs([path], ref)
end
new(ref, location) click to toggle source
# File lib/bricolage/jobnet.rb, line 198
def initialize(ref, location)
  @ref = ref
  @location = location
  @flow = {}   # Ref => [Ref] (src->dest)
  @deps = {}   # Ref => [Ref] (dest->src)
end

Public Instance Methods

add_edge(src, dest) click to toggle source
# File lib/bricolage/jobnet.rb, line 223
def add_edge(src, dest)
  (@flow[src] ||= []).push dest
  (@deps[dest] ||= []).push src
end
each_dependencies() { |dest, srcs| ... } click to toggle source
# File lib/bricolage/jobnet.rb, line 271
def each_dependencies
  @deps.each do |ref, deps|
    dest = (ref.net? ? ref.start : ref)
    srcs = deps.map {|r| r.net? ? r.end : r }
    yield dest, srcs
  end
end
end() click to toggle source
# File lib/bricolage/jobnet.rb, line 215
def end
  @ref.end_ref
end
fix() click to toggle source

Adds dummy dependencies (@start and @end) to fix up all jobs into one DAG beginning with @start and ending with @end

# File lib/bricolage/jobnet.rb, line 254
def fix
  refs.each do |ref|
    next if ref.dummy?
    unless @deps[ref]
      (@flow[self.start] ||= []).push ref
      @deps[ref] = [self.start]
    end
    unless @flow[ref]
      (@flow[ref] ||= []).push self.end
      (@deps[self.end] ||= []).push ref
    end
  end
  @deps[self.start] ||= []
  @flow.freeze
  @deps.freeze
end
inspect() click to toggle source
# File lib/bricolage/jobnet.rb, line 205
def inspect
  "\#<#{self.class} #{ref}>"
end
name() click to toggle source
# File lib/bricolage/jobnet.rb, line 219
def name
  @ref.to_s
end
net_refs() click to toggle source
# File lib/bricolage/jobnet.rb, line 248
def net_refs
  @deps.keys.select {|ref| ref.net? }
end
refs() click to toggle source
# File lib/bricolage/jobnet.rb, line 244
def refs
  @flow.keys | @flow.values.flatten
end
start() click to toggle source
# File lib/bricolage/jobnet.rb, line 211
def start
  @ref.start_ref
end
to_deps_hash() click to toggle source
# File lib/bricolage/jobnet.rb, line 236
def to_deps_hash
  h = {}
  @deps.each do |dest, srcs|
    h[dest.to_s] = srcs.map(&:to_s)
  end
  h
end
to_hash() click to toggle source
# File lib/bricolage/jobnet.rb, line 228
def to_hash
  h = {}
  @flow.each do |src, dests|
    h[src.to_s] = dests.map(&:to_s)
  end
  h
end