Sha256: 95399a1c52e7d6b273d1ecf03bf3e61e20f07ea9ad0553e992d1d3dd06afb63f

Contents?: true

Size: 1.71 KB

Versions: 1

Compression:

Stored size: 1.71 KB

Contents

require 'rbbt/util/tsv'
require 'rbbt/util/open'
require 'rbbt/util/log'

module RakeHelper
  def self.files(rakefile, task = :default, chdir = nil)
    status = nil
    files = nil
    TmpFile.with_file do |f|
      pid = Process.fork{
        require 'rake'
        FileUtils.chdir chdir if chdir

        Rake::FileTask.module_eval do
          class << self
            alias_method :old_define_task, :define_task
          end
          def self.define_task(file, *args, &block)
            @@files ||= []
            @@files << file
            old_define_task(file, *args, &block)
          end

          def self.files
            @@files
          end
        end

        load rakefile

        Open.write(f, Rake::FileTask.files * "\n")
        exit
      }


      pid, status = Process.waitpid2(pid)
      files = Open.read(f).split("\n")
    end
    raise "Error getting files from Rake: #{ rakefile } " unless status.success?
    files
  end

  def self.run(rakefile, task = :default, chdir = nil)
    pid = Process.fork{
      require 'rake'
      FileUtils.chdir chdir if chdir

      Rake::FileTask.module_eval do
        class << self
          alias_method :old_define_task, :define_task
        end
        def self.define_task(file, *args, &block)
          @@files ||= []
          @@files << file
          old_define_task(file, *args, &block)
        end

        def self.files
          @@files
        end
      end

      load rakefile

      task(:default) do |t|
        Rake::FileTask.files.each do |file| Rake::Task[file].invoke end
      end

      Rake::Task[task].invoke
      exit
    }
    pid, status = Process.waitpid2(pid)

    raise "Error in Rake: #{ rakefile } => #{ task }" unless status.success?
  end
end


Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rbbt-util-1.2.1 lib/rbbt/util/rake.rb