diff options
| author | Misty De Meo | 2015-04-25 02:03:00 -0700 | 
|---|---|---|
| committer | Misty De Meo | 2015-04-25 12:45:31 -0700 | 
| commit | 606127a8f43b67a4a695a5c4d3739a44b7a577d8 (patch) | |
| tree | 95f12d77a470947203e761c25cb8d88a49347a47 /Library/Homebrew | |
| parent | 8ad6717b72178c8a20c7d1d0a577265edff4d31c (diff) | |
| download | homebrew-606127a8f43b67a4a695a5c4d3739a44b7a577d8.tar.bz2 | |
ENV.deparallelize: add block form for temporary change
Closes #39026.
Diffstat (limited to 'Library/Homebrew')
| -rw-r--r-- | Library/Homebrew/extend/ENV/std.rb | 14 | ||||
| -rw-r--r-- | Library/Homebrew/extend/ENV/super.rb | 15 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_ENV.rb | 8 | 
3 files changed, 36 insertions, 1 deletions
| diff --git a/Library/Homebrew/extend/ENV/std.rb b/Library/Homebrew/extend/ENV/std.rb index bea13c173..4f3c9887d 100644 --- a/Library/Homebrew/extend/ENV/std.rb +++ b/Library/Homebrew/extend/ENV/std.rb @@ -78,8 +78,22 @@ module Stdenv      paths.select { |d| File.directory? d }.join(File::PATH_SEPARATOR)    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 +    old = self['MAKEFLAGS']      remove 'MAKEFLAGS', /-j\d+/ +    if block_given? +      begin +        yield +      ensure +        self['MAKEFLAGS'] = old +      end +    end + +    old    end    alias_method :j1, :deparallelize diff --git a/Library/Homebrew/extend/ENV/super.rb b/Library/Homebrew/extend/ENV/super.rb index d03f10981..603e4c052 100644 --- a/Library/Homebrew/extend/ENV/super.rb +++ b/Library/Homebrew/extend/ENV/super.rb @@ -241,8 +241,21 @@ module Superenv    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 -    delete('MAKEFLAGS') +    old = delete('MAKEFLAGS') +    if block_given? +      begin +        yield +      ensure +        self['MAKEFLAGS'] = old +      end +    end + +    old    end    alias_method :j1, :deparallelize diff --git a/Library/Homebrew/test/test_ENV.rb b/Library/Homebrew/test/test_ENV.rb index 94a182ac2..a40448f77 100644 --- a/Library/Homebrew/test/test_ENV.rb +++ b/Library/Homebrew/test/test_ENV.rb @@ -114,6 +114,14 @@ module SharedEnvTests        assert_equal compiler, @env.compiler      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  class StdenvTests < Homebrew::TestCase | 
