Ensure ENV is pristine for each installation

Because we modified the ENV global each install this propagated to consecutive
formulae. So exec a new brew process each install. This is the safest way
although Ruby exceptions don't propagate to the parent process so I worry
about it somewhat.
This commit is contained in:
Max Howell 2009-08-08 14:10:32 +01:00
parent 69c076e741
commit f724f5ed52
3 changed files with 29 additions and 16 deletions

View File

@ -179,7 +179,7 @@ def prune
else
# always showing symlinks text is deliberate
print "Pruned #{$n} symbolic links "
print "and #{$n} directories " if $d > 0
print "and #{$d} directories " if $d > 0
puts "from #{HOMEBREW_PREFIX}"
end
end

View File

@ -38,7 +38,7 @@ class Keg <Pathname
# these dirs REMEMBER that *NOT* everything needs to be in the main tree
link_dir('etc') {:mkpath}
link_dir('bin') {:link}
link_dir('lib') {|path| :mkpath if %w[pkgconfig php].include? path.to_s}
link_dir('lib') {|path| :mkpath if %w[pkgconfig php perl5].include? path.to_s}
link_dir('include') {:link}
link_dir('share') {|path| :mkpath if mkpaths.include? path.to_s}

View File

@ -52,10 +52,24 @@ begin
end
when 'install'
require 'keg'
# we need to ensure a pristine ENV for each process or the formula
# will start with the ENV from the previous build
ARGV.formulae.each do |f|
pid=fork
if pid.nil?
exec "brew", "install-just-one", f.name, *ARGV.options
else
Process.wait pid
end
exit! 1 if $? != 0 # exception in other brew will be visible on screen
end
# this is an internal option, don't expose it to the user
when 'install-just-one'
require 'keg'
f=ARGV.formulae.shift
raise "#{f.name} is already installed" if f.installed? unless ARGV.force?
start_time=Time.now
BEGINNING=Time.now
begin
install f
ohai "Caveats", f.caveats, ''
@ -63,12 +77,11 @@ begin
clean f
raise "Nothing was installed to #{f.prefix}" unless f.installed?
Keg.new(f.prefix).link
rescue
rescue Exception
f.prefix.rmtree if f.prefix.directory?
raise
end
puts "#{f.prefix}: "+f.prefix.abv+", built in #{pretty_duration Time.now-start_time}"
end
puts "#{f.prefix}: #{f.prefix.abv}, built in #{pretty_duration Time.now-BEGINNING}"
when 'ln', 'link'
ARGV.kegs.each {|keg| puts "#{keg.link} links created for #{keg}"}