Class: Mktemp

Inherits:
Object
  • Object
show all
Includes:
FileUtils
Defined in:
brew/Library/Homebrew/mktemp.rb

Overview

Performs Formula#mktemp’s functionality, and tracks the results. Each instance is only intended to be used once.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(prefix = name, opts = {}) ⇒ Mktemp

Returns a new instance of Mktemp



11
12
13
14
15
# File 'brew/Library/Homebrew/mktemp.rb', line 11

def initialize(prefix = name, opts = {})
  @prefix = prefix
  @retain = opts[:retain]
  @quiet = false
end

Instance Attribute Details

#tmpdirObject (readonly)

Path to the tmpdir used in this run, as a Pathname.



9
10
11
# File 'brew/Library/Homebrew/mktemp.rb', line 9

def tmpdir
  @tmpdir
end

Instance Method Details

#quiet!Object

Instructs this Mktemp to not emit messages when retention is triggered



28
29
30
# File 'brew/Library/Homebrew/mktemp.rb', line 28

def quiet!
  @quiet = true
end

#retain!Object

Instructs this Mktemp to retain the staged files



18
19
20
# File 'brew/Library/Homebrew/mktemp.rb', line 18

def retain!
  @retain = true
end

#retain?Boolean

True if the staged temporary files should be retained

Returns:

  • (Boolean)


23
24
25
# File 'brew/Library/Homebrew/mktemp.rb', line 23

def retain?
  @retain
end

#runObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'brew/Library/Homebrew/mktemp.rb', line 36

def run
  @tmpdir = Pathname.new(Dir.mktmpdir("#{@prefix}-", HOMEBREW_TEMP))

  # 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 \"#{Etc.getgrgid(group_id).name}\" on #{tmpdir}"
  end

  begin
    Dir.chdir(tmpdir) { yield self }
  ensure
    ignore_interrupts { rm_rf(tmpdir) } unless retain?
  end
ensure
  if retain? && !@tmpdir.nil? && !@quiet
    ohai "Kept temporary files"
    puts "Temporary files retained at #{@tmpdir}"
  end
end

#to_sObject



32
33
34
# File 'brew/Library/Homebrew/mktemp.rb', line 32

def to_s
  "[Mktemp: #{tmpdir} retain=#{@retain} quiet=#{@quiet}]"
end