Merge pull request #8431 from SeekingMeaning/formula/installed_prefix
formula: rename `installed_prefix` and `opt_or_installed_prefix_keg`
This commit is contained in:
commit
5e5dabcadd
@ -163,7 +163,7 @@ module Homebrew
|
|||||||
Formulary.from_rack(rack)
|
Formulary.from_rack(rack)
|
||||||
end
|
end
|
||||||
|
|
||||||
unless (prefix = f.installed_prefix).directory?
|
unless (prefix = f.latest_installed_prefix).directory?
|
||||||
raise MultipleVersionsInstalledError, "#{rack.basename} has multiple installed versions"
|
raise MultipleVersionsInstalledError, "#{rack.basename} has multiple installed versions"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ module Homebrew
|
|||||||
puts HOMEBREW_PREFIX
|
puts HOMEBREW_PREFIX
|
||||||
else
|
else
|
||||||
puts args.named.to_resolved_formulae.map { |f|
|
puts args.named.to_resolved_formulae.map { |f|
|
||||||
f.opt_prefix.exist? ? f.opt_prefix : f.installed_prefix
|
f.opt_prefix.exist? ? f.opt_prefix : f.latest_installed_prefix
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -219,8 +219,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
opoo msg if msg
|
opoo msg if msg
|
||||||
elsif !f.any_version_installed? && old_formula = f.old_installed_formulae.first
|
elsif !f.any_version_installed? && old_formula = f.old_installed_formulae.first
|
||||||
installed_version = old_formula.opt_or_installed_prefix_keg.version
|
msg = "#{old_formula.full_name} #{old_formula.any_installed_version} already installed"
|
||||||
msg = "#{old_formula.full_name} #{installed_version} already installed"
|
|
||||||
if !old_formula.linked? && !old_formula.keg_only?
|
if !old_formula.linked? && !old_formula.keg_only?
|
||||||
msg = <<~EOS
|
msg = <<~EOS
|
||||||
#{msg}, it's just not linked.
|
#{msg}, it's just not linked.
|
||||||
|
@ -16,6 +16,28 @@ class Formula
|
|||||||
|
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def installed_prefix
|
||||||
|
# TODO: deprecate for Homebrew 2.5
|
||||||
|
# odeprecated "Formula#installed_prefix",
|
||||||
|
# "Formula#latest_installed_prefix (or Formula#any_installed_prefix)"
|
||||||
|
latest_installed_prefix
|
||||||
|
end
|
||||||
|
|
||||||
|
# The currently installed version for this formula. Will raise an exception
|
||||||
|
# if the formula is not installed.
|
||||||
|
# @private
|
||||||
|
def installed_version
|
||||||
|
# TODO: deprecate for Homebrew 2.5
|
||||||
|
# odeprecated "Formula#installed_version"
|
||||||
|
Keg.new(latest_installed_prefix).version
|
||||||
|
end
|
||||||
|
|
||||||
|
def opt_or_installed_prefix_keg
|
||||||
|
# TODO: deprecate for Homebrew 2.5
|
||||||
|
# odeprecated "Formula#opt_or_installed_prefix_keg", "Formula#any_installed_keg"
|
||||||
|
any_installed_keg
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
prepend Compat
|
prepend Compat
|
||||||
|
@ -32,7 +32,7 @@ module Homebrew
|
|||||||
|
|
||||||
CacheStoreDatabase.use(:linkage) do |db|
|
CacheStoreDatabase.use(:linkage) do |db|
|
||||||
kegs = if args.named.to_kegs.empty?
|
kegs = if args.named.to_kegs.empty?
|
||||||
Formula.installed.map(&:opt_or_installed_prefix_keg).reject(&:nil?)
|
Formula.installed.map(&:any_installed_keg).reject(&:nil?)
|
||||||
else
|
else
|
||||||
args.named.to_kegs
|
args.named.to_kegs
|
||||||
end
|
end
|
||||||
|
@ -73,7 +73,7 @@ module Homebrew
|
|||||||
else
|
else
|
||||||
if gnupg.any_version_installed?
|
if gnupg.any_version_installed?
|
||||||
path = PATH.new(ENV.fetch("PATH"))
|
path = PATH.new(ENV.fetch("PATH"))
|
||||||
path.prepend(gnupg.opt_or_installed_prefix_keg/"bin")
|
path.prepend(gnupg.any_installed_prefix/"bin")
|
||||||
ENV["PATH"] = path
|
ENV["PATH"] = path
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -60,7 +60,7 @@ module Homebrew
|
|||||||
else
|
else
|
||||||
if gnupg.any_version_installed?
|
if gnupg.any_version_installed?
|
||||||
path = PATH.new(ENV.fetch("PATH"))
|
path = PATH.new(ENV.fetch("PATH"))
|
||||||
path.prepend(gnupg.opt_or_installed_prefix_keg/"bin")
|
path.prepend(gnupg.any_installed_prefix/"bin")
|
||||||
ENV["PATH"] = path
|
ENV["PATH"] = path
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -488,11 +488,11 @@ class Formula
|
|||||||
delegate compiler_failures: :active_spec
|
delegate compiler_failures: :active_spec
|
||||||
|
|
||||||
# If this {Formula} is installed.
|
# If this {Formula} is installed.
|
||||||
# This is actually just a check for if the {#installed_prefix} directory
|
# This is actually just a check for if the {#latest_installed_prefix} directory
|
||||||
# exists and is not empty.
|
# exists and is not empty.
|
||||||
# @private
|
# @private
|
||||||
def latest_version_installed?
|
def latest_version_installed?
|
||||||
(dir = installed_prefix).directory? && !dir.children.empty?
|
(dir = latest_installed_prefix).directory? && !dir.children.empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
# If at least one version of {Formula} is installed.
|
# If at least one version of {Formula} is installed.
|
||||||
@ -547,7 +547,7 @@ class Formula
|
|||||||
# The latest prefix for this formula. Checks for {#head}, then {#devel}
|
# The latest prefix for this formula. Checks for {#head}, then {#devel}
|
||||||
# and then {#stable}'s {#prefix}
|
# and then {#stable}'s {#prefix}
|
||||||
# @private
|
# @private
|
||||||
def installed_prefix
|
def latest_installed_prefix
|
||||||
if head && (head_version = latest_head_version) && !head_version_outdated?(head_version)
|
if head && (head_version = latest_head_version) && !head_version_outdated?(head_version)
|
||||||
latest_head_prefix
|
latest_head_prefix
|
||||||
elsif devel && (devel_prefix = prefix(PkgVersion.new(devel.version, revision))).directory?
|
elsif devel && (devel_prefix = prefix(PkgVersion.new(devel.version, revision))).directory?
|
||||||
@ -559,13 +559,6 @@ class Formula
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# The currently installed version for this formula. Will raise an exception
|
|
||||||
# if the formula is not installed.
|
|
||||||
# @private
|
|
||||||
def installed_version
|
|
||||||
Keg.new(installed_prefix).version
|
|
||||||
end
|
|
||||||
|
|
||||||
# The directory in the cellar that the formula is installed to.
|
# The directory in the cellar that the formula is installed to.
|
||||||
# This directory points to {#opt_prefix} if it exists and if #{prefix} is not
|
# This directory points to {#opt_prefix} if it exists and if #{prefix} is not
|
||||||
# called from within the same formula's {#install} or {#post_install} methods.
|
# called from within the same formula's {#install} or {#post_install} methods.
|
||||||
@ -1617,20 +1610,30 @@ class Formula
|
|||||||
# Returns a Keg for the opt_prefix or installed_prefix if they exist.
|
# Returns a Keg for the opt_prefix or installed_prefix if they exist.
|
||||||
# If not, return nil.
|
# If not, return nil.
|
||||||
# @private
|
# @private
|
||||||
def opt_or_installed_prefix_keg
|
def any_installed_keg
|
||||||
Formula.cache[:opt_or_installed_prefix_keg] ||= {}
|
Formula.cache[:any_installed_keg] ||= {}
|
||||||
Formula.cache[:opt_or_installed_prefix_keg][full_name] ||= if optlinked? && opt_prefix.exist?
|
Formula.cache[:any_installed_keg][full_name] ||= if (installed_prefix = any_installed_prefix)
|
||||||
Keg.new(opt_prefix)
|
Keg.new(installed_prefix)
|
||||||
elsif (latest_installed_prefix = installed_prefixes.last)
|
|
||||||
Keg.new(latest_installed_prefix)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def any_installed_prefix
|
||||||
|
if optlinked? && opt_prefix.exist?
|
||||||
|
opt_prefix
|
||||||
|
elsif (latest_installed_prefix = installed_prefixes.last)
|
||||||
|
latest_installed_prefix
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def any_installed_version
|
||||||
|
any_installed_keg&.version
|
||||||
|
end
|
||||||
|
|
||||||
# Returns a list of Dependency objects that are required at runtime.
|
# Returns a list of Dependency objects that are required at runtime.
|
||||||
# @private
|
# @private
|
||||||
def runtime_dependencies(read_from_tab: true, undeclared: true)
|
def runtime_dependencies(read_from_tab: true, undeclared: true)
|
||||||
deps = if read_from_tab && undeclared &&
|
deps = if read_from_tab && undeclared &&
|
||||||
(tab_deps = opt_or_installed_prefix_keg&.runtime_dependencies)
|
(tab_deps = any_installed_keg&.runtime_dependencies)
|
||||||
tab_deps.map do |d|
|
tab_deps.map do |d|
|
||||||
full_name = d["full_name"]
|
full_name = d["full_name"]
|
||||||
next unless full_name
|
next unless full_name
|
||||||
@ -1665,12 +1668,12 @@ class Formula
|
|||||||
end
|
end
|
||||||
|
|
||||||
def runtime_installed_formula_dependents
|
def runtime_installed_formula_dependents
|
||||||
# `opt_or_installed_prefix_keg` and `runtime_dependencies` `select`s ensure
|
# `any_installed_keg` and `runtime_dependencies` `select`s ensure
|
||||||
# that we don't end up with something `Formula#runtime_dependencies` can't
|
# that we don't end up with something `Formula#runtime_dependencies` can't
|
||||||
# read from a `Tab`.
|
# read from a `Tab`.
|
||||||
Formula.cache[:runtime_installed_formula_dependents] = {}
|
Formula.cache[:runtime_installed_formula_dependents] = {}
|
||||||
Formula.cache[:runtime_installed_formula_dependents][full_name] ||= Formula.installed
|
Formula.cache[:runtime_installed_formula_dependents][full_name] ||= Formula.installed
|
||||||
.select(&:opt_or_installed_prefix_keg)
|
.select(&:any_installed_keg)
|
||||||
.select(&:runtime_dependencies)
|
.select(&:runtime_dependencies)
|
||||||
.select do |f|
|
.select do |f|
|
||||||
f.runtime_formula_dependencies.any? do |dep|
|
f.runtime_formula_dependencies.any? do |dep|
|
||||||
@ -1910,7 +1913,7 @@ class Formula
|
|||||||
# but the formula links to.
|
# but the formula links to.
|
||||||
# @private
|
# @private
|
||||||
def undeclared_runtime_dependencies
|
def undeclared_runtime_dependencies
|
||||||
keg = opt_or_installed_prefix_keg
|
keg = any_installed_keg
|
||||||
return [] unless keg
|
return [] unless keg
|
||||||
|
|
||||||
CacheStoreDatabase.use(:linkage) do |db|
|
CacheStoreDatabase.use(:linkage) do |db|
|
||||||
|
@ -14,7 +14,7 @@ module Language
|
|||||||
next false unless f.any_version_installed?
|
next false unless f.any_version_installed?
|
||||||
|
|
||||||
unless version.zero?
|
unless version.zero?
|
||||||
major = f.opt_or_installed_prefix_keg.version.major
|
major = f.any_installed_version.major
|
||||||
next false if major < version
|
next false if major < version
|
||||||
next false if major > version && !can_be_newer
|
next false if major > version && !can_be_newer
|
||||||
end
|
end
|
||||||
|
@ -81,7 +81,7 @@ module Homebrew
|
|||||||
formula.head.downloader.shutup! if formula.head?
|
formula.head.downloader.shutup! if formula.head?
|
||||||
|
|
||||||
current = if formula.head?
|
current = if formula.head?
|
||||||
formula.opt_or_installed_prefix_keg.version.version.commit
|
formula.any_installed_version.version.commit
|
||||||
else
|
else
|
||||||
formula.version
|
formula.version
|
||||||
end
|
end
|
||||||
|
@ -145,7 +145,7 @@ class Tab < OpenStruct
|
|||||||
paths << dirs.first
|
paths << dirs.first
|
||||||
end
|
end
|
||||||
|
|
||||||
paths << f.installed_prefix
|
paths << f.latest_installed_prefix
|
||||||
|
|
||||||
path = paths.map { |pn| pn/FILENAME }.find(&:file?)
|
path = paths.map { |pn| pn/FILENAME }.find(&:file?)
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ end
|
|||||||
describe "brew link", :integration_test do
|
describe "brew link", :integration_test do
|
||||||
it "links a given Formula" do
|
it "links a given Formula" do
|
||||||
install_test_formula "testball"
|
install_test_formula "testball"
|
||||||
Formula["testball"].opt_or_installed_prefix_keg.unlink
|
Formula["testball"].any_installed_keg.unlink
|
||||||
|
|
||||||
expect { brew "link", "testball" }
|
expect { brew "link", "testball" }
|
||||||
.to output(/Linking/).to_stdout
|
.to output(/Linking/).to_stdout
|
||||||
|
@ -28,17 +28,17 @@ describe Homebrew do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:kegs_by_rack) { { dependency.rack => [Keg.new(dependency.installed_prefix)] } }
|
let(:kegs_by_rack) { { dependency.rack => [Keg.new(dependency.latest_installed_prefix)] } }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
[dependency, dependent].each do |f|
|
[dependency, dependent].each do |f|
|
||||||
f.installed_prefix.mkpath
|
f.latest_installed_prefix.mkpath
|
||||||
Keg.new(f.installed_prefix).optlink
|
Keg.new(f.latest_installed_prefix).optlink
|
||||||
end
|
end
|
||||||
|
|
||||||
tab = Tab.empty
|
tab = Tab.empty
|
||||||
tab.homebrew_version = "1.1.6"
|
tab.homebrew_version = "1.1.6"
|
||||||
tab.tabfile = dependent.installed_prefix/Tab::FILENAME
|
tab.tabfile = dependent.latest_installed_prefix/Tab::FILENAME
|
||||||
tab.runtime_dependencies = [
|
tab.runtime_dependencies = [
|
||||||
{ "full_name" => "dependency", "version" => "1" },
|
{ "full_name" => "dependency", "version" => "1" },
|
||||||
]
|
]
|
||||||
|
@ -282,23 +282,23 @@ describe Formula do
|
|||||||
describe "#latest_version_installed?" do
|
describe "#latest_version_installed?" do
|
||||||
let(:f) { Testball.new }
|
let(:f) { Testball.new }
|
||||||
|
|
||||||
it "returns false if the #installed_prefix is not a directory" do
|
it "returns false if the #latest_installed_prefix is not a directory" do
|
||||||
allow(f).to receive(:installed_prefix).and_return(double(directory?: false))
|
allow(f).to receive(:latest_installed_prefix).and_return(double(directory?: false))
|
||||||
expect(f).not_to be_latest_version_installed
|
expect(f).not_to be_latest_version_installed
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns false if the #installed_prefix does not have children" do
|
it "returns false if the #latest_installed_prefix does not have children" do
|
||||||
allow(f).to receive(:installed_prefix).and_return(double(directory?: true, children: []))
|
allow(f).to receive(:latest_installed_prefix).and_return(double(directory?: true, children: []))
|
||||||
expect(f).not_to be_latest_version_installed
|
expect(f).not_to be_latest_version_installed
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true if the #installed_prefix has children" do
|
it "returns true if the #latest_installed_prefix has children" do
|
||||||
allow(f).to receive(:installed_prefix).and_return(double(directory?: true, children: [double]))
|
allow(f).to receive(:latest_installed_prefix).and_return(double(directory?: true, children: [double]))
|
||||||
expect(f).to be_latest_version_installed
|
expect(f).to be_latest_version_installed
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#installed prefix" do
|
describe "#latest_installed_prefix" do
|
||||||
let(:f) do
|
let(:f) do
|
||||||
formula do
|
formula do
|
||||||
url "foo"
|
url "foo"
|
||||||
@ -311,17 +311,17 @@ describe Formula do
|
|||||||
let(:head_prefix) { HOMEBREW_CELLAR/f.name/f.head.version }
|
let(:head_prefix) { HOMEBREW_CELLAR/f.name/f.head.version }
|
||||||
|
|
||||||
it "is the same as #prefix by default" do
|
it "is the same as #prefix by default" do
|
||||||
expect(f.installed_prefix).to eq(f.prefix)
|
expect(f.latest_installed_prefix).to eq(f.prefix)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns the stable prefix if it is installed" do
|
it "returns the stable prefix if it is installed" do
|
||||||
stable_prefix.mkpath
|
stable_prefix.mkpath
|
||||||
expect(f.installed_prefix).to eq(stable_prefix)
|
expect(f.latest_installed_prefix).to eq(stable_prefix)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns the head prefix if it is installed" do
|
it "returns the head prefix if it is installed" do
|
||||||
head_prefix.mkpath
|
head_prefix.mkpath
|
||||||
expect(f.installed_prefix).to eq(head_prefix)
|
expect(f.latest_installed_prefix).to eq(head_prefix)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns the stable prefix if head is outdated" do
|
it "returns the stable prefix if head is outdated" do
|
||||||
@ -332,12 +332,12 @@ describe Formula do
|
|||||||
tab.source["versions"] = { "stable" => "1.0" }
|
tab.source["versions"] = { "stable" => "1.0" }
|
||||||
tab.write
|
tab.write
|
||||||
|
|
||||||
expect(f.installed_prefix).to eq(stable_prefix)
|
expect(f.latest_installed_prefix).to eq(stable_prefix)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns the head prefix if the active specification is :head" do
|
it "returns the head prefix if the active specification is :head" do
|
||||||
f.active_spec = :head
|
f.active_spec = :head
|
||||||
expect(f.installed_prefix).to eq(head_prefix)
|
expect(f.latest_installed_prefix).to eq(head_prefix)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -728,7 +728,7 @@ describe Formula do
|
|||||||
dependency = formula("dependency") { url "f-1.0" }
|
dependency = formula("dependency") { url "f-1.0" }
|
||||||
|
|
||||||
formula.brew { formula.install }
|
formula.brew { formula.install }
|
||||||
keg = Keg.for(formula.installed_prefix)
|
keg = Keg.for(formula.latest_installed_prefix)
|
||||||
keg.link
|
keg.link
|
||||||
|
|
||||||
linkage_checker = double("linkage checker", undeclared_deps: [dependency.name])
|
linkage_checker = double("linkage checker", undeclared_deps: [dependency.name])
|
||||||
@ -745,7 +745,7 @@ describe Formula do
|
|||||||
tab.runtime_dependencies = ["foo"]
|
tab.runtime_dependencies = ["foo"]
|
||||||
tab.write
|
tab.write
|
||||||
|
|
||||||
keg = Keg.for(formula.installed_prefix)
|
keg = Keg.for(formula.latest_installed_prefix)
|
||||||
keg.link
|
keg.link
|
||||||
|
|
||||||
expect(formula.runtime_dependencies.map(&:name)).to be_empty
|
expect(formula.runtime_dependencies.map(&:name)).to be_empty
|
||||||
@ -865,7 +865,7 @@ describe Formula do
|
|||||||
head("foo")
|
head("foo")
|
||||||
end
|
end
|
||||||
|
|
||||||
stable_prefix = f.installed_prefix
|
stable_prefix = f.latest_installed_prefix
|
||||||
stable_prefix.mkpath
|
stable_prefix.mkpath
|
||||||
|
|
||||||
[["000000_1", 1], ["111111", 2], ["111111_1", 2]].each do |pkg_version_suffix, stamp|
|
[["000000_1", 1], ["111111", 2], ["111111_1", 2]].each do |pkg_version_suffix, stamp|
|
||||||
@ -1344,4 +1344,22 @@ describe Formula do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#any_installed_version" do
|
||||||
|
let(:f) do
|
||||||
|
Class.new(Testball) do
|
||||||
|
version "1.0"
|
||||||
|
revision 1
|
||||||
|
end.new
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns nil when not installed" do
|
||||||
|
expect(f.any_installed_version).to be nil
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns package version when installed" do
|
||||||
|
f.brew { f.install }
|
||||||
|
expect(f.any_installed_version).to eq(PkgVersion.parse("1.0_1"))
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -125,7 +125,7 @@ module Homebrew
|
|||||||
installed_formulae.flat_map(&:runtime_installed_formula_dependents)
|
installed_formulae.flat_map(&:runtime_installed_formula_dependents)
|
||||||
.uniq
|
.uniq
|
||||||
.select do |f|
|
.select do |f|
|
||||||
keg = f.opt_or_installed_prefix_keg
|
keg = f.any_installed_keg
|
||||||
next unless keg
|
next unless keg
|
||||||
|
|
||||||
LinkageChecker.new(keg, cache_db: db)
|
LinkageChecker.new(keg, cache_db: db)
|
||||||
@ -245,7 +245,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
def depends_on(a, b)
|
def depends_on(a, b)
|
||||||
if a.opt_or_installed_prefix_keg
|
if a.any_installed_keg
|
||||||
&.runtime_dependencies
|
&.runtime_dependencies
|
||||||
&.any? { |d| d["full_name"] == b.full_name }
|
&.any? { |d| d["full_name"] == b.full_name }
|
||||||
1
|
1
|
||||||
|
@ -15,7 +15,7 @@ module Utils
|
|||||||
def built_as?(f)
|
def built_as?(f)
|
||||||
return false unless f.latest_version_installed?
|
return false unless f.latest_version_installed?
|
||||||
|
|
||||||
tab = Tab.for_keg(f.installed_prefix)
|
tab = Tab.for_keg(f.latest_installed_prefix)
|
||||||
tab.built_as_bottle
|
tab.built_as_bottle
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user