Spec-Zone.ru › Homebrew

Класс: Cask::Migrator Приватный

Наследуется от:
Object
  • Object
  • Cask::Migrator
показать все
Подключает:
Utils::Output::Mixin
Определён в:
cask/migrator.rb

Этот класс является частью закрытого API. Этот класс можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого класса, поскольку он может быть удалён или изменён без предупреждения.

Краткое описание атрибутов экземпляра свернуть

  • #new_cask ⇒ Cask только для чтения приватный
  • #old_cask ⇒ Cask только для чтения приватный

Краткое описание методов класса свернуть

  • .migrate_if_needed(new_cask, dry_run: false) ⇒ void приватный
  • .replace_caskfile_token(path, old_token, new_token) ⇒ void приватный

Краткое описание методов экземпляра свернуть

  • #initialize(old_cask, new_cask) ⇒ void конструктор приватный
  • #migrate(dry_run: false) ⇒ void приватный

Методы, подключённые из Utils::Output::Mixin

#issue_reporting_message, #odebug, #odeprecated, #odie, #odisabled, #ofail, #oh1, #oh1_title, #ohai, #ohai_title, #onoe, #opoo, #opoo_outside_github_actions, #opoo_without_github_actions_annotation, #pretty_deprecated, #pretty_disabled, #pretty_duration, #pretty_install_status, #pretty_installed, #pretty_uninstalled, #pretty_upgradable, #pretty_warning

Подробное описание конструкторов

#initialize(old_cask, new_cask) ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Параметры:

  • old_cask (Cask)
  • new_cask (Cask)

Вызывает исключение:

  • (CaskNotInstalledError)


15
16
17
18
19
20
# File 'cask/migrator.rb', line 15

def initialize(old_cask, new_cask)
  raise CaskNotInstalledError, new_cask unless new_cask.installed?

  @old_cask = old_cask
  @new_cask = new_cask
end

Подробное описание атрибутов экземпляра

#new_cask ⇒ Cask (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Cask)


12
13
14
# File 'cask/migrator.rb', line 12

def new_cask
  @new_cask
end

#old_cask ⇒ Cask (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Cask)


12
13
14
# File 'cask/migrator.rb', line 12

def old_cask
  @old_cask
end

Подробное описание методов класса

.migrate_if_needed(new_cask, dry_run: false) ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • new_cask (Cask)
  • dry_run (Boolean) (по умолчанию: false)


23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'cask/migrator.rb', line 23

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)

  installed_token = installed_caskfile.basename(installed_caskfile.extname).to_s
  return if new_cask.token == installed_token

  old_cask = Cask.new(installed_token)
  migrator = new(old_cask, new_cask)
  migrator.migrate(dry_run:)
end

.replace_caskfile_token(path, old_token, new_token) ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • path (Pathname)
  • old_token (String)
  • new_token (String)


92
93
94
95
96
97
98
99
100
101
# File 'cask/migrator.rb', line 92

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

Подробное описание методов экземпляра

#migrate(dry_run: false) ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • dry_run (Boolean) (по умолчанию: false)


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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'cask/migrator.rb', line 38

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_caskfile = old_cask.installed_caskfile
  return if old_caskfile.nil?

  old_installed_caskfile = old_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}"
    if (old_pin_path = old_cask.pin_path).symlink? && (pinned_version = old_cask.pinned_version)
      new_pin_path = new_cask.pin_path
      puts "rm #{old_pin_path}"
      puts "ln -s #{(new_caskroom_path/pinned_version).relative_path_from(new_pin_path.dirname)}#{new_pin_path}"
    end
  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
    if old_cask.pin_path.symlink? && (pinned_version = old_cask.pinned_version)
      begin
        new_cask.pin_path.make_relative_symlink(new_caskroom_path/pinned_version)
        old_cask.unpin
      rescue => e
        opoo "Failed to migrate cask pin from #{old_token} to #{new_token}: #{e}"
      end
    end
  end
end

© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Cask/Migrator.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API