From fab2cffe5de82b6d540fcf3f4f8873f7cd89af34 Mon Sep 17 00:00:00 2001
From: Josh Hagins <hagins.josh@gmail.com>
Date: Sun, 23 Oct 2016 23:48:07 -0400
Subject: [PATCH] keg_relocate: wrap relocation locations in struct

---
 .../Homebrew/extend/os/mac/keg_relocate.rb    | 12 ++--
 Library/Homebrew/keg_relocate.rb              | 55 +++++++++++++------
 2 files changed, 43 insertions(+), 24 deletions(-)

diff --git a/Library/Homebrew/extend/os/mac/keg_relocate.rb b/Library/Homebrew/extend/os/mac/keg_relocate.rb
index 33ee149cef..8f73daba59 100644
--- a/Library/Homebrew/extend/os/mac/keg_relocate.rb
+++ b/Library/Homebrew/extend/os/mac/keg_relocate.rb
@@ -17,19 +17,19 @@ class Keg
     generic_fix_dynamic_linkage
   end
 
-  def relocate_dynamic_linkage(old_prefix, new_prefix, old_cellar, new_cellar)
+  def relocate_dynamic_linkage(relocation)
     mach_o_files.each do |file|
       file.ensure_writable do
         if file.dylib?
-          id = dylib_id_for(file).sub(old_prefix, new_prefix)
+          id = dylib_id_for(file).sub(relocation.old_prefix, relocation.new_prefix)
           change_dylib_id(id, file)
         end
 
         each_install_name_for(file) do |old_name|
-          if old_name.start_with? old_cellar
-            new_name = old_name.sub(old_cellar, new_cellar)
-          elsif old_name.start_with? old_prefix
-            new_name = old_name.sub(old_prefix, new_prefix)
+          if old_name.start_with? relocation.old_cellar
+            new_name = old_name.sub(relocation.old_cellar, relocation.new_cellar)
+          elsif old_name.start_with? relocation.old_prefix
+            new_name = old_name.sub(relocation.old_prefix, relocation.new_prefix)
           end
 
           change_install_name(old_name, new_name, file) if new_name
diff --git a/Library/Homebrew/keg_relocate.rb b/Library/Homebrew/keg_relocate.rb
index cc40615b2a..712408b8b7 100644
--- a/Library/Homebrew/keg_relocate.rb
+++ b/Library/Homebrew/keg_relocate.rb
@@ -3,6 +3,14 @@ class Keg
   CELLAR_PLACEHOLDER = "@@HOMEBREW_CELLAR@@".freeze
   REPOSITORY_PLACEHOLDER = "@@HOMEBREW_REPOSITORY@@".freeze
 
+  Relocation = Struct.new(:old_prefix, :old_cellar, :old_repository,
+                          :new_prefix, :new_cellar, :new_repository) do
+    # Use keyword args instead of positional args for initialization
+    def initialize(**kwargs)
+      super(*members.map { |k| kwargs[k] })
+    end
+  end
+
   def fix_dynamic_linkage
     symlink_files.each do |file|
       link = file.readlink
@@ -15,38 +23,49 @@ class Keg
   end
   alias generic_fix_dynamic_linkage fix_dynamic_linkage
 
-  def relocate_dynamic_linkage(_old_prefix, _new_prefix, _old_cellar, _new_cellar)
+  def relocate_dynamic_linkage(_relocation)
     []
   end
 
   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)
+    relocation = Relocation.new(
+      old_prefix: HOMEBREW_PREFIX.to_s,
+      old_cellar: HOMEBREW_CELLAR.to_s,
+      old_repository: HOMEBREW_REPOSITORY.to_s,
+      new_prefix: PREFIX_PLACEHOLDER,
+      new_cellar: CELLAR_PLACEHOLDER,
+      new_repository: REPOSITORY_PLACEHOLDER
+    )
+    relocate_dynamic_linkage(relocation)
+    replace_text_in_files(relocation)
   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)
+    relocation = Relocation.new(
+      old_prefix: PREFIX_PLACEHOLDER,
+      old_cellar: CELLAR_PLACEHOLDER,
+      old_repository: REPOSITORY_PLACEHOLDER,
+      new_prefix: HOMEBREW_PREFIX.to_s,
+      new_cellar: HOMEBREW_CELLAR.to_s,
+      new_repository: HOMEBREW_REPOSITORY.to_s
+    )
+    relocate_dynamic_linkage(relocation)
+    replace_text_in_files(relocation, files: files)
   end
 
-  def replace_text_in_files(replacements, files = nil)
+  def replace_text_in_files(relocation, files: nil)
     files ||= text_files | libtool_files
 
     changed_files = []
     files.map(&path.method(:join)).group_by { |f| f.stat.ino }.each_value do |first, *rest|
       s = first.open("rb", &:read)
+
+      replacements = {
+        relocation.old_prefix => relocation.new_prefix,
+        relocation.old_cellar => relocation.new_cellar,
+        relocation.old_repository => relocation.new_repository,
+      }
+
       regexp = Regexp.union(replacements.keys)
       changed = s.gsub!(regexp, replacements)
 
-- 
GitLab