Sha256: a2aaaa1b160f305e5966fd998141fc4190fd77b1e11db2fe9b9e60616bd2e6b5

Contents?: true

Size: 1.77 KB

Versions: 83

Compression:

Stored size: 1.77 KB

Contents

class Step
  def self.link_job(path, target_dir, task = nil, workflow = nil)
    Path.setup(target_dir)

    name = File.basename(path)
    task = File.basename(File.dirname(path)) if task.nil?
    workflow = File.basename(File.dirname(File.dirname(path))) if workflow.nil?

    return if target_dir[workflow][task][name].exists? || File.symlink?(target_dir[workflow][task][name].find)
    Log.debug "Linking #{ path }"
    FileUtils.mkdir_p target_dir[workflow][task] unless target_dir[workflow][task].exists?
    FileUtils.ln_s path, target_dir[workflow][task][name].find if File.exists?(path)
    FileUtils.ln_s path + '.files', target_dir[workflow][task][name].find + '.files' if File.exists?(path + '.files')
    FileUtils.ln_s path + '.info', target_dir[workflow][task][name].find + '.info' if File.exists?(path + '.info')
  end

  def archive(target = nil)
    target = self.path + '.tar.gz' if target.nil?
    target = File.expand_path(target)
    TmpFile.with_file do |tmpdir|
      Step.link_job self.path, tmpdir
      rec_dependencies = Set.new
      deps = [self.path]
      seen = Set.new
      while deps.any?
        path = deps.shift
        dep = Step.new path
        seen << dep.path
        dep.info[:dependencies].each do |task, name, path|
          dep = Step.new path
          next if seen.include? dep.path
          deps << dep.path
          rec_dependencies << dep.path
        end if dep.info[:dependencies]
      end

      rec_dependencies.each do |path|
        Step.link_job path, tmpdir
      end

      Misc.in_dir(tmpdir) do
        io = CMD.cmd("tar cvhzf '#{target}'  ./*", :pipe => true)
        while line = io.gets
          Log.debug line
        end
        io.join if io.respond_to? :join
      end
      Log.debug "Archive finished at: #{target}"
    end
  end
end

Version data entries

83 entries across 83 versions & 1 rubygems

Version Path
rbbt-util-5.26.21 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.20 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.19 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.18 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.17 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.16 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.15 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.14 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.13 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.12 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.11 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.10 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.9 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.8 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.6 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.5 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.4 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.3 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.2 lib/rbbt/workflow/archive.rb
rbbt-util-5.26.1 lib/rbbt/workflow/archive.rb