Sha256: 28cfbcfd82ed0495e3252bff822485cafaf591cfbaf5fabbe858bf0a22ff87fd

Contents?: true

Size: 1.39 KB

Versions: 40

Compression:

Stored size: 1.39 KB

Contents

require 'rake'
module Rake
  class TaskNotFound < StandardError; end
  def self.run(rakefile, dir, task, &block)
    old_pwd = FileUtils.pwd

    Rake::FileTask.module_eval do
      if not self.respond_to? :old_define_task
        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
      end

      def self.files
        @@files
      end
      
      def self.clear_files
        @@files = []
      end
    end

    Rake::Task.clear
    Rake::FileTask.clear_files

    t = nil
    pid = Process.fork{
      if block_given?
        TOPLEVEL_BINDING.receiver.instance_exec &block
      else
        if Misc.is_filename? rakefile
          load rakefile
        else
          TmpFile.with_file(rakefile) do |tmpfile|
            load tmpfile
          end
        end
      end

      raise TaskNotFound if Rake::Task[task].nil?

      Misc.pre_fork
      begin
        Misc.in_dir(dir) do
          Rake::Task[task].invoke

          Rake::Task.clear
          Rake::FileTask.clear_files
        end
      rescue Exception
        Log.error "Error in rake: #{$!.message}"
        Log.exception $!
        Kernel.exit! -1
      end
      Kernel.exit! 0
    }
    Process.waitpid(pid)
    raise "Rake failed" unless $?.success?

  end
end

Version data entries

40 entries across 40 versions & 1 rubygems

Version Path
rbbt-util-5.37.16 lib/rbbt/resource/rake.rb
rbbt-util-5.37.15 lib/rbbt/resource/rake.rb
rbbt-util-5.37.14 lib/rbbt/resource/rake.rb
rbbt-util-5.37.13 lib/rbbt/resource/rake.rb
rbbt-util-5.37.12 lib/rbbt/resource/rake.rb
rbbt-util-5.37.11 lib/rbbt/resource/rake.rb
rbbt-util-5.37.10 lib/rbbt/resource/rake.rb
rbbt-util-5.37.9 lib/rbbt/resource/rake.rb
rbbt-util-5.37.8 lib/rbbt/resource/rake.rb
rbbt-util-5.37.6 lib/rbbt/resource/rake.rb
rbbt-util-5.37.4 lib/rbbt/resource/rake.rb
rbbt-util-5.37.3 lib/rbbt/resource/rake.rb
rbbt-util-5.37.1 lib/rbbt/resource/rake.rb
rbbt-util-5.37.0 lib/rbbt/resource/rake.rb
rbbt-util-5.36.0 lib/rbbt/resource/rake.rb
rbbt-util-5.35.4 lib/rbbt/resource/rake.rb
rbbt-util-5.35.3 lib/rbbt/resource/rake.rb
rbbt-util-5.35.2 lib/rbbt/resource/rake.rb
rbbt-util-5.35.1 lib/rbbt/resource/rake.rb
rbbt-util-5.34.27 lib/rbbt/resource/rake.rb