aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/dev-cmd/bottle.rb12
-rw-r--r--Library/Homebrew/formula_installer.rb14
-rw-r--r--Library/Homebrew/keg_relocate.rb32
-rw-r--r--Library/Homebrew/tab.rb5
-rw-r--r--Library/Homebrew/test/test_tab.rb2
5 files changed, 34 insertions, 31 deletions
diff --git a/Library/Homebrew/dev-cmd/bottle.rb b/Library/Homebrew/dev-cmd/bottle.rb
index 4af12a7a7..dcc9e0e98 100644
--- a/Library/Homebrew/dev-cmd/bottle.rb
+++ b/Library/Homebrew/dev-cmd/bottle.rb
@@ -191,11 +191,7 @@ module Homebrew
begin
unless ARGV.include? "--skip-relocation"
- keg.relocate_dynamic_linkage prefix, Keg::PREFIX_PLACEHOLDER,
- cellar, Keg::CELLAR_PLACEHOLDER
- changed_files = keg.relocate_text_files prefix, Keg::PREFIX_PLACEHOLDER,
- cellar, Keg::CELLAR_PLACEHOLDER,
- repository, Keg::REPOSITORY_PLACEHOLDER
+ changed_files = keg.replace_locations_with_placeholders
end
keg.delete_pyc_files!
@@ -266,11 +262,7 @@ module Homebrew
ignore_interrupts do
original_tab.write if original_tab
unless ARGV.include? "--skip-relocation"
- keg.relocate_dynamic_linkage Keg::PREFIX_PLACEHOLDER, prefix,
- Keg::CELLAR_PLACEHOLDER, cellar
- keg.relocate_text_files Keg::PREFIX_PLACEHOLDER, prefix,
- Keg::CELLAR_PLACEHOLDER, cellar,
- Keg::REPOSITORY_PLACEHOLDER, repository, changed_files
+ keg.replace_placeholders_with_locations changed_files
end
end
end
diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb
index 127561c91..006db8f8a 100644
--- a/Library/Homebrew/formula_installer.rb
+++ b/Library/Homebrew/formula_installer.rb
@@ -762,18 +762,12 @@ class FormulaInstaller
end
keg = Keg.new(formula.prefix)
- tab_file = formula.prefix.join(Tab::FILENAME)
- # Skip the cache since the receipt will be rewritten
- orig_tab = Tab.from_file_content(tab_file.read, tab_file)
- changed_files = orig_tab.changed_files.map { |f| formula.prefix.join(f) }
unless formula.bottle_specification.skip_relocation?
- keg.relocate_dynamic_linkage Keg::PREFIX_PLACEHOLDER, HOMEBREW_PREFIX.to_s,
- Keg::CELLAR_PLACEHOLDER, HOMEBREW_CELLAR.to_s
+ tab = Tab.for_keg(keg)
+ Tab.clear_cache
+ keg.replace_placeholders_with_locations tab.changed_files
end
- keg.relocate_text_files Keg::PREFIX_PLACEHOLDER, HOMEBREW_PREFIX.to_s,
- Keg::CELLAR_PLACEHOLDER, HOMEBREW_CELLAR.to_s,
- Keg::REPOSITORY_PLACEHOLDER, HOMEBREW_REPOSITORY.to_s, changed_files
Pathname.glob("#{formula.bottle_prefix}/{etc,var}/**/*") do |path|
path.extend(InstallRenamed)
@@ -781,7 +775,7 @@ class FormulaInstaller
end
FileUtils.rm_rf formula.bottle_prefix
- tab = Tab.for_keg(formula.prefix)
+ tab = Tab.for_keg(keg)
CxxStdlib.check_compatibility(
formula, formula.recursive_dependencies,
diff --git a/Library/Homebrew/keg_relocate.rb b/Library/Homebrew/keg_relocate.rb
index be0747536..0e21bb733 100644
--- a/Library/Homebrew/keg_relocate.rb
+++ b/Library/Homebrew/keg_relocate.rb
@@ -19,16 +19,36 @@ class Keg
[]
end
- def relocate_text_files(old_prefix, new_prefix, old_cellar, new_cellar, # rubocop:disable Metrics/ParameterLists
- old_repository, new_repository, files = nil)
+ def replace_locations_with_placeholders
+ relocate_dynamic_linkage(HOMEBREW_PREFIX.to_s, PREFIX_PLACEHOLDER,
+ HOMEBREW_CELLAR.to_s, CELLAR_PLACEHOLDER)
+ replacements = {
+ HOMEBREW_PREFIX.to_s => PREFIX_PLACEHOLDER,
+ HOMEBREW_CELLAR.to_s => CELLAR_PLACEHOLDER,
+ HOMEBREW_REPOSITORY.to_s => REPOSITORY_PLACEHOLDER
+ }
+ replace_text_in_files(replacements)
+ end
+
+ def replace_placeholders_with_locations(files)
+ relocate_dynamic_linkage(PREFIX_PLACEHOLDER, HOMEBREW_PREFIX.to_s,
+ CELLAR_PLACEHOLDER, HOMEBREW_CELLAR.to_s)
+ replacements = {
+ PREFIX_PLACEHOLDER => HOMEBREW_PREFIX.to_s,
+ CELLAR_PLACEHOLDER => HOMEBREW_CELLAR.to_s,
+ REPOSITORY_PLACEHOLDER => HOMEBREW_REPOSITORY.to_s
+ }
+ replace_text_in_files(replacements, files)
+ end
+
+ def replace_text_in_files(replacements, files = nil)
files ||= text_files | libtool_files
changed_files = []
- files.group_by { |f| f.stat.ino }.each_value do |first, *rest|
+ files.map(&path.method(:join)).group_by { |f| f.stat.ino }.each_value do |first, *rest|
s = first.open("rb", &:read)
- changed = s.gsub!(old_cellar, new_cellar)
- changed = s.gsub!(old_prefix, new_prefix) || changed
- changed = s.gsub!(old_repository, new_repository) || changed
+ regexp = Regexp.union(replacements.keys)
+ changed = s.gsub!(regexp, replacements)
next unless changed
changed_files << first.relative_path_from(path)
diff --git a/Library/Homebrew/tab.rb b/Library/Homebrew/tab.rb
index 3ce6eadc5..1cabacefd 100644
--- a/Library/Homebrew/tab.rb
+++ b/Library/Homebrew/tab.rb
@@ -25,7 +25,6 @@ class Tab < OpenStruct
"tabfile" => formula.prefix.join(FILENAME),
"built_as_bottle" => build.bottle?,
"poured_from_bottle" => false,
- "changed_files" => [],
"time" => Time.now.to_i,
"source_modified_time" => formula.source_modified_time.to_i,
"HEAD" => HOMEBREW_REPOSITORY.git_head,
@@ -62,7 +61,6 @@ class Tab < OpenStruct
attributes = Utils::JSON.load(content)
attributes["tabfile"] = path
attributes["source_modified_time"] ||= 0
- attributes["changed_files"] ||= []
attributes["source"] ||= {}
tapped_from = attributes["tapped_from"]
@@ -173,7 +171,6 @@ class Tab < OpenStruct
"unused_options" => [],
"built_as_bottle" => false,
"poured_from_bottle" => false,
- "changed_files" => [],
"time" => nil,
"source_modified_time" => 0,
"HEAD" => nil,
@@ -306,7 +303,7 @@ class Tab < OpenStruct
"unused_options" => unused_options.as_flags,
"built_as_bottle" => built_as_bottle,
"poured_from_bottle" => poured_from_bottle,
- "changed_files" => changed_files.map(&:to_s),
+ "changed_files" => changed_files && changed_files.map(&:to_s),
"time" => time,
"source_modified_time" => source_modified_time.to_i,
"HEAD" => self.HEAD,
diff --git a/Library/Homebrew/test/test_tab.rb b/Library/Homebrew/test/test_tab.rb
index 3db7bbea1..2c756cf68 100644
--- a/Library/Homebrew/test/test_tab.rb
+++ b/Library/Homebrew/test/test_tab.rb
@@ -34,7 +34,7 @@ class TabTests < Homebrew::TestCase
tab = Tab.empty
assert_empty tab.unused_options
assert_empty tab.used_options
- assert_empty tab.changed_files
+ assert_nil tab.changed_files
refute_predicate tab, :built_as_bottle
refute_predicate tab, :poured_from_bottle
assert_predicate tab, :stable?