aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/extend
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew/extend')
-rw-r--r--Library/Homebrew/extend/fileutils.rb40
1 files changed, 40 insertions, 0 deletions
diff --git a/Library/Homebrew/extend/fileutils.rb b/Library/Homebrew/extend/fileutils.rb
new file mode 100644
index 000000000..89c7de2fe
--- /dev/null
+++ b/Library/Homebrew/extend/fileutils.rb
@@ -0,0 +1,40 @@
+require 'fileutils'
+
+# We enhance FileUtils to make our Formula code more readable.
+module Homebrew::FileUtils
+ include FileUtils
+
+ # Create a temporary directory then yield. When the block returns,
+ # recursively delete the temporary directory.
+ def mktemp
+ # 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.
+ tmp_prefix = ENV['HOMEBREW_TEMP'] || '/tmp'
+ tmp=Pathname.new `/usr/bin/mktemp -d #{tmp_prefix}/homebrew-#{name}-#{version}-XXXX`.strip
+ raise "Couldn't create build sandbox" if not tmp.directory? or $? != 0
+ begin
+ wd=Dir.pwd
+ chdir tmp
+ yield
+ ensure
+ chdir wd
+ tmp.rmtree
+ end
+ end
+
+ # A version of mkdir that also changes to that folder in a block.
+ def mkdir name, &block
+ super(name)
+ if block_given?
+ chdir name do
+ yield
+ end
+ end
+ end
+
+end