Use Dir.mktmpdir instead of shelling out to mktemp
Closes Homebrew/homebrew#37616.
This commit is contained in:
parent
b03faffcc1
commit
db05618561
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user