Merge remote-tracking branch 'origin/master' into systemd-quote

This commit is contained in:
Ruoyu Zhong 2024-12-04 18:01:10 +08:00
commit 36d06c5075
No known key found for this signature in database
94 changed files with 366 additions and 274 deletions

View File

@ -14,7 +14,7 @@ GEM
bindata (~> 2)
erubi (1.13.0)
hana (1.3.7)
json (2.8.2)
json (2.9.0)
json_schemer (2.3.0)
bigdecimal
hana (~> 1.3)
@ -69,17 +69,17 @@ GEM
rspec-core (> 3.3)
rspec-sorbet (1.9.2)
sorbet-runtime
rspec-support (3.13.1)
rspec-support (3.13.2)
rspec_junit_formatter (0.6.0)
rspec-core (>= 2, < 4, != 2.12.0)
rubocop (1.69.0)
rubocop (1.69.1)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.4, < 3.0)
rubocop-ast (>= 1.36.1, < 2.0)
regexp_parser (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.36.2, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.36.2)
@ -111,15 +111,15 @@ GEM
simplecov-html (0.13.1)
simplecov_json_formatter (0.1.4)
simpleidn (0.2.3)
sorbet (0.5.11670)
sorbet-static (= 0.5.11670)
sorbet-runtime (0.5.11670)
sorbet-static (0.5.11670-aarch64-linux)
sorbet-static (0.5.11670-universal-darwin)
sorbet-static (0.5.11670-x86_64-linux)
sorbet-static-and-runtime (0.5.11670)
sorbet (= 0.5.11670)
sorbet-runtime (= 0.5.11670)
sorbet (0.5.11672)
sorbet-static (= 0.5.11672)
sorbet-runtime (0.5.11672)
sorbet-static (0.5.11672-aarch64-linux)
sorbet-static (0.5.11672-universal-darwin)
sorbet-static (0.5.11672-x86_64-linux)
sorbet-static-and-runtime (0.5.11672)
sorbet (= 0.5.11672)
sorbet-runtime (= 0.5.11672)
spoom (1.5.0)
erubi (>= 1.10.0)
prism (>= 0.28.0)

View File

@ -111,6 +111,7 @@ __brew_complete_commands() {
local cur="${COMP_WORDS[COMP_CWORD]}"
local cmds
local -a cmd_aliases
if [[ -n ${__HOMEBREW_COMMANDS} ]]
then
@ -122,6 +123,8 @@ __brew_complete_commands() {
then
cmds="$(< "${HOMEBREW_REPOSITORY}/completions/internal_commands_list.txt")"
fi
while read -r alias; do cmd_aliases+=("${alias}"); done < <(compgen -W "$(__brew_list_aliases)")
[[ -n ${cmd_aliases[*]+"${cmd_aliases[*]}"} ]] && cmds+=" ${cmd_aliases[*]} alias unalias"
while read -r line; do COMPREPLY+=("${line}"); done < <(compgen -W "${cmds}" -- "${cur}")
export __HOMEBREW_COMMANDS=${cmds}
}
@ -131,6 +134,26 @@ __brew_complete_files() {
command -v compopt &> /dev/null && compopt -o default
}
# https://github.com/Homebrew/homebrew-aliases
__brew_list_aliases() {
local aliases_dir="${HOME}/.brew-aliases"
local pattern="^# alias: brew ([[:alnum:]-]+)$"
local -a aliases
[[ ! -d ${aliases_dir} ]] && return
for file in "${aliases_dir}"/*; do
[[ ! -f ${file} ]] && continue
while read -r line; do
if [[ ${line} =~ ${pattern} ]]; then
aliases+=("${BASH_REMATCH[1]}")
break
fi
done < "${file}"
done
[[ -n ${aliases[*]+"${aliases[*]}"} ]] && echo "${aliases[@]}"
}
<%= completion_functions.join("\n") %>
_brew() {

View File

@ -454,16 +454,6 @@ module Homebrew
# @return [String]
sig { returns(String) }
def to_systemd_unit
unit = <<~EOS
[Unit]
Description=Homebrew generated unit for #{@formula.name}
[Install]
WantedBy=default.target
[Service]
EOS
# command needs to be first because it initializes all other values
cmd = command&.map { |arg| Utils::Service.systemd_quote(arg) }
&.join(" ")
@ -481,24 +471,22 @@ module Homebrew
options << "StandardError=append:#{File.expand_path(@error_log_path)}" if @error_log_path.present?
options += @environment_variables.map { |k, v| "Environment=\"#{k}=#{v}\"" } if @environment_variables.present?
unit + options.join("\n")
<<~SYSTEMD
[Unit]
Description=Homebrew generated unit for #{@formula.name}
[Install]
WantedBy=default.target
[Service]
#{options.join("\n")}
SYSTEMD
end
# Returns a `String` systemd unit timer.
# @return [String]
sig { returns(String) }
def to_systemd_timer
timer = <<~EOS
[Unit]
Description=Homebrew generated timer for #{@formula.name}
[Install]
WantedBy=timers.target
[Timer]
Unit=#{service_name}
EOS
options = []
options << "Persistent=true" if @run_type == RUN_TYPE_CRON
options << "OnUnitActiveSec=#{@interval}" if @run_type == RUN_TYPE_INTERVAL
@ -509,7 +497,17 @@ module Homebrew
options << "OnCalendar=#{@cron[:Weekday]}-*-#{@cron[:Month]}-#{@cron[:Day]} #{hours}:#{minutes}:00"
end
timer + options.join("\n")
<<~SYSTEMD
[Unit]
Description=Homebrew generated timer for #{@formula.name}
[Install]
WantedBy=timers.target
[Timer]
Unit=#{service_name}
#{options.join("\n")}
SYSTEMD
end
# Prepare the service hash for inclusion in the formula API JSON.

View File

@ -4,75 +4,76 @@
# This is an autogenerated file for types exported from the `rspec-support` gem.
# Please instead update this file by running `bin/tapioca gem rspec-support`.
# source://rspec-support//lib/rspec/support.rb#3
module RSpec
extend ::RSpec::Support::Warnings
class << self
# source://rspec-core/3.13.0/lib/rspec/core.rb#70
# source://rspec-core/3.13.2/lib/rspec/core.rb#70
def clear_examples; end
# source://rspec-core/3.13.0/lib/rspec/core.rb#85
# source://rspec-core/3.13.2/lib/rspec/core.rb#85
def configuration; end
# source://rspec-core/3.13.0/lib/rspec/core.rb#49
# source://rspec-core/3.13.2/lib/rspec/core.rb#49
def configuration=(_arg0); end
# source://rspec-core/3.13.0/lib/rspec/core.rb#97
# source://rspec-core/3.13.2/lib/rspec/core.rb#97
def configure; end
# source://rspec-core/3.13.0/lib/rspec/core.rb#194
# source://rspec-core/3.13.2/lib/rspec/core.rb#194
def const_missing(name); end
# source://rspec-core/3.13.0/lib/rspec/core/dsl.rb#42
# source://rspec-core/3.13.2/lib/rspec/core/dsl.rb#42
def context(*args, &example_group_block); end
# source://rspec-core/3.13.0/lib/rspec/core.rb#122
# source://rspec-core/3.13.2/lib/rspec/core.rb#122
def current_example; end
# source://rspec-core/3.13.0/lib/rspec/core.rb#128
# source://rspec-core/3.13.2/lib/rspec/core.rb#128
def current_example=(example); end
# source://rspec-core/3.13.0/lib/rspec/core.rb#154
# source://rspec-core/3.13.2/lib/rspec/core.rb#154
def current_scope; end
# source://rspec-core/3.13.0/lib/rspec/core.rb#134
# source://rspec-core/3.13.2/lib/rspec/core.rb#134
def current_scope=(scope); end
# source://rspec-core/3.13.0/lib/rspec/core/dsl.rb#42
# source://rspec-core/3.13.2/lib/rspec/core/dsl.rb#42
def describe(*args, &example_group_block); end
# source://rspec-core/3.13.0/lib/rspec/core/dsl.rb#42
# source://rspec-core/3.13.2/lib/rspec/core/dsl.rb#42
def example_group(*args, &example_group_block); end
# source://rspec-core/3.13.0/lib/rspec/core/dsl.rb#42
# source://rspec-core/3.13.2/lib/rspec/core/dsl.rb#42
def fcontext(*args, &example_group_block); end
# source://rspec-core/3.13.0/lib/rspec/core/dsl.rb#42
# source://rspec-core/3.13.2/lib/rspec/core/dsl.rb#42
def fdescribe(*args, &example_group_block); end
# source://rspec-core/3.13.0/lib/rspec/core.rb#58
# source://rspec-core/3.13.2/lib/rspec/core.rb#58
def reset; end
# source://rspec-core/3.13.0/lib/rspec/core/shared_example_group.rb#110
# source://rspec-core/3.13.2/lib/rspec/core/shared_example_group.rb#110
def shared_context(name, *args, &block); end
# source://rspec-core/3.13.0/lib/rspec/core/shared_example_group.rb#110
# source://rspec-core/3.13.2/lib/rspec/core/shared_example_group.rb#110
def shared_examples(name, *args, &block); end
# source://rspec-core/3.13.0/lib/rspec/core/shared_example_group.rb#110
# source://rspec-core/3.13.2/lib/rspec/core/shared_example_group.rb#110
def shared_examples_for(name, *args, &block); end
# source://rspec-core/3.13.0/lib/rspec/core.rb#160
# source://rspec-core/3.13.2/lib/rspec/core.rb#160
def world; end
# source://rspec-core/3.13.0/lib/rspec/core.rb#49
# source://rspec-core/3.13.2/lib/rspec/core.rb#49
def world=(_arg0); end
# source://rspec-core/3.13.0/lib/rspec/core/dsl.rb#42
# source://rspec-core/3.13.2/lib/rspec/core/dsl.rb#42
def xcontext(*args, &example_group_block); end
# source://rspec-core/3.13.0/lib/rspec/core/dsl.rb#42
# source://rspec-core/3.13.2/lib/rspec/core/dsl.rb#42
def xdescribe(*args, &example_group_block); end
end
end
@ -893,7 +894,7 @@ end
# On 1.9 and up, this is in core, so we just use the real one
#
# source://rspec-support//lib/rspec/support/reentrant_mutex.rb#67
# source://rspec-support//lib/rspec/support/reentrant_mutex.rb#65
class RSpec::Support::Mutex < ::Thread::Mutex
class << self
# source://rspec-support//lib/rspec/support/reentrant_mutex.rb#70
@ -1539,7 +1540,7 @@ module RSpec::Support::RubyFeatures
# @api private
# @return [Boolean]
#
# source://rspec-support//lib/rspec/support/ruby_features.rb#104
# source://rspec-support//lib/rspec/support/ruby_features.rb#100
def supports_syntax_suggest?; end
# @api private
@ -1600,7 +1601,7 @@ module RSpec::Support::RubyFeatures
# source://rspec-support//lib/rspec/support/ruby_features.rb#168
def supports_rebinding_module_methods?; end
# source://rspec-support//lib/rspec/support/ruby_features.rb#104
# source://rspec-support//lib/rspec/support/ruby_features.rb#100
def supports_syntax_suggest?; end
# source://rspec-support//lib/rspec/support/ruby_features.rb#121

View File

@ -718,7 +718,7 @@ RSpec.describe Homebrew::Service do
unit = f.service.to_systemd_unit
std_path = "#{HOMEBREW_PREFIX}/bin:#{HOMEBREW_PREFIX}/sbin:/usr/bin:/bin:/usr/sbin:/sbin"
unit_expect = <<~EOS
unit_expect = <<~SYSTEMD
[Unit]
Description=Homebrew generated unit for formula_name
@ -737,8 +737,8 @@ RSpec.describe Homebrew::Service do
StandardError=append:#{HOMEBREW_PREFIX}/var/log/beanstalkd.error.log
Environment="PATH=#{std_path}"
Environment="FOO=BAR"
EOS
expect(unit).to eq(unit_expect.strip)
SYSTEMD
expect(unit).to eq(unit_expect)
end
it "returns valid partial oneshot unit" do
@ -751,7 +751,7 @@ RSpec.describe Homebrew::Service do
end
unit = f.service.to_systemd_unit
unit_expect = <<~EOS
unit_expect = <<~SYSTEMD
[Unit]
Description=Homebrew generated unit for formula_name
@ -761,8 +761,8 @@ RSpec.describe Homebrew::Service do
[Service]
Type=oneshot
ExecStart="#{HOMEBREW_PREFIX}/opt/#{name}/bin/beanstalkd"
EOS
expect(unit).to eq(unit_expect.strip)
SYSTEMD
expect(unit).to eq(unit_expect)
end
it "expands paths" do
@ -774,7 +774,7 @@ RSpec.describe Homebrew::Service do
end
unit = f.service.to_systemd_unit
unit_expect = <<~EOS
unit_expect = <<~SYSTEMD
[Unit]
Description=Homebrew generated unit for formula_name
@ -785,8 +785,8 @@ RSpec.describe Homebrew::Service do
Type=simple
ExecStart="#{HOMEBREW_PREFIX}/opt/#{name}/bin/beanstalkd"
WorkingDirectory=#{Dir.home}
EOS
expect(unit).to eq(unit_expect.strip)
SYSTEMD
expect(unit).to eq(unit_expect)
end
end
@ -801,7 +801,7 @@ RSpec.describe Homebrew::Service do
end
unit = f.service.to_systemd_timer
unit_expect = <<~EOS
unit_expect = <<~SYSTEMD
[Unit]
Description=Homebrew generated timer for formula_name
@ -811,8 +811,8 @@ RSpec.describe Homebrew::Service do
[Timer]
Unit=homebrew.formula_name
OnUnitActiveSec=5
EOS
expect(unit).to eq(unit_expect.strip)
SYSTEMD
expect(unit).to eq(unit_expect)
end
it "returns valid partial timer" do
@ -824,7 +824,7 @@ RSpec.describe Homebrew::Service do
end
unit = f.service.to_systemd_timer
unit_expect = <<~EOS
unit_expect = <<~SYSTEMD
[Unit]
Description=Homebrew generated timer for formula_name
@ -833,7 +833,8 @@ RSpec.describe Homebrew::Service do
[Timer]
Unit=homebrew.formula_name
EOS
SYSTEMD
expect(unit).to eq(unit_expect)
end
@ -872,7 +873,7 @@ RSpec.describe Homebrew::Service do
end
unit = f.service.to_systemd_timer
unit_expect = <<~EOS
unit_expect = <<~SYSTEMD
[Unit]
Description=Homebrew generated timer for formula_name
@ -883,8 +884,8 @@ RSpec.describe Homebrew::Service do
Unit=homebrew.formula_name
Persistent=true
OnCalendar=#{calendar}
EOS
expect(unit).to eq(unit_expect.chomp)
SYSTEMD
expect(unit).to eq(unit_expect)
end
end
end

View File

@ -47,8 +47,8 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/elftools-1.3.1/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/erubi-1.13.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/hana-1.3.7/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/json-2.8.2")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/json-2.8.2/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/json-2.9.0")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/json-2.9.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/regexp_parser-2.9.3/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/simpleidn-0.2.3/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/json_schemer-2.3.0/lib")
@ -70,13 +70,13 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/prism-1.2.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/pry-0.15.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rainbow-3.1.1/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-runtime-0.5.11670/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-runtime-0.5.11672/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rbi-0.2.1/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/rbs-3.6.1")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rbs-3.6.1/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/redcarpet-3.6.0")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/redcarpet-3.6.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rspec-support-3.13.1/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rspec-support-3.13.2/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rspec-core-3.13.2/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rspec-expectations-3.13.3/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rspec-mocks-3.13.2/lib")
@ -89,7 +89,7 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/ruby-progressbar-1.13.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/unicode-emoji-4.0.4/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/unicode-display_width-3.1.2/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-1.69.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-1.69.1/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-md-1.2.4/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-performance-1.23.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-rspec-3.2.0/lib")
@ -102,9 +102,9 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/simplecov_json_formatter-0.1.4/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/simplecov-0.22.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/simplecov-cobertura-2.1.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-static-0.5.11670-universal-darwin/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-0.5.11670/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-static-and-runtime-0.5.11670/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-static-0.5.11672-universal-darwin/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-0.5.11672/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-static-and-runtime-0.5.11672/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/thor-1.3.2/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/spoom-1.5.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/stackprof-0.2.26")