Handle exceptions during install correctly
rm -rf the prefix and build dirs when appropriate.
This commit is contained in:
		
							parent
							
								
									cbbc7b0f0f
								
							
						
					
					
						commit
						71a6287409
					
				@ -178,32 +178,30 @@ public
 | 
			
		||||
  # yields self with current working directory set to the uncompressed tarball
 | 
			
		||||
  def brew
 | 
			
		||||
    ohai "Downloading #{@url}"
 | 
			
		||||
 | 
			
		||||
    Dir.chdir appsupport do
 | 
			
		||||
      tgz=Pathname.new(fetch()).realpath
 | 
			
		||||
      md5=`md5 -q "#{tgz}"`.strip
 | 
			
		||||
      raise "MD5 mismatch: #{md5}" unless @md5 and md5 == @md5.downcase
 | 
			
		||||
 | 
			
		||||
      # we make an additional subdirectory so know exactly what we are
 | 
			
		||||
      # recursively deleting later
 | 
			
		||||
      # we use mktemp rather than appsupport/blah because some build scripts
 | 
			
		||||
      # can't handle being built in a directory with spaces in it :P
 | 
			
		||||
      tmp=nil
 | 
			
		||||
      tmp=tgz=nil
 | 
			
		||||
      begin
 | 
			
		||||
        tgz=Pathname.new(fetch()).realpath
 | 
			
		||||
        md5=`md5 -q "#{tgz}"`.strip
 | 
			
		||||
        raise "MD5 mismatch: #{md5}" unless @md5 and md5 == @md5.downcase
 | 
			
		||||
 | 
			
		||||
        # we make an additional subdirectory so know exactly what we are
 | 
			
		||||
        # recursively deleting later
 | 
			
		||||
        # we use mktemp rather than appsupport/blah because some build scripts
 | 
			
		||||
        # can't handle being built in a directory with spaces in it :P
 | 
			
		||||
        tmp=`mktemp -dt #{File.basename @url}`.strip
 | 
			
		||||
        Dir.chdir tmp do
 | 
			
		||||
          Dir.chdir uncompress(tgz) do
 | 
			
		||||
            yield self
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      rescue => e
 | 
			
		||||
        if e.kind_of? Interrupt and ARGV.include? '--debug'
 | 
			
		||||
      rescue Interrupt, RuntimeError
 | 
			
		||||
        if ARGV.include? '--debug'
 | 
			
		||||
          # debug mode allows the packager to intercept a failed build and
 | 
			
		||||
          # investigate the problems
 | 
			
		||||
          puts "Rescued build at: #{tmp}"
 | 
			
		||||
          exit! 1
 | 
			
		||||
        else
 | 
			
		||||
          FileUtils.rm_rf prefix
 | 
			
		||||
          raise
 | 
			
		||||
        end
 | 
			
		||||
      ensure
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										34
									
								
								bin/brew
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								bin/brew
									
									
									
									
									
								
							@ -212,20 +212,28 @@ begin
 | 
			
		||||
      shift_formulae_from_ARGV.each do |name|
 | 
			
		||||
        beginning = Time.now
 | 
			
		||||
        o=__obj(name)
 | 
			
		||||
        raise "#{o.prefix} already exists!" if o.prefix.exist?
 | 
			
		||||
        o.prefix.mkpath
 | 
			
		||||
        o.brew { o.install }
 | 
			
		||||
        ohai 'Finishing up'
 | 
			
		||||
        #TODO copy changelog or CHANGES file to pkg root,
 | 
			
		||||
        #TODO maybe README, etc. to versioned root
 | 
			
		||||
        o.clean
 | 
			
		||||
        ln name
 | 
			
		||||
        if o.caveats
 | 
			
		||||
          ohai "Caveats"
 | 
			
		||||
          puts o.caveats
 | 
			
		||||
          ohai "Summary"
 | 
			
		||||
        begin
 | 
			
		||||
          raise "#{o.prefix} already exists!" if o.prefix.exist?
 | 
			
		||||
          o.prefix.mkpath
 | 
			
		||||
          o.brew do
 | 
			
		||||
            o.install
 | 
			
		||||
            ['README','ChangeLog','COPYING','AUTHORS'].each do |file|
 | 
			
		||||
              FileUtils.cp file, o.prefix if File.file? file
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
          ohai 'Finishing up'
 | 
			
		||||
          o.clean
 | 
			
		||||
          ln name
 | 
			
		||||
          if o.caveats
 | 
			
		||||
            ohai "Caveats"
 | 
			
		||||
            puts o.caveats
 | 
			
		||||
            ohai "Summary"
 | 
			
		||||
          end
 | 
			
		||||
          puts "#{o.prefix}: "+abv(name)+", built in #{Time.now - beginning} seconds"
 | 
			
		||||
        rescue Exception
 | 
			
		||||
          FileUtils.rm_rf o.prefix
 | 
			
		||||
          raise
 | 
			
		||||
        end
 | 
			
		||||
        puts "#{o.prefix}: "+abv(name)+", built in #{Time.now - beginning} seconds"
 | 
			
		||||
      end
 | 
			
		||||
    when 'ln'
 | 
			
		||||
      n=0
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user