diff options
Diffstat (limited to 'Library/Homebrew/cmd/unpack.rb')
| -rw-r--r-- | Library/Homebrew/cmd/unpack.rb | 74 | 
1 files changed, 74 insertions, 0 deletions
| diff --git a/Library/Homebrew/cmd/unpack.rb b/Library/Homebrew/cmd/unpack.rb new file mode 100644 index 000000000..ec9b0a126 --- /dev/null +++ b/Library/Homebrew/cmd/unpack.rb @@ -0,0 +1,74 @@ +require "stringio" +require "formula" + +module Homebrew +  extend self + +  module DATALoader +    # Original code from http://stackoverflow.com/a/2157556/371237 +    def self.load(path) +      data = StringIO.new +      path.open("r") do |f| +        begin +          line = f.gets +        end until line.nil? || /^__END__$/ === line +        data << line while line = f.gets +      end +      data.rewind +      data +    end +  end + +  module UnpackPatch +    def patch +      return unless ARGV.flag? "--patch" + +      begin +        old_verbose, $VERBOSE = $VERBOSE, nil +        Object.const_set "DATA", DATALoader.load(path) +      ensure +        $VERBOSE = old_verbose +      end + +      super +    end +  end + +  def unpack +    formulae = ARGV.formulae +    raise FormulaUnspecifiedError if formulae.empty? + +    if dir = ARGV.value("destdir") +      unpack_dir = Pathname.new(dir) +      unpack_dir.mkpath +    else +      unpack_dir = Pathname.pwd +    end + +    raise "Cannot write to #{unpack_dir}" unless unpack_dir.writable_real? + +    formulae.each do |f| +      f.extend(UnpackPatch) +      stage_dir = unpack_dir.join("#{f.name}-#{f.version}") + +      if stage_dir.exist? +        raise "Destination #{stage_dir} already exists!" unless ARGV.force? +        rm_rf stage_dir +      end + +      oh1 "Unpacking #{f.name} to: #{stage_dir}" + +      ENV['VERBOSE'] = '1' # show messages about tar +      f.brew { cp_r getwd, stage_dir } +      ENV['VERBOSE'] = nil + +      if ARGV.flag? "--git" +        ohai "Setting up git repository" +        cd stage_dir +        system "git", "init", "-q" +        system "git", "add", "-A" +        system "git", "commit", "-q", "-m", "brew-unpack" +      end +    end +  end +end | 
