Spec-Zone.ru › Homebrew

Класс: SystemCommand

Наследует:
Object
  • Object
  • SystemCommand
показать всё
Подключает:
Context
Определён в:
system_command.rb

Обзор

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

Класс для запуска подпроцессов и перехвата их вывода и кода завершения.

Определено в пространстве имён

Модули: Mixin Классы: Result

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

  • .run(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: false, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) ⇒ SystemCommand::Result приватный
  • .run!(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: true, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) ⇒ SystemCommand::Result приватный

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

  • #command ⇒ Array<String> приватный
  • #initialize(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: false, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) ⇒ void конструктор приватный
  • #run! ⇒ SystemCommand::Result приватный

Методы, подключённые из Context

current, current=, #quiet?, #with_context

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

#initialize(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: false, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) ⇒ void

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

Параметры:

  • executable (String, Pathname)
  • args (Array<String, Integer, Float, Pathname>) (по умолчанию: [])
  • sudo (Boolean) (по умолчанию: false)
  • sudo_as_root (Boolean) (по умолчанию: false)
  • env (Hash{String => String, Boolean, PATH, nil}) (по умолчанию: {})
  • input (String, Array<String>) (по умолчанию: [])
  • must_succeed (Boolean) (по умолчанию: false)
  • print_stdout (Boolean, Symbol) (по умолчанию: false)
  • print_stderr (Boolean, Symbol) (по умолчанию: true)
  • debug (Boolean, nil) (по умолчанию: nil)
  • verbose (Boolean, nil) (по умолчанию: nil)
  • secrets (String, Array<String>) (по умолчанию: [])
  • chdir (String, Pathname, nil) (по умолчанию: nil)
  • reset_uid (Boolean) (по умолчанию: false)
  • run_as_real_uid (Boolean) (по умолчанию: false)
  • timeout (Integer, Float, nil) (по умолчанию: nil)

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

  • (ArgumentError)


189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
# File 'system_command.rb', line 189

def initialize(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: false,
               print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil,
               reset_uid: false, run_as_real_uid: false, timeout: nil)
  require "extend/ENV"
  @executable = executable
  @args = args

  raise ArgumentError, "`sudo_as_root` cannot be set if sudo is false" if !sudo && sudo_as_root
  raise ArgumentError, "`reset_uid` and `run_as_real_uid` cannot both be true" if reset_uid && run_as_real_uid

  if print_stdout.is_a?(Symbol) && print_stdout != :debug
    raise ArgumentError, "`print_stdout` is not a valid symbol"
  end
  if print_stderr.is_a?(Symbol) && print_stderr != :debug
    raise ArgumentError, "`print_stderr` is not a valid symbol"
  end

  @sudo = sudo
  @sudo_as_root = sudo_as_root
  env.each_key do |name|
    next if /^[\w&&\D]\w*$/.match?(name)

    raise ArgumentError, "Invalid variable name: #{name}"
  end
  @env = env
  @input = T.let(Array(input), T::Array[String])
  @must_succeed = must_succeed
  @print_stdout = print_stdout
  @print_stderr = print_stderr
  @debug = debug
  @verbose = verbose
  @secrets = T.let((Array(secrets) + ENV.sensitive_environment.values).uniq, T::Array[String])
  @chdir = chdir
  @reset_uid = reset_uid
  @run_as_real_uid = run_as_real_uid
  @timeout = timeout
end

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

.run(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: false, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) ⇒ SystemCommand::Result

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

Параметры:

  • executable (String, Pathname)
  • args (Array<String, Integer, Float, Pathname>) (по умолчанию: [])
  • sudo (Boolean) (по умолчанию: false)
  • sudo_as_root (Boolean) (по умолчанию: false)
  • env (Hash{String => String, Boolean, PATH, nil}) (по умолчанию: {})
  • input (String, Array<String>) (по умолчанию: [])
  • must_succeed (Boolean) (по умолчанию: false)
  • print_stdout (Boolean, Symbol) (по умолчанию: false)
  • print_stderr (Boolean, Symbol) (по умолчанию: true)
  • debug (Boolean, nil) (по умолчанию: nil)
  • verbose (Boolean, nil) (по умолчанию: nil)
  • secrets (String, Array<String>) (по умолчанию: [])
  • chdir (String, Pathname, nil) (по умолчанию: nil)
  • reset_uid (Boolean) (по умолчанию: false)
  • run_as_real_uid (Boolean) (по умолчанию: false)
  • timeout (Integer, Float, nil) (по умолчанию: nil)

Возвращаемое значение:

  • (SystemCommand::Result)


102
103
104
105
106
107
# File 'system_command.rb', line 102

def self.run(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: false,
             print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil,
             reset_uid: false, run_as_real_uid: false, timeout: nil)
  new(executable, args:, sudo:, sudo_as_root:, env:, input:, must_succeed:, print_stdout:, print_stderr:, debug:,
      verbose:, secrets:, chdir:, reset_uid:, run_as_real_uid:, timeout:).run!
end

.run!(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: true, print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil, reset_uid: false, run_as_real_uid: false, timeout: nil) ⇒ SystemCommand::Result

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

Параметры:

  • executable (String, Pathname)
  • args (Array<String, Integer, Float, Pathname>) (по умолчанию: [])
  • sudo (Boolean) (по умолчанию: false)
  • sudo_as_root (Boolean) (по умолчанию: false)
  • env (Hash{String => String, Boolean, PATH, nil}) (по умолчанию: {})
  • input (String, Array<String>) (по умолчанию: [])
  • must_succeed (Boolean) (по умолчанию: true)
  • print_stdout (Boolean, Symbol) (по умолчанию: false)
  • print_stderr (Boolean, Symbol) (по умолчанию: true)
  • debug (Boolean, nil) (по умолчанию: nil)
  • verbose (Boolean, nil) (по умолчанию: nil)
  • secrets (String, Array<String>) (по умолчанию: [])
  • chdir (String, Pathname, nil) (по умолчанию: nil)
  • reset_uid (Boolean) (по умолчанию: false)
  • run_as_real_uid (Boolean) (по умолчанию: false)
  • timeout (Integer, Float, nil) (по умолчанию: nil)

Возвращает:

  • (SystemCommand::Result)


129
130
131
132
133
134
# File 'system_command.rb', line 129

def self.run!(executable, args: [], sudo: false, sudo_as_root: false, env: {}, input: [], must_succeed: true,
              print_stdout: false, print_stderr: true, debug: nil, verbose: nil, secrets: [], chdir: nil,
              reset_uid: false, run_as_real_uid: false, timeout: nil)
  run(executable, args:, sudo:, sudo_as_root:, env:, input:, must_succeed:, print_stdout:, print_stderr:,
      debug:, verbose:, secrets:, chdir:, reset_uid:, run_as_real_uid:, timeout:)
end

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

#command ⇒ Array<String>

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

Возвращает:

  • (Array<String>)


228
229
230
# File 'system_command.rb', line 228

def command
  [*command_prefix, executable.to_s, *expanded_args]
end

#run! ⇒ SystemCommand::Result

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

Возвращает:

  • (SystemCommand::Result)


137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'system_command.rb', line 137

def run!
  $stderr.puts Formatter.redact_secrets(command.shelljoin.gsub('\=', "="), @secrets) if verbose? && debug?

  @output = T.let([], T.nilable(T::Array[[Symbol, String]]))
  @output = T.must(@output)

  each_output_line do |type, line|
    case type
    when :stdout
      case @print_stdout
      when true
        $stdout << Formatter.redact_secrets(line, @secrets)
      when :debug
        $stderr << Formatter.redact_secrets(line, @secrets) if debug?
      end
      @output << [:stdout, line]
    when :stderr
      case @print_stderr
      when true
        $stderr << Formatter.redact_secrets(line, @secrets)
      when :debug
        $stderr << Formatter.redact_secrets(line, @secrets) if debug?
      end
      @output << [:stderr, line]
    end
  end

  result = Result.new(command, @output, T.must(@status), secrets: @secrets)
  result.assert_success! if must_succeed?
  result
end

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

Spec-Zone.ru

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