Class: Homebrew::Bundle::Brew Private
- Inherits:
-
PackageType
- Object
- PackageType
- Homebrew::Bundle::Brew
- Extended by:
- Utils::Output::Mixin
- Defined in:
- bundle/brew.rb,
bundle/brew_services.rb
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.
Direct Known Subclasses
Defined Under Namespace
Class Method Summary collapse
- .check_label ⇒ String private
- .dump(describe: false, no_restart: false) ⇒ String private
- .dump_output(describe: false, no_restart: false) ⇒ String private
- .expected_link_status?(link, keg_only:) ⇒ Boolean private
- .fetchable_name(name, options = {}, no_upgrade: false) ⇒ String? private
- .find_formula(name) ⇒ Hash{Symbol => T.untyped}? private
- .formula_aliases ⇒ Hash{String => String} private
- .formula_dep_names(name) ⇒ Array<String> private
- .formula_dump_link_status(formula) ⇒ Boolean? private
- .formula_in_array?(formula, array) ⇒ Boolean private
- .formula_installed?(formula) ⇒ Boolean private
- .formula_installed_and_up_to_date?(formula, no_upgrade: false) ⇒ Boolean private
- .formula_oldnames ⇒ Hash{String => String} private
- .formula_upgradable?(formula) ⇒ Boolean private
- .formulae ⇒ Array<Hash{Symbol => T.untyped}> private
-
.formulae_by_full_name(name = nil) ⇒ Hash{Symbol => T.untyped}, ...
private
Returns the full
@formulae_by_full_namemap when called without a name, or a single formula's attribute hash when called with a name. - .formulae_by_name(name) ⇒ Hash{Symbol => T.untyped}? private
- .inherited(subclass) ⇒ void private
- .install!(name, preinstall: true, no_upgrade: false, verbose: false, force: false, **options) ⇒ Boolean private
- .install_verb(name, options = {}) ⇒ Object private
- .installed_formulae ⇒ Array<String> private
- .link_status_to_check(formula, options) ⇒ Boolean? private
- .no_upgrade_with_args?(no_upgrade, formula_name) ⇒ Boolean private
- .outdated_formulae ⇒ Array<String> private
- .pinned_formulae ⇒ Array<String> private
- .preinstall!(name, no_upgrade: false, verbose: false, **options) ⇒ Boolean private
-
.recursive_dep_names(name) ⇒ Set<String>
private
Returns recursive dependency names for lock conflict detection.
- .reset! ⇒ void private
- .type ⇒ Symbol private
- .upgradable_formulae ⇒ Array<String> private
Instance Method Summary collapse
- #changed? ⇒ Boolean private
- #failure_reason(name, no_upgrade:) ⇒ String private
- #find_actionable(entries, exit_on_first_error: false, no_upgrade: false, verbose: false) ⇒ Array<String> private
- #initialize(name = "", options = {}) ⇒ void constructor private
- #install!(preinstall: true, no_upgrade: false, verbose: false, force: false) ⇒ Boolean private
- #install_change_state!(no_upgrade:, verbose:, force:) ⇒ Boolean private
- #installed_and_up_to_date?(formula, no_upgrade: false) ⇒ Boolean private
- #link_change_state!(verbose: false) ⇒ Boolean private
- #postinstall_change_state!(verbose:) ⇒ Boolean private
- #preinstall!(no_upgrade: false, verbose: false) ⇒ Boolean private
- #restart_service? ⇒ Boolean private
- #restart_service_needed? ⇒ Boolean private
- #service_change_state!(verbose:) ⇒ Boolean private
- #start_service? ⇒ Boolean private
- #start_service_needed? ⇒ Boolean private
Methods included from Utils::Output::Mixin
issue_reporting_message, odebug, odeprecated, odie, odisabled, ofail, oh1, oh1_title, ohai, ohai_title, onoe, opoo, opoo_outside_github_actions, opoo_without_github_actions_annotation, pretty_deprecated, pretty_disabled, pretty_duration, pretty_install_status, pretty_installed, pretty_uninstalled, pretty_unmarked, pretty_upgradable, pretty_warning
Methods inherited from PackageType
check, #checkable_entries, dump_supported?, #exit_early_check, #format_checkable, #full_check, install_supported?
Constructor Details
#initialize(name = "", options = {}) ⇒ 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.
455 456 457 458 459 460 461 462 463 464 465 466 467 468 |
# File 'bundle/brew.rb', line 455 def initialize(name = "", = {}) super() @full_name = name @name = T.let(Utils.name_from_full_name(name), String) @args = T.let(.fetch(:args, []).map { |arg| "--#{arg}" }, T::Array[String]) @conflicts_with_arg = T.let(.fetch(:conflicts_with, []), T::Array[String]) @restart_service = T.let([:restart_service], T.nilable(T.any(Symbol, T::Boolean))) @start_service = T.let(.fetch(:start_service, @restart_service), T.nilable(T.any(Symbol, T::Boolean))) @link = T.let(.fetch(:link, nil), T.nilable(T.any(Symbol, T::Boolean))) @postinstall = T.let(.fetch(:postinstall, nil), T.nilable(String)) @version_file = T.let(.fetch(:version_file, nil), T.nilable(String)) @trusted = T.let(.fetch(:trusted, false), T::Boolean) @changed = T.let(nil, T.nilable(T::Boolean)) end |
Class Method Details
.check_label ⇒ String
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.
22 |
# File 'bundle/brew.rb', line 22 def check_label = "Formula" |
.dump(describe: false, no_restart: false) ⇒ String
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.
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 |
# File 'bundle/brew.rb', line 251 def dump(describe: false, no_restart: false) require "bundle/brew_services" requested_formula = formulae.select do |f| f[:installed_on_request?] end trusted_formulae = Homebrew::Trust.trusted_entries(:formula) requested_formula.map do |f| brewline = if describe && f[:desc].present? f[:desc].split("\n").map { |s| "# #{s}\n" }.join else "" end brewline += "brew \"#{f[:full_name]}\"" args = f[:args].map { |arg| "\"#{arg}\"" }.sort.join(", ") brewline += ", args: [#{args}]" unless f[:args].empty? brewline += ", restart_service: :changed" if !no_restart && Services.started?(f[:full_name]) brewline += ", link: #{f[:link?]}" unless f[:link?].nil? brewline += ", trusted: true" if trusted_formulae.include?(f[:full_name]) brewline end.join("\n") end |
.dump_output(describe: false, no_restart: false) ⇒ String
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.
276 277 278 |
# File 'bundle/brew.rb', line 276 def dump_output(describe: false, no_restart: false) dump(describe:, no_restart:) end |
.expected_link_status?(link, keg_only:) ⇒ 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.
96 97 98 99 100 101 102 103 104 105 |
# File 'bundle/brew.rb', line 96 def expected_link_status?(link, keg_only:) case link when :overwrite, true true when false false else !keg_only end end |
.fetchable_name(name, options = {}, no_upgrade: false) ⇒ String?
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.
281 282 283 284 285 286 287 |
# File 'bundle/brew.rb', line 281 def fetchable_name(name, = {}, no_upgrade: false) _ = return if formula_installed_and_up_to_date?(name, no_upgrade:) name end |
.find_formula(name) ⇒ Hash{Symbol => T.untyped}?
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.
187 188 189 190 |
# File 'bundle/brew.rb', line 187 def find_formula(name) formula = T.cast(formulae_by_full_name(name), T.nilable(T::Hash[Symbol, T.untyped])) formula.presence || formulae_by_name(name) end |
.formula_aliases ⇒ Hash{String => String}
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.
290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 |
# File 'bundle/brew.rb', line 290 def formula_aliases return @formula_aliases if @formula_aliases @formula_aliases = {} formulae.each do |f| aliases = f[:aliases] next if aliases.blank? aliases.each do |a| @formula_aliases[a] = f[:full_name] if (tap_name = Utils.tap_from_full_name(f[:full_name])) @formula_aliases["#{tap_name}/#{a}"] = f[:full_name] end end end @formula_aliases end |
.formula_dep_names(name) ⇒ Array<String>
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.
193 194 195 |
# File 'bundle/brew.rb', line 193 def formula_dep_names(name) find_formula(name)&.fetch(:dependencies, []) || [] end |
.formula_dump_link_status(formula) ⇒ 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.
108 109 110 111 112 113 |
# File 'bundle/brew.rb', line 108 def formula_dump_link_status(formula) ( @formulae_by_full_name&.[](formula) || @formulae_by_name&.[](Utils.name_from_full_name(formula)) )&.fetch(:link?) end |
.formula_in_array?(formula, array) ⇒ 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.
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'bundle/brew.rb', line 121 def formula_in_array?(formula, array) return true if array.include?(formula) return true if array.include?(Utils.name_from_full_name(formula)) old_name = formula_oldnames[formula] old_name ||= formula_oldnames[Utils.name_from_full_name(formula)] return true if old_name && array.include?(old_name) resolved_full_name = formula_aliases[formula] return false unless resolved_full_name return true if array.include?(resolved_full_name) return true if array.include?(Utils.name_from_full_name(resolved_full_name)) false end |
.formula_installed?(formula) ⇒ 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.
138 139 140 141 142 143 144 |
# File 'bundle/brew.rb', line 138 def formula_installed?(formula) # Fully qualified tap formulae can be checked by their Cellar rack name # without loading the formula from an untrusted tap. return installed_formulae.include?(Utils.name_from_full_name(formula)) if Utils.full_name?(formula) formula_in_array?(formula, installed_formulae) end |
.formula_installed_and_up_to_date?(formula, no_upgrade: false) ⇒ 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.
74 75 76 77 78 79 |
# File 'bundle/brew.rb', line 74 def formula_installed_and_up_to_date?(formula, no_upgrade: false) return false unless formula_installed?(formula) return true if no_upgrade_with_args?(no_upgrade, formula) !formula_upgradable?(formula) end |
.formula_oldnames ⇒ Hash{String => String}
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.
309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 |
# File 'bundle/brew.rb', line 309 def formula_oldnames return @formula_oldnames if @formula_oldnames @formula_oldnames = {} formulae.each do |f| oldnames = f[:oldnames] next if oldnames.blank? oldnames.each do |oldname| @formula_oldnames[oldname] = f[:full_name] if (tap_name = Utils.tap_from_full_name(f[:full_name])) @formula_oldnames["#{tap_name}/#{oldname}"] = f[:full_name] end end end @formula_oldnames end |
.formula_upgradable?(formula) ⇒ 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.
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'bundle/brew.rb', line 147 def formula_upgradable?(formula) return false unless formula_installed?(formula) # Reading the formula is needed for authoritative outdated state, so # report trust problems before the upgrade check tries to load it. if Utils.full_name?(formula) && Homebrew::EnvConfig.require_tap_trust? require "trust" unless Homebrew::Trust.trusted?(:formula, formula) opoo "Cannot check whether #{formula} is outdated because its tap is not trusted. " \ "Run `brew trust --formula #{formula}` to trust it." return true end end # Check local cache first and then authoritative Homebrew source. (formula_in_array?(formula, upgradable_formulae) && Formula[formula].outdated?) || false end |
.formulae ⇒ Array<Hash{Symbol => T.untyped}>
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.
207 208 209 210 211 212 213 |
# File 'bundle/brew.rb', line 207 def formulae return @formulae if @formulae formulae_by_full_name # formulae_by_full_name sets @formulae as a side effect of calling sort! T.cast(@formulae, T::Array[T::Hash[Symbol, T.untyped]]) end |
.formulae_by_full_name(name = nil) ⇒ Hash{Symbol => T.untyped}, ...
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 the full @formulae_by_full_name map when called without a name,
or a single formula's attribute hash when called with a name.
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 |
# File 'bundle/brew.rb', line 222 def formulae_by_full_name(name = nil) return @formulae_by_full_name[name] if name.present? && @formulae_by_full_name&.key?(name) require "formula" require "formulary" Formulary.enable_factory_cache! @formulae_by_name ||= {} @formulae_by_full_name ||= {} if name.nil? formulae = Formula.installed.map { add_formula(it) } sort!(formulae) return @formulae_by_full_name end formula = Formula[name] add_formula(formula) rescue FormulaUnavailableError => e opoo "'#{name}' formula is unreadable: #{e}" {} end |
.formulae_by_name(name) ⇒ Hash{Symbol => T.untyped}?
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.
246 247 248 |
# File 'bundle/brew.rb', line 246 def formulae_by_name(name) T.cast(formulae_by_full_name(name), T.nilable(T::Hash[Symbol, T.untyped])) || @formulae_by_name&.[](name) end |
.inherited(subclass) ⇒ 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.
25 26 27 28 29 |
# File 'bundle/brew.rb', line 25 def inherited(subclass) return if subclass.name == "Homebrew::Bundle::Brew::Services" super end |
.install!(name, preinstall: true, no_upgrade: false, verbose: false, force: false, **options) ⇒ 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.
55 56 57 |
# File 'bundle/brew.rb', line 55 def install!(name, preinstall: true, no_upgrade: false, verbose: false, force: false, **) new(name, ).install!(preinstall:, no_upgrade:, verbose:, force:) end |
.install_verb(name, options = {}) ⇒ 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.
65 66 67 68 69 70 71 |
# File 'bundle/brew.rb', line 65 def install_verb(name, = {}) _ = return "Installing" unless formula_upgradable?(name) "Upgrading" end |
.installed_formulae ⇒ Array<String>
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.
167 168 169 |
# File 'bundle/brew.rb', line 167 def installed_formulae @installed_formulae ||= Formula.installed_formula_names end |
.link_status_to_check(formula, options) ⇒ 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.
82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'bundle/brew.rb', line 82 def link_status_to_check(formula, ) unless .key?(:link) return case formula_dump_link_status(formula) when true false when false true end end expected_link_status?([:link], keg_only: Formula[formula].keg_only?) end |
.no_upgrade_with_args?(no_upgrade, formula_name) ⇒ 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.
116 117 118 |
# File 'bundle/brew.rb', line 116 def no_upgrade_with_args?(no_upgrade, formula_name) no_upgrade && Bundle.upgrade_formulae.exclude?(formula_name) end |
.outdated_formulae ⇒ Array<String>
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.
177 178 179 |
# File 'bundle/brew.rb', line 177 def outdated_formulae @outdated_formulae ||= formulae.filter_map { |f| f[:name] if f[:outdated?] } end |
.pinned_formulae ⇒ Array<String>
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.
182 183 184 |
# File 'bundle/brew.rb', line 182 def pinned_formulae @pinned_formulae ||= formulae.filter_map { |f| f[:name] if f[:pinned?] } end |
.preinstall!(name, no_upgrade: false, verbose: false, **options) ⇒ 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.
47 48 49 |
# File 'bundle/brew.rb', line 47 def preinstall!(name, no_upgrade: false, verbose: false, **) new(name, ).preinstall!(no_upgrade:, verbose:) end |
.recursive_dep_names(name) ⇒ Set<String>
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 recursive dependency names for lock conflict detection.
199 200 201 202 203 204 |
# File 'bundle/brew.rb', line 199 def recursive_dep_names(name) require "formula" Formula[name].recursive_dependencies.to_set(&:name) rescue FormulaUnavailableError Set.new end |
.reset! ⇒ 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.
32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'bundle/brew.rb', line 32 def reset! require "bundle/brew_services" Homebrew::Bundle::Brew::Services.reset! @installed_formulae = T.let(nil, T.nilable(T::Array[String])) @outdated_formulae = T.let(nil, T.nilable(T::Array[String])) @pinned_formulae = T.let(nil, T.nilable(T::Array[String])) @formulae = T.let(nil, T.nilable(T::Array[T::Hash[Symbol, T.untyped]])) @formulae_by_full_name = T.let(nil, T.nilable(T::Hash[String, T::Hash[Symbol, T.untyped]])) @formulae_by_name = T.let(nil, T.nilable(T::Hash[String, T::Hash[Symbol, T.untyped]])) @formula_aliases = T.let(nil, T.nilable(T::Hash[String, String])) @formula_oldnames = T.let(nil, T.nilable(T::Hash[String, String])) end |
.type ⇒ Symbol
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.
19 |
# File 'bundle/brew.rb', line 19 def type = :brew |
.upgradable_formulae ⇒ Array<String>
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.
172 173 174 |
# File 'bundle/brew.rb', line 172 def upgradable_formulae outdated_formulae - pinned_formulae end |
Instance Method Details
#changed? ⇒ 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.
609 610 611 |
# File 'bundle/brew.rb', line 609 def changed? @changed.present? end |
#failure_reason(name, no_upgrade:) ⇒ String
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.
483 484 485 486 487 488 489 490 491 492 493 |
# File 'bundle/brew.rb', line 483 def failure_reason(name, no_upgrade:) formula = formula_name(name) = (name) return super(formula, no_upgrade:) unless self.class.formula_installed_and_up_to_date?(formula, no_upgrade:) link_status = self.class.link_status_to_check(formula, ) return super(formula, no_upgrade:) if link_status.nil? link_status = link_status ? "linked" : "unlinked" "Formula #{formula} needs to be #{link_status}." end |
#find_actionable(entries, exit_on_first_error: false, no_upgrade: false, verbose: false) ⇒ Array<String>
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.
503 504 505 506 507 508 509 510 511 |
# File 'bundle/brew.rb', line 503 def find_actionable(entries, exit_on_first_error: false, no_upgrade: false, verbose: false) requested = instance_of?(Homebrew::Bundle::Brew) ? checkable_entries(entries) : format_checkable(entries) if exit_on_first_error exit_early_check(requested, no_upgrade:) else full_check(requested, no_upgrade:) end end |
#install!(preinstall: true, no_upgrade: false, verbose: false, force: false) ⇒ 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.
525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 |
# File 'bundle/brew.rb', line 525 def install!(preinstall: true, no_upgrade: false, verbose: false, force: false) install_result = if preinstall install_change_state!(no_upgrade:, verbose:, force:) else true end result = install_result if installed? service_result = service_change_state!(verbose:) result &&= service_result link_result = link_change_state!(verbose:) result &&= link_result postinstall_result = postinstall_change_state!(verbose:) result &&= postinstall_result if result && @version_file.present? # Use the version from the environment if it hasn't changed. # Strip the revision number because it's not part of the non-Homebrew version. version = if !changed? && (env_version = Bundle.formula_versions_from_env(@name)) PkgVersion.parse(env_version).version else Formula[@full_name].version end.to_s File.write(@version_file, "#{version}\n") puts "Wrote #{@name} version #{version} to #{@version_file}" if verbose end end result end |
#install_change_state!(no_upgrade:, verbose:, force:) ⇒ 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.
561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 |
# File 'bundle/brew.rb', line 561 def install_change_state!(no_upgrade:, verbose:, force:) require "tap" # Trust before tapping: installing the tap loads the formula, which # triggers the trust check before any later step could grant trust. # Only fully-qualified names map to a tap, so unqualified names cannot # be meaningfully trusted. Homebrew::Trust.trust!(:formula, @full_name) if @trusted && Utils.full_name?(@full_name) if (tap_with_name = ::Tap.with_formula_name(@full_name)) tap, = tap_with_name tap.ensure_installed! end return false unless resolve_conflicts!(verbose:) if installed? upgrade_formula!(verbose:, force:) else install_formula!(verbose:, force:) end end |
#installed_and_up_to_date?(formula, no_upgrade: false) ⇒ 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.
471 472 473 474 475 476 477 478 479 480 |
# File 'bundle/brew.rb', line 471 def installed_and_up_to_date?(formula, no_upgrade: false) name = formula_name(formula) return false unless self.class.formula_installed_and_up_to_date?(name, no_upgrade:) = (formula) link_status = self.class.link_status_to_check(name, ) return true if link_status.nil? Formula[name].linked? == link_status end |
#link_change_state!(verbose: false) ⇒ 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.
631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 |
# File 'bundle/brew.rb', line 631 def link_change_state!(verbose: false) link_args = [] link_status = self.class.expected_link_status?(@link, keg_only: keg_only?) cmd = if link_status link_args << "--force" if unlinked_and_keg_only? link_args << "--overwrite" if @link == :overwrite "link" unless linked? elsif linked? "unlink" end if cmd.present? verb = "#{cmd}ing".capitalize with_args = " with #{link_args.join(" ")}" if link_args.present? puts "#{verb} #{@name} formula#{with_args}." if verbose return Bundle.brew(cmd, *link_args, @name, verbose:) end true end |
#postinstall_change_state!(verbose:) ⇒ 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.
653 654 655 656 657 658 659 |
# File 'bundle/brew.rb', line 653 def postinstall_change_state!(verbose:) return true if @postinstall.blank? return true unless changed? puts "Running postinstall for #{@name}: #{@postinstall}" if verbose Kernel.system(@postinstall) || false end |
#preinstall!(no_upgrade: false, verbose: false) ⇒ 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.
514 515 516 517 518 519 520 521 522 |
# File 'bundle/brew.rb', line 514 def preinstall!(no_upgrade: false, verbose: false) if installed? && (self.class.no_upgrade_with_args?(no_upgrade, @name) || !upgradable?) puts "Skipping install of #{@name} formula. It is already installed." if verbose @changed = nil return false end true end |
#restart_service? ⇒ 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.
596 597 598 |
# File 'bundle/brew.rb', line 596 def restart_service? @restart_service.present? end |
#restart_service_needed? ⇒ 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.
601 602 603 604 605 606 |
# File 'bundle/brew.rb', line 601 def restart_service_needed? return false unless restart_service? # Restart if `restart_service: :always`, or if the formula was installed or upgraded @restart_service.to_s == "always" || changed? end |
#service_change_state!(verbose:) ⇒ 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.
614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 |
# File 'bundle/brew.rb', line 614 def service_change_state!(verbose:) require "bundle/brew_services" file = Services.versioned_service_file(@name)&.to_s if restart_service_needed? puts "Restarting #{@name} service." if verbose Services.restart(@full_name, file:, verbose:) elsif start_service_needed? puts "Starting #{@name} service." if verbose Services.start(@full_name, file:, verbose:) else true end end |
#start_service? ⇒ 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.
585 586 587 |
# File 'bundle/brew.rb', line 585 def start_service? @start_service.present? end |
#start_service_needed? ⇒ 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.
590 591 592 593 |
# File 'bundle/brew.rb', line 590 def start_service_needed? require "bundle/brew_services" start_service? && !Services.started?(@full_name) end |