From c7e8b66da32aa725c2fa23058263dc165475f150 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Thu, 27 Mar 2025 06:12:10 +0000 Subject: [PATCH] bundle: add `--services` flag for sh and exec --- Library/Homebrew/bundle/commands/exec.rb | 15 +++++++++++++-- Library/Homebrew/bundle/commands/services.rb | 6 ++++++ Library/Homebrew/cmd/bundle.rb | 4 +++- .../sorbet/rbi/dsl/homebrew/cmd/bundle.rbi | 3 +++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/bundle/commands/exec.rb b/Library/Homebrew/bundle/commands/exec.rb index 15968bbba0..a51b627141 100644 --- a/Library/Homebrew/bundle/commands/exec.rb +++ b/Library/Homebrew/bundle/commands/exec.rb @@ -47,7 +47,7 @@ module Homebrew PATH_LIKE_ENV_REGEX = /.+#{File::PATH_SEPARATOR}/ - def self.run(*args, global: false, file: nil, subcommand: "") + def self.run(*args, global: false, file: nil, subcommand: "", services: false) # Cleanup Homebrew's global environment HOMEBREW_ENV_CLEANUP.each { |key| ENV.delete(key) } @@ -157,7 +157,18 @@ module Homebrew return end - exec(*args) + if services + require "bundle/commands/services" + + exit_code = 0 + Services.run_services(@dsl.entries) do + Kernel.system(*args) + exit_code = $CHILD_STATUS.exitstatus + end + exit!(exit_code) + else + exec(*args) + end end end end diff --git a/Library/Homebrew/bundle/commands/services.rb b/Library/Homebrew/bundle/commands/services.rb index e3c6d3dd5f..74518ca141 100644 --- a/Library/Homebrew/bundle/commands/services.rb +++ b/Library/Homebrew/bundle/commands/services.rb @@ -114,6 +114,12 @@ module Homebrew yield ensure stop_services(entries) + + conflicting_services.each do |conflict| + if conflict["running"] && conflict["registered"] && !Bundle::BrewServices.run(conflict["name"]) + opoo "Failed to restart #{conflict["name"]} service" + end + end end end end diff --git a/Library/Homebrew/cmd/bundle.rb b/Library/Homebrew/cmd/bundle.rb index df26f6cc9f..e014799fda 100755 --- a/Library/Homebrew/cmd/bundle.rb +++ b/Library/Homebrew/cmd/bundle.rb @@ -89,6 +89,8 @@ module Homebrew "even if `$HOMEBREW_BUNDLE_NO_UPGRADE` is set. " switch "--install", description: "Run `install` before continuing to other operations e.g. `exec`." + switch "--services", + description: "Temporarily start services while running the `exec` or `sh` command." switch "-f", "--force", description: "`install` runs with `--force`/`--overwrite`. " \ "`dump` overwrites an existing `Brewfile`. " \ @@ -238,7 +240,7 @@ module Homebrew ["env"] end require "bundle/commands/exec" - Homebrew::Bundle::Commands::Exec.run(*named_args, global:, file:, subcommand:) + Homebrew::Bundle::Commands::Exec.run(*named_args, global:, file:, subcommand:, services: args.services?) when "list" require "bundle/commands/list" Homebrew::Bundle::Commands::List.run( diff --git a/Library/Homebrew/sorbet/rbi/dsl/homebrew/cmd/bundle.rbi b/Library/Homebrew/sorbet/rbi/dsl/homebrew/cmd/bundle.rbi index 99b7673e46..43c5e5fe61 100644 --- a/Library/Homebrew/sorbet/rbi/dsl/homebrew/cmd/bundle.rbi +++ b/Library/Homebrew/sorbet/rbi/dsl/homebrew/cmd/bundle.rbi @@ -59,6 +59,9 @@ class Homebrew::Cmd::Bundle::Args < Homebrew::CLI::Args sig { returns(T::Boolean) } def no_vscode?; end + sig { returns(T::Boolean) } + def services?; end + sig { returns(T::Boolean) } def tap?; end