Merge pull request #2961 from MikeMcQuaid/preserve-link-on-upgrade-reinstall
Preserve link status on reinstall/upgrade.
This commit is contained in:
commit
e1fd69de42
@ -23,6 +23,7 @@ module Homebrew
|
|||||||
def reinstall_formula(f)
|
def reinstall_formula(f)
|
||||||
if f.opt_prefix.directory?
|
if f.opt_prefix.directory?
|
||||||
keg = Keg.new(f.opt_prefix.resolved_path)
|
keg = Keg.new(f.opt_prefix.resolved_path)
|
||||||
|
keg_was_linked = keg.linked?
|
||||||
backup keg
|
backup keg
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -37,6 +38,7 @@ module Homebrew
|
|||||||
fi.build_bottle = ARGV.build_bottle? || (!f.bottled? && f.build.bottle?)
|
fi.build_bottle = ARGV.build_bottle? || (!f.bottled? && f.build.bottle?)
|
||||||
fi.interactive = ARGV.interactive?
|
fi.interactive = ARGV.interactive?
|
||||||
fi.git = ARGV.git?
|
fi.git = ARGV.git?
|
||||||
|
fi.keg_was_linked = keg_was_linked
|
||||||
fi.prelude
|
fi.prelude
|
||||||
|
|
||||||
oh1 "Reinstalling #{f.full_name} #{options.to_a.join " "}"
|
oh1 "Reinstalling #{f.full_name} #{options.to_a.join " "}"
|
||||||
@ -46,7 +48,7 @@ module Homebrew
|
|||||||
rescue FormulaInstallationAlreadyAttemptedError
|
rescue FormulaInstallationAlreadyAttemptedError
|
||||||
# next
|
# next
|
||||||
rescue Exception
|
rescue Exception
|
||||||
ignore_interrupts { restore_backup(keg, f) }
|
ignore_interrupts { restore_backup(keg, keg_was_linked) }
|
||||||
raise
|
raise
|
||||||
else
|
else
|
||||||
backup_path(keg).rmtree if backup_path(keg).exist?
|
backup_path(keg).rmtree if backup_path(keg).exist?
|
||||||
@ -57,7 +59,7 @@ module Homebrew
|
|||||||
keg.rename backup_path(keg)
|
keg.rename backup_path(keg)
|
||||||
end
|
end
|
||||||
|
|
||||||
def restore_backup(keg, formula)
|
def restore_backup(keg, keg_was_linked)
|
||||||
path = backup_path(keg)
|
path = backup_path(keg)
|
||||||
|
|
||||||
return unless path.directory?
|
return unless path.directory?
|
||||||
@ -65,7 +67,7 @@ module Homebrew
|
|||||||
Pathname.new(keg).rmtree if keg.exist?
|
Pathname.new(keg).rmtree if keg.exist?
|
||||||
|
|
||||||
path.rename keg
|
path.rename keg
|
||||||
keg.link unless formula.keg_only?
|
keg.link if keg_was_linked
|
||||||
end
|
end
|
||||||
|
|
||||||
def backup_path(path)
|
def backup_path(path)
|
||||||
|
|||||||
@ -106,6 +106,7 @@ module Homebrew
|
|||||||
.map(&:linked_keg)
|
.map(&:linked_keg)
|
||||||
.select(&:directory?)
|
.select(&:directory?)
|
||||||
.map { |k| Keg.new(k.resolved_path) }
|
.map { |k| Keg.new(k.resolved_path) }
|
||||||
|
linked_kegs = outdated_kegs.select(&:linked?)
|
||||||
|
|
||||||
if f.opt_prefix.directory?
|
if f.opt_prefix.directory?
|
||||||
keg = Keg.new(f.opt_prefix.resolved_path)
|
keg = Keg.new(f.opt_prefix.resolved_path)
|
||||||
@ -153,7 +154,7 @@ module Homebrew
|
|||||||
ensure
|
ensure
|
||||||
# restore previous installation state if build failed
|
# restore previous installation state if build failed
|
||||||
begin
|
begin
|
||||||
outdated_kegs.each(&:link) unless f.installed?
|
linked_kegs.each(&:link) unless f.installed?
|
||||||
rescue
|
rescue
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|||||||
@ -37,10 +37,17 @@ class FormulaInstaller
|
|||||||
mode_attr_accessor :show_summary_heading, :show_header
|
mode_attr_accessor :show_summary_heading, :show_header
|
||||||
mode_attr_accessor :build_from_source, :force_bottle
|
mode_attr_accessor :build_from_source, :force_bottle
|
||||||
mode_attr_accessor :ignore_deps, :only_deps, :interactive, :git
|
mode_attr_accessor :ignore_deps, :only_deps, :interactive, :git
|
||||||
mode_attr_accessor :verbose, :debug, :quieter
|
mode_attr_accessor :verbose, :debug, :quieter, :keg_was_linked
|
||||||
|
|
||||||
def initialize(formula)
|
def initialize(formula)
|
||||||
@formula = formula
|
@formula = formula
|
||||||
|
@rack_was_present = formula.rack.directory?
|
||||||
|
@keg_was_linked = if formula.linked_keg.directory?
|
||||||
|
keg = Keg.new(formula.linked_keg.resolved_path)
|
||||||
|
keg.linked?
|
||||||
|
else
|
||||||
|
false
|
||||||
|
end
|
||||||
@show_header = false
|
@show_header = false
|
||||||
@ignore_deps = false
|
@ignore_deps = false
|
||||||
@only_deps = false
|
@only_deps = false
|
||||||
@ -525,6 +532,7 @@ class FormulaInstaller
|
|||||||
|
|
||||||
if df.linked_keg.directory?
|
if df.linked_keg.directory?
|
||||||
linked_keg = Keg.new(df.linked_keg.resolved_path)
|
linked_keg = Keg.new(df.linked_keg.resolved_path)
|
||||||
|
keg_was_linked = keg.linked?
|
||||||
linked_keg.unlink
|
linked_keg.unlink
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -543,6 +551,7 @@ class FormulaInstaller
|
|||||||
fi.verbose = verbose?
|
fi.verbose = verbose?
|
||||||
fi.quieter = quieter?
|
fi.quieter = quieter?
|
||||||
fi.debug = debug?
|
fi.debug = debug?
|
||||||
|
fi.keg_was_linked = keg_was_linked
|
||||||
fi.installed_as_dependency = true
|
fi.installed_as_dependency = true
|
||||||
fi.installed_on_request = false
|
fi.installed_on_request = false
|
||||||
fi.prelude
|
fi.prelude
|
||||||
@ -552,7 +561,7 @@ class FormulaInstaller
|
|||||||
rescue Exception
|
rescue Exception
|
||||||
ignore_interrupts do
|
ignore_interrupts do
|
||||||
tmp_keg.rename(installed_keg) if tmp_keg && !installed_keg.directory?
|
tmp_keg.rename(installed_keg) if tmp_keg && !installed_keg.directory?
|
||||||
linked_keg.link if linked_keg
|
linked_keg.link if keg_was_linked
|
||||||
end
|
end
|
||||||
raise
|
raise
|
||||||
else
|
else
|
||||||
@ -713,7 +722,13 @@ class FormulaInstaller
|
|||||||
end
|
end
|
||||||
|
|
||||||
def link(keg)
|
def link(keg)
|
||||||
if formula.keg_only?
|
link_formula = if @rack_was_present
|
||||||
|
keg_was_linked?
|
||||||
|
else
|
||||||
|
!formula.keg_only?
|
||||||
|
end
|
||||||
|
|
||||||
|
unless link_formula
|
||||||
begin
|
begin
|
||||||
keg.optlink
|
keg.optlink
|
||||||
rescue Keg::LinkError => e
|
rescue Keg::LinkError => e
|
||||||
|
|||||||
@ -12,6 +12,8 @@ describe Homebrew::Hooks::Bottles do
|
|||||||
local_bottle_path: nil,
|
local_bottle_path: nil,
|
||||||
bottle_disabled?: false,
|
bottle_disabled?: false,
|
||||||
some_random_method: true,
|
some_random_method: true,
|
||||||
|
linked_keg: Pathname("foo"),
|
||||||
|
rack: Pathname("bar"),
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user