Spec-Zone.ru › Homebrew

Модуль: Utils::Gzip Приватный

Расширяет:
Output::Mixin
Определён в:
utils/gzip.rb

Обзор

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

Вспомогательные функции для создания файлов gzip.

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

GZIP_BUFFER_SIZE =

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

В gzip от Apple также используется zlib, поэтому здесь используется тот же размер буфера. https://github.com/apple-oss-distributions/file_cmds/blob/file_cmds-400/gzip/gzip.c#L147

T.let(64 * 1024, Integer)

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

  • .compress(*paths, reproducible: true, mtime: ENV["SOURCE_DATE_EPOCH"].to_i) ⇒ Array<Pathname>

    Сжимает один или несколько файлов с помощью gzip; по умолчанию — с воспроизводимым результатом.

  • .compress_with_options(path, mtime: ENV["SOURCE_DATE_EPOCH"].to_i, orig_name: File.basename(path), output: "#{path}.gz") ⇒ Pathname приватный

Методы, включённые из 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

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

.compress(*paths, reproducible: true, mtime: ENV["SOURCE_DATE_EPOCH"].to_i) ⇒ Array<Pathname>

Сжать один или несколько файлов с помощью gzip; по умолчанию сжимаются воспроизводимо.

В отличие от системного gzip, этот метод не записывает время изменения во время сборки, поэтому результат детерминирован (см. https://docs.brew.sh/Reproducible-Builds). Каждый файл сжимается на месте: результат помещается рядом с исходным файлом с суффиксом .gz, а пути к полученным файлам возвращаются.

Параметры:

  • paths (String, Pathname)
  • reproducible (Boolean) (по умолчанию: true)
  • mtime (Integer, Time) (по умолчанию: ENV["SOURCE_DATE_EPOCH"].to_i)

Возвращает:

  • (Array<Pathname>)


71
72
73
74
75
76
77
78
79
80
81
82
# File 'utils/gzip.rb', line 71

def self.compress(*paths, reproducible: true, mtime: ENV["SOURCE_DATE_EPOCH"].to_i)
  if reproducible
    paths.map do |path|
      compress_with_options(path, mtime:)
    end
  else
    paths.map do |path|
      safe_system "gzip", path
      Pathname.new("#{path}.gz")
    end
  end
end

.compress_with_options(path, mtime: ENV["SOURCE_DATE_EPOCH"].to_i, orig_name: File.basename(path), output: "#{path}.gz") ⇒ Pathname

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

Параметры:

  • path (String, Pathname)
  • mtime (Integer, Time) (по умолчанию: ENV["SOURCE_DATE_EPOCH"].to_i)
  • orig_name (String) (по умолчанию: File.basename(path))
  • output (String, Pathname) (по умолчанию: "#{path}.gz")

Возвращает:

  • (Pathname)


23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'utils/gzip.rb', line 23

def self.compress_with_options(path, mtime: ENV["SOURCE_DATE_EPOCH"].to_i, orig_name: File.basename(path),
                               output: "#{path}.gz")
  # There are two problems if `mtime` is less than or equal to 0:
  #
  # 1. Ideally, we would just set mtime = 0 if SOURCE_DATE_EPOCH is absent, but Ruby's
  #    Zlib::GzipWriter does not properly handle the case of setting mtime = 0:
  #    https://bugs.ruby-lang.org/issues/16285
  #
  #    This was fixed in https://github.com/ruby/zlib/pull/10. This workaround
  #    won't be needed once we are using zlib gem version 1.1.0 or newer.
  #
  # 2. If mtime is less than 0, gzip may fail to cast a negative number to an unsigned int
  #    https://github.com/Homebrew/homebrew-core/pull/246155#issuecomment-3345772366
  if mtime.to_i <= 0
    odebug "Setting `mtime = 1` to avoid zlib gem bug and unsigned integer cast when `mtime <= 0`."
    mtime = 1
  end

  File.open(path, "rb") do |fp|
    odebug "Creating gzip file at #{output}"
    gz = Zlib::GzipWriter.open(output)
    gz.mtime = mtime
    gz.orig_name = orig_name
    gz.write(fp.read(GZIP_BUFFER_SIZE)) until fp.eof?
  ensure
    # GzipWriter should be closed in case of error as well
    gz.close
  end

  FileUtils.rm_f path
  Pathname.new(output)
end

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

Spec-Zone.ru

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