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:
parent
69c076e741
commit
f724f5ed52
@ -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
|
||||
|
||||
@ -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}
|
||||
|
||||
|
||||
23
bin/brew
23
bin/brew
@ -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}"}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user