Class: Cask::Migrator Private
This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.
Instance Attribute Summary collapse
- #new_cask ⇒ Object readonly private
- #old_cask ⇒ Object readonly private
Class Method Summary collapse
- .migrate_if_needed(new_cask, dry_run: false) ⇒ void private
- .replace_caskfile_token(path, old_token, new_token) ⇒ void private
Instance Method Summary collapse
- #initialize(old_cask, new_cask) ⇒ void constructor private
- #migrate(dry_run: false) ⇒ void private
Constructor Details
#initialize(old_cask, new_cask) ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
12 13 14 15 16 17 |
# File 'cask/migrator.rb', line 12 def initialize(old_cask, new_cask) raise CaskNotInstalledError, new_cask unless new_cask.installed? @old_cask = old_cask @new_cask = new_cask end |
Instance Attribute Details
#new_cask ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
9 10 11 |
# File 'cask/migrator.rb', line 9 def new_cask @new_cask end |
#old_cask ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
9 10 11 |
# File 'cask/migrator.rb', line 9 def old_cask @old_cask end |
Class Method Details
.migrate_if_needed(new_cask, dry_run: false) ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'cask/migrator.rb', line 20 def self.migrate_if_needed(new_cask, dry_run: false) old_tokens = new_cask.old_tokens return if old_tokens.empty? return unless (installed_caskfile = new_cask.installed_caskfile) old_cask = CaskLoader.load(installed_caskfile) return if new_cask.token == old_cask.token migrator = new(old_cask, new_cask) migrator.migrate(dry_run:) end |
.replace_caskfile_token(path, old_token, new_token) ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
72 73 74 75 76 77 78 79 80 81 |
# File 'cask/migrator.rb', line 72 def self.replace_caskfile_token(path, old_token, new_token) case path.extname when ".rb" ::Utils::Inreplace.inreplace path, /\A\s*cask\s+"#{Regexp.escape(old_token)}"/, "cask #{new_token.inspect}" when ".json" json = JSON.parse(path.read) json["token"] = new_token path.atomic_write json.to_json end end |
Instance Method Details
#migrate(dry_run: false) ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'cask/migrator.rb', line 34 def migrate(dry_run: false) old_token = old_cask.token new_token = new_cask.token old_caskroom_path = old_cask.caskroom_path new_caskroom_path = new_cask.caskroom_path old_installed_caskfile = old_cask.installed_caskfile.relative_path_from(old_caskroom_path) new_installed_caskfile = old_installed_caskfile.dirname/old_installed_caskfile.basename.sub( old_token, new_token, ) if dry_run oh1 "Would migrate cask #{Formatter.identifier(old_token)} to #{Formatter.identifier(new_token)}" puts "cp -r #{old_caskroom_path} #{new_caskroom_path}" puts "mv #{new_caskroom_path}/#{old_installed_caskfile} #{new_caskroom_path}/#{new_installed_caskfile}" puts "rm -r #{old_caskroom_path}" puts "ln -s #{new_caskroom_path.basename} #{old_caskroom_path}" else oh1 "Migrating cask #{Formatter.identifier(old_token)} to #{Formatter.identifier(new_token)}" begin FileUtils.cp_r old_caskroom_path, new_caskroom_path FileUtils.mv new_caskroom_path/old_installed_caskfile, new_caskroom_path/new_installed_caskfile self.class.replace_caskfile_token(new_caskroom_path/new_installed_caskfile, old_token, new_token) rescue => e FileUtils.rm_rf new_caskroom_path raise e end FileUtils.rm_r old_caskroom_path FileUtils.ln_s new_caskroom_path.basename, old_caskroom_path end end |