diff --git a/Library/Homebrew/extend/fileutils.rb b/Library/Homebrew/extend/fileutils.rb index aa1735cb1d..a29128378c 100644 --- a/Library/Homebrew/extend/fileutils.rb +++ b/Library/Homebrew/extend/fileutils.rb @@ -1,4 +1,5 @@ -require 'fileutils' +require "fileutils" +require "tmpdir" # We enhance FileUtils to make our Formula code more readable. module FileUtils @@ -6,24 +7,19 @@ module FileUtils # Create a temporary directory then yield. When the block returns, # recursively delete the temporary directory. def mktemp(prefix=name) - # I used /tmp rather than `mktemp -td` because that generates a directory - # name with exotic characters like + in it, and these break badly written - # scripts that don't escape strings before trying to regexp them :( - - # If the user has FileVault enabled, then we can't mv symlinks from the - # /tmp volume to the other volume. So we let the user override the tmp - # prefix if they need to. - - tempd = with_system_path { `mktemp -d #{HOMEBREW_TEMP}/#{prefix}-XXXXXX` }.strip - raise "Failed to create sandbox" if tempd.empty? - prevd = pwd - cd(tempd) + prev = pwd + tmp = Dir.mktmpdir(prefix, HOMEBREW_TEMP) begin - yield + cd(tmp) + + begin + yield + ensure + cd(prev) + end ensure - cd(prevd) - ignore_interrupts { rm_r(tempd) } + ignore_interrupts { rm_r(tmp) } end end module_function :mktemp