aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike McQuaid2017-07-30 16:02:49 +0100
committerGitHub2017-07-30 16:02:49 +0100
commite8c4989efbb58fb386f8ada32c0845f6dd8725a7 (patch)
tree95616679f90b808a2915aa4a656ce1ede33ff023
parent3821132f9e58dc7b72795978c9e9237b4c155b1b (diff)
parent1651647a3dc9dbc03ed3c5da06090228db4cd1a0 (diff)
downloadbrew-e8c4989efbb58fb386f8ada32c0845f6dd8725a7.tar.bz2
Merge pull request #2923 from MikeMcQuaid/alias-fixes
keg: correctly cleanup old aliases.
-rw-r--r--Library/Homebrew/formula.rb4
-rw-r--r--Library/Homebrew/formula_installer.rb1
-rw-r--r--Library/Homebrew/keg.rb43
-rw-r--r--Library/Homebrew/tab.rb3
4 files changed, 39 insertions, 12 deletions
diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb
index 9a31c9e5e..cbd6257d2 100644
--- a/Library/Homebrew/formula.rb
+++ b/Library/Homebrew/formula.rb
@@ -383,7 +383,9 @@ class Formula
# All of aliases for the formula
def aliases
@aliases ||= if tap
- tap.alias_reverse_table[full_name] || []
+ tap.alias_reverse_table[full_name].to_a.map do |a|
+ a.split("/")[-1]
+ end
else
[]
end
diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb
index a0c091e7f..6830419fe 100644
--- a/Library/Homebrew/formula_installer.rb
+++ b/Library/Homebrew/formula_installer.rb
@@ -865,6 +865,7 @@ class FormulaInstaller
tab.source["path"] = formula.specified_path.to_s
tab.installed_as_dependency = installed_as_dependency
tab.installed_on_request = installed_on_request
+ tab.aliases = formula.aliases
tab.write
end
diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb
index b52269e30..8fcbecfbd 100644
--- a/Library/Homebrew/keg.rb
+++ b/Library/Homebrew/keg.rb
@@ -237,13 +237,37 @@ class Keg
opt_record.symlink? && path == opt_record.resolved_path
end
- def remove_opt_record
- opt_record.unlink
- aliases.each do |a|
- alias_symlink = opt_record.parent/a
- next if !alias_symlink.symlink? && !alias_symlink.exist?
+ def remove_old_aliases
+ opt = opt_record.parent
+
+ tap = begin
+ to_formula.tap
+ rescue FormulaUnavailableError, TapFormulaAmbiguityError,
+ TapFormulaWithOldnameAmbiguityError
+ # If the formula can't be found, just ignore aliases for now.
+ nil
+ end
+
+ if tap
+ bad_tap_opt = opt/tap.user
+ FileUtils.rm_rf bad_tap_opt if bad_tap_opt.directory?
+ end
+
+ Pathname.glob("#{opt_record}@*").each do |a|
+ a = a.basename
+ next if aliases.include?(a)
+
+ alias_symlink = opt/a
+ if alias_symlink.symlink? && alias_symlink.exist?
+ next if rack != alias_symlink.realpath.parent
+ end
+
alias_symlink.delete
end
+ end
+
+ def remove_opt_record
+ opt_record.unlink
opt_record.parent.rmdir_if_possible
end
@@ -251,6 +275,7 @@ class Keg
path.rmtree
path.parent.rmdir_if_possible
remove_opt_record if optlinked?
+ remove_old_aliases
remove_oldname_opt_record
end
@@ -277,6 +302,7 @@ class Keg
dst.uninstall_info if dst.to_s =~ INFOFILE_RX
dst.unlink
+ remove_old_aliases
Find.prune if src.directory?
end
end
@@ -468,12 +494,7 @@ class Keg
end
def aliases
- formula = Formulary.from_rack(rack)
- aliases = formula.aliases
- return aliases if formula.stable?
- aliases.reject { |a| a.include?("@") }
- rescue FormulaUnavailableError
- []
+ Tab.for_keg(self).aliases || []
end
def optlink(mode = OpenStruct.new)
diff --git a/Library/Homebrew/tab.rb b/Library/Homebrew/tab.rb
index 6d0a3d6d1..e7df88356 100644
--- a/Library/Homebrew/tab.rb
+++ b/Library/Homebrew/tab.rb
@@ -33,6 +33,7 @@ class Tab < OpenStruct
"HEAD" => HOMEBREW_REPOSITORY.git_head,
"compiler" => compiler,
"stdlib" => stdlib,
+ "aliases" => formula.aliases,
"runtime_dependencies" => formula.runtime_dependencies.map do |dep|
f = dep.to_formula
{ "full_name" => f.full_name, "version" => f.version.to_s }
@@ -185,6 +186,7 @@ class Tab < OpenStruct
"HEAD" => nil,
"stdlib" => nil,
"compiler" => DevelopmentTools.default_compiler,
+ "aliases" => [],
"runtime_dependencies" => [],
"source" => {
"path" => nil,
@@ -328,6 +330,7 @@ class Tab < OpenStruct
"HEAD" => self.HEAD,
"stdlib" => (stdlib.to_s if stdlib),
"compiler" => (compiler.to_s if compiler),
+ "aliases" => aliases,
"runtime_dependencies" => runtime_dependencies,
"source" => source,
}