Mike McQuaid a1f112f3fe
Move o* output methods to Utils::Output
This reduces the surface area of our `Kernel` monkeypatch and removes
the need to `include Kernel` in a bunch of modules.

While we're here, also move `Kernel#require?` to `Homebrew` and fully
scope the calls to it.
2025-08-20 19:20:19 +01:00

53 lines
1.6 KiB
Ruby

# typed: true # rubocop:todo Sorbet/StrictSigil
# frozen_string_literal: true
require "utils/output"
module Homebrew
module Bundle
module Remover
extend ::Utils::Output::Mixin
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
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
end
end
end