Class: Cask::Pkg Private

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
cask/pkg.rb

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.

Helper class for uninstalling .pkg installers.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(package_id, command = SystemCommand) ⇒ 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.

Parameters:



24
25
26
27
# File 'cask/pkg.rb', line 24

def initialize(package_id, command = SystemCommand)
  @package_id = package_id
  @command = command
end

Instance Attribute Details

#package_idString (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.

Returns:



21
22
23
# File 'cask/pkg.rb', line 21

def package_id
  @package_id
end

Class Method Details

.all_matching(regexp, command) ⇒ Array<Pkg>

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.

Parameters:

Returns:



14
15
16
17
18
# File 'cask/pkg.rb', line 14

def self.all_matching(regexp, command)
  command.run("/usr/sbin/pkgutil", args: ["--pkgs=#{regexp}"]).stdout.split("\n").map do |package_id|
    new(package_id.chomp, command)
  end
end

Instance Method Details

#forgetvoid

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.



62
63
64
65
# File 'cask/pkg.rb', line 62

def forget
  odebug "Unregistering pkg receipt (aka forgetting)"
  @command.run!("/usr/sbin/pkgutil", args: ["--forget", package_id], sudo: true)
end

#infoObject

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.



96
97
98
99
# File 'cask/pkg.rb', line 96

def info
  @info ||= @command.run!("/usr/sbin/pkgutil", args: ["--pkg-info-plist", package_id])
                    .plist
end

#pkgutil_bom_allArray<Pathname>

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:



83
84
85
86
87
88
89
# File 'cask/pkg.rb', line 83

def pkgutil_bom_all
  @pkgutil_bom_all ||= @command.run!("/usr/sbin/pkgutil", args: ["--files", package_id])
                               .stdout
                               .split("\n")
                               .map { |path| root.join(path) }
                               .reject(&MacOS.public_method(:undeletable?))
end

#pkgutil_bom_dirsArray<Pathname>

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:



78
79
80
# File 'cask/pkg.rb', line 78

def pkgutil_bom_dirs
  @pkgutil_bom_dirs ||= pkgutil_bom_all.select(&:directory?) - pkgutil_bom_specials
end

#pkgutil_bom_filesArray<Pathname>

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:



68
69
70
# File 'cask/pkg.rb', line 68

def pkgutil_bom_files
  @pkgutil_bom_files ||= pkgutil_bom_all.select(&:file?) - pkgutil_bom_specials
end

#pkgutil_bom_specialsArray<Pathname>

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:



73
74
75
# File 'cask/pkg.rb', line 73

def pkgutil_bom_specials
  @pkgutil_bom_specials ||= pkgutil_bom_all.select(&method(:special?))
end

#rootPathname

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:



92
93
94
# File 'cask/pkg.rb', line 92

def root
  @root ||= Pathname.new(info.fetch("volume")).join(info.fetch("install-location"))
end

#uninstallvoid

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.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'cask/pkg.rb', line 30

def uninstall
  unless pkgutil_bom_files.empty?
    odebug "Deleting pkg files"
    @command.run!(
      "/usr/bin/xargs",
      args:  ["-0", "--", "/bin/rm", "--"],
      input: pkgutil_bom_files.join("\0"),
      sudo:  true,
    )
  end

  unless pkgutil_bom_specials.empty?
    odebug "Deleting pkg symlinks and special files"
    @command.run!(
      "/usr/bin/xargs",
      args:  ["-0", "--", "/bin/rm", "--"],
      input: pkgutil_bom_specials.join("\0"),
      sudo:  true,
    )
  end

  unless pkgutil_bom_dirs.empty?
    odebug "Deleting pkg directories"
    rmdir(deepest_path_first(pkgutil_bom_dirs))
  end

  rmdir(root) unless MacOS.undeletable?(root)

  forget
end