Class: Mktemp Private
Overview
This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.
Performs Formula#mktemp's functionality and tracks the results. Each instance is only intended to be used once.
Instance Attribute Summary collapse
-
#tmpdir ⇒ Object
readonly
private
Path to the tmpdir used in this run, as a Pathname.
Instance Method Summary collapse
-
#initialize(prefix, opts = {}) ⇒ Mktemp
constructor
private
A new instance of Mktemp.
-
#quiet! ⇒ void
private
Instructs this Mktemp to not emit messages when retention is triggered.
-
#retain! ⇒ void
private
Instructs this Mktemp to retain the staged files.
-
#retain? ⇒ Boolean
private
True if the staged temporary files should be retained.
-
#retain_in_cache? ⇒ Boolean
private
True if the source files should be retained.
- #run ⇒ Object private
Constructor Details
#initialize(prefix, opts = {}) ⇒ Mktemp
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns a new instance of Mktemp.
12 13 14 15 16 17 |
# File 'mktemp.rb', line 12 def initialize(prefix, opts = {}) @prefix = prefix @retain_in_cache = opts[:retain_in_cache] @retain = opts[:retain] || @retain_in_cache @quiet = false end |
Instance Attribute Details
#tmpdir ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Path to the tmpdir used in this run, as a Pathname.
10 11 12 |
# File 'mktemp.rb', line 10 def tmpdir @tmpdir end |
Instance Method Details
#quiet! ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
Instructs this Mktemp to not emit messages when retention is triggered.
37 38 39 |
# File 'mktemp.rb', line 37 def quiet! @quiet = true end |
#retain! ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
Instructs this Mktemp to retain the staged files.
21 22 23 |
# File 'mktemp.rb', line 21 def retain! @retain = true end |
#retain? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
True if the staged temporary files should be retained.
26 27 28 |
# File 'mktemp.rb', line 26 def retain? @retain end |
#retain_in_cache? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
True if the source files should be retained.
31 32 33 |
# File 'mktemp.rb', line 31 def retain_in_cache? @retain_in_cache end |
#run ⇒ Object
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'mktemp.rb', line 46 def run prefix_name = @prefix.tr "@", "AT" @tmpdir = if retain_in_cache? tmp_dir = HOMEBREW_CACHE/"Sources/#{prefix_name}" chmod_rm_rf(tmp_dir) # clear out previous staging directory tmp_dir.mkpath tmp_dir else Pathname.new(Dir.mktmpdir("#{prefix_name}-", HOMEBREW_TEMP)) end # Make sure files inside the temporary directory have the same group as the # brew instance. # # Reference from `man 2 open` # > When a new file is created, it is given the group of the directory which # contains it. group_id = if HOMEBREW_BREW_FILE.grpowned? HOMEBREW_BREW_FILE.stat.gid else Process.gid end begin chown(nil, group_id, @tmpdir) rescue Errno::EPERM opoo "Failed setting group \"#{T.must(Etc.getgrgid(group_id)).name}\" on #{@tmpdir}" end begin Dir.chdir(tmpdir) { yield self } ensure ignore_interrupts { chmod_rm_rf(@tmpdir) } unless retain? end ensure if retain? && @tmpdir.present? && !@quiet = retain_in_cache? ? "Source files for debugging available at:" : "Temporary files retained at:" ohai , @tmpdir.to_s end end |