ENV.deparallelize: add block form for temporary change

Closes Homebrew/homebrew#39026.
This commit is contained in:
Misty De Meo 2015-04-25 02:03:00 -07:00
parent 789390f378
commit f5d6d80d5b
3 changed files with 36 additions and 1 deletions

View File

@ -78,8 +78,22 @@ module Stdenv
paths.select { |d| File.directory? d }.join(File::PATH_SEPARATOR) paths.select { |d| File.directory? d }.join(File::PATH_SEPARATOR)
end end
# Removes the MAKEFLAGS environment variable, causing make to use a single job.
# This is useful for makefiles with race conditions.
# When passed a block, MAKEFLAGS is removed only for the duration of the block and is restored after its completion.
# Returns the value of MAKEFLAGS.
def deparallelize def deparallelize
old = self['MAKEFLAGS']
remove 'MAKEFLAGS', /-j\d+/ remove 'MAKEFLAGS', /-j\d+/
if block_given?
begin
yield
ensure
self['MAKEFLAGS'] = old
end
end
old
end end
alias_method :j1, :deparallelize alias_method :j1, :deparallelize

View File

@ -241,8 +241,21 @@ module Superenv
public public
# Removes the MAKEFLAGS environment variable, causing make to use a single job.
# This is useful for makefiles with race conditions.
# When passed a block, MAKEFLAGS is removed only for the duration of the block and is restored after its completion.
# Returns the value of MAKEFLAGS.
def deparallelize def deparallelize
delete('MAKEFLAGS') old = delete('MAKEFLAGS')
if block_given?
begin
yield
ensure
self['MAKEFLAGS'] = old
end
end
old
end end
alias_method :j1, :deparallelize alias_method :j1, :deparallelize

View File

@ -114,6 +114,14 @@ module SharedEnvTests
assert_equal compiler, @env.compiler assert_equal compiler, @env.compiler
end end
end end
def test_deparallelize_block_form_restores_makeflags
@env['MAKEFLAGS'] = '-j4'
@env.deparallelize do
assert_nil @env['MAKEFLAGS']
end
assert_equal '-j4', @env['MAKEFLAGS']
end
end end
class StdenvTests < Homebrew::TestCase class StdenvTests < Homebrew::TestCase