Class: Cask::Migrator
- Extended by:
- Utils::Inreplace
- Defined in:
- cask/migrator.rb
Instance Attribute Summary collapse
-
#new_cask ⇒ Object
readonly
Returns the value of attribute new_cask.
-
#old_cask ⇒ Object
readonly
Returns the value of attribute old_cask.
Class Method Summary collapse
-
.migrate_if_needed(new_cask, dry_run: false) ⇒ void
-
.replace_caskfile_token(path, old_token, new_token) ⇒ void
Instance Method Summary collapse
Methods included from Utils::Inreplace
Constructor Details
#initialize(old_cask, new_cask) ⇒ void
14 15 16 17 18 19 |
# File 'cask/migrator.rb', line 14 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)
Returns the value of attribute new_cask.
11 12 13 |
# File 'cask/migrator.rb', line 11 def new_cask @new_cask end |
#old_cask ⇒ Object (readonly)
Returns the value of attribute old_cask.
11 12 13 |
# File 'cask/migrator.rb', line 11 def old_cask @old_cask end |
Class Method Details
.migrate_if_needed(new_cask, dry_run: false) ⇒ void
This method returns an undefined value.
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'cask/migrator.rb', line 22 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: dry_run) end |
.replace_caskfile_token(path, old_token, new_token) ⇒ void
This method returns an undefined value.
74 75 76 77 78 79 80 81 82 83 |
# File 'cask/migrator.rb', line 74 def self.replace_caskfile_token(path, old_token, new_token) case path.extname when ".rb" 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 returns an undefined value.
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 70 71 |
# File 'cask/migrator.rb', line 36 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 |