Module: Homebrew::Bundle::Remover Private

Extended by:
Utils::Output::Mixin
Defined in:
bundle/remover.rb

This module is part of a private API. This module may only be used in the Homebrew/brew repository. Third parties should avoid using this module if possible, as it may be removed or changed without warning.

Class Method Summary collapse

Methods included from Utils::Output::Mixin

odebug, odeprecated, odie, odisabled, ofail, oh1, oh1_title, ohai, ohai_title, onoe, opoo, opoo_outside_github_actions, pretty_duration, pretty_installed, pretty_outdated, pretty_uninstalled

Class Method Details

.possible_names(formula_name, raise_error: true) ⇒ 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.



44
45
46
47
48
49
# File 'bundle/remover.rb', line 44

def self.possible_names(formula_name, raise_error: true)
  formula = Formulary.factory(formula_name)
  [formula_name, formula.name, formula.full_name, *formula.aliases, *formula.oldnames].compact.uniq
rescue FormulaUnavailableError
  raise if raise_error
end

.remove(*args, type:, global:, file:) ⇒ 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.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'bundle/remover.rb', line 11

def self.remove(*args, type:, global:, file:)
  require "bundle/brewfile"
  require "bundle/dumper"

  brewfile = Brewfile.read(global:, file:)
  content = brewfile.input
  entry_type = type.to_s if type != :none
  escaped_args = args.flat_map do |arg|
    names = if type == :brew
      possible_names(arg)
    else
      [arg]
    end

    names.uniq.map { |a| Regexp.escape(a) }
  end

  new_content = content.split("\n")
                       .grep_v(/#{entry_type}(\s+|\(\s*)"(#{escaped_args.join("|")})"/)
                       .join("\n") << "\n"

  if content.chomp == new_content.chomp &&
     type == :none &&
     args.any? { |arg| possible_names(arg, raise_error: false).count > 1 }
    opoo "No matching entries found in Brewfile. Try again with `--formula` to match formula " \
         "aliases and old formula names."
    return
  end

  path = Dumper.brewfile_path(global:, file:)
  Dumper.write_file path, new_content
end