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