diff --git a/Library/Homebrew/cli_parser.rb b/Library/Homebrew/cli_parser.rb index da63133dfb..1fa11a1d47 100644 --- a/Library/Homebrew/cli_parser.rb +++ b/Library/Homebrew/cli_parser.rb @@ -148,6 +148,21 @@ module Homebrew .gsub(/\*(.*?)\*/m, "#{Tty.underline}\\1#{Tty.reset}") end + def formula_options + ARGV.formulae.each do |f| + next if f.options.empty? + f.options.each do |o| + name = o.flag + description = "`#{f.name}`: #{o.description}" + if name.end_with? "=" + flag name, description: description + else + switch name, description: description + end + end + end + end + private def enable_switch(*names) diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb index 3870330617..46b4820f90 100644 --- a/Library/Homebrew/cmd/install.rb +++ b/Library/Homebrew/cmd/install.rb @@ -41,7 +41,7 @@ #: If `--devel` is passed, and defines it, install the development version. #: #: If `--HEAD` is passed, and defines it, install the HEAD version, -#: aka master, trunk, unstable. +#: aka. master, trunk, unstable. #: #: If `--keep-tmp` is passed, the temporary files created during installation #: are not deleted. @@ -85,7 +85,7 @@ module Homebrew def install_args Homebrew::CLI::Parser.new do usage_banner <<~EOS - `install` [] formula + `install` [] Install . @@ -124,7 +124,7 @@ module Homebrew switch "--devel", description: "If defines it, install the development version." switch "--HEAD", - description: "If defines it, install the HEAD version, aka master, trunk, unstable." + description: "If defines it, install the HEAD version, aka. master, trunk, unstable." switch "--fetch-HEAD", description: "Fetch the upstream repository to detect if the HEAD installation of the "\ "formula is outdated. Otherwise, the repository's HEAD will be checked for "\ @@ -146,19 +146,7 @@ module Homebrew "package into a Homebrew package." switch "-g", "--git", description: "Create a Git repository, useful for creating patches to the software." - - ARGV.formulae.each do |f| - next if f.options.empty? - f.options.each do |o| - name = o.flag - description = "`#{f.name}`: #{o.description}" - if name.end_with? "=" - flag name, description: description - else - switch name, description: description - end - end - end + formula_options end end diff --git a/Library/Homebrew/cmd/reinstall.rb b/Library/Homebrew/cmd/reinstall.rb index 123e97d7ab..0b0abe0a7d 100644 --- a/Library/Homebrew/cmd/reinstall.rb +++ b/Library/Homebrew/cmd/reinstall.rb @@ -1,8 +1,30 @@ -#: * `reinstall` [`--display-times`] : -#: Uninstall and then install (with existing install options). +#: * `reinstall` [`--debug`] [`--build-from-source`|`--force-bottle`] [`--keep-tmp`] [`--force`] [`--verbose`] [`--display-times`] : +#: Uninstall and then install (with existing and any appended install options). +#: +#: If `--debug` (or `-d`) is passed and brewing fails, open an interactive debugging +#: session with access to IRB or a shell inside the temporary build directory. +#: +#: If `--build-from-source` (or `-s`) is passed, compile the specified from +#: source even if a bottle is provided. Dependencies will still be installed +#: from bottles if they are available. +#: +#: If `--force-bottle` is passed, install from a bottle if it exists for the +#: current or newest version of macOS, even if it would not normally be used +#: for installation. +#: +#: If `--keep-tmp` is passed, the temporary files created during installation +#: are not deleted. +#: +#: If `--force` (or `-f`) is passed, install without checking for previously +#: installed keg-only or non-migrated versions +#: +#: If `--verbose` (or `-v`) is passed, print the verification and postinstall steps. #: #: If `--display-times` is passed, install times for each formula are printed #: at the end of the run. +#: +#: Installation options specific to may be appended to the command, +#: and can be listed with `brew options` . require "formula_installer" require "development_tools" @@ -17,16 +39,28 @@ module Homebrew def reinstall_args Homebrew::CLI::Parser.new do usage_banner <<~EOS - `reinstall` [] : + `reinstall` [] - Uninstall and then install (with existing install options). + Uninstall and then install (with existing and any appended install options). EOS + switch :debug, + description: "If brewing fails, open an interactive debugging session with access to IRB "\ + "or a shell inside the temporary build directory" switch "-s", "--build-from-source", - description: "Compile the formula> from source even if a bottle is available." + description: "Compile from source even if a bottle is available." + switch "--force-bottle", + description: "Install from a bottle if it exists for the current or newest version of "\ + "macOS, even if it would not normally be used for installation." + switch "--keep-tmp", + description: "Dont delete the temporary files created during installation." + switch :force, + description: "Install without checking for previously installed keg-only or "\ + "non-migrated versions." + switch :verbose, + description: "Print the verification and postinstall steps." switch "--display-times", description: "Print install times for each formula at the end of the run." - switch :verbose - switch :debug + formula_options end end diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index 68ab9f7c81..798a7e6418 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -1,7 +1,19 @@ -#: * `upgrade` [] [`--fetch-HEAD`] [`--ignore-pinned`] [`--display-times`] []: -#: Upgrade outdated, unpinned brews (with existing install options). +#: * `upgrade` [`--debug`] [`--build-from-source`|`--force-bottle`] [`--fetch-HEAD`] [`--ignore-pinned`] [`--keep-tmp`] [`--force`] [`--verbose`] [`--display-times`] [] [ ...]: +#: Upgrade outdated, unpinned brews (with existing and any appended install options). #: -#: Options for the `install` command are also valid here. +#: If are given, upgrade only the specified brews (unless they +#: are pinned; see `pin`, `unpin`). +#: +#: If `--debug` (or `-d`) is passed and brewing fails, open an interactive debugging +#: session with access to IRB or a shell inside the temporary build directory. +#: +#: If `--build-from-source` (or `-s`) is passed, compile the specified from +#: source even if a bottle is provided. Dependencies will still be installed +#: from bottles if they are available. +#: +#: If `--force-bottle` is passed, install from a bottle if it exists for the +#: current or newest version of macOS, even if it would not normally be used +#: for installation. #: #: If `--fetch-HEAD` is passed, fetch the upstream repository to detect if #: the HEAD installation of the formula is outdated. Otherwise, the @@ -11,11 +23,19 @@ #: If `--ignore-pinned` is passed, set a 0 exit code even if pinned formulae #: are not upgraded. #: +#: If `--keep-tmp` is passed, the temporary files created during installation +#: are not deleted. +#: +#: If `--force` (or `-f`) is passed, install without checking for previously +#: installed keg-only or non-migrated versions +#: +#: If `--verbose` (or `-v`) is passed, print the verification and postinstall steps. +#: #: If `--display-times` is passed, install times for each formula are printed #: at the end of the run. #: -#: If are given, upgrade only the specified brews (unless they -#: are pinned; see `pin`, `unpin`). +#: Additional options specific to may be appended to the command, +#: and can be listed with `brew options` . require "install" require "reinstall" @@ -31,26 +51,37 @@ module Homebrew def upgrade_args Homebrew::CLI::Parser.new do usage_banner <<~EOS - `upgrade` [] [] [] + `upgrade` [] - Upgrade outdated, unpinned brews (with existing install options). - Options for the `install` command are also valid here. + Upgrade outdated, unpinned brews (with existing and any appended install options). - If are given, upgrade only the specified brews (unless they + If are given, upgrade only the specified brews (unless they are pinned; see `pin`, `unpin`). EOS + switch :debug, + description: "If brewing fails, open an interactive debugging session with access to IRB "\ + "or a shell inside the temporary build directory" + switch "-s", "--build-from-source", + description: "Compile from source even if a bottle is available." + switch "--force-bottle", + description: "Install from a bottle if it exists for the current or newest version of "\ + "macOS, even if it would not normally be used for installation." switch "--fetch-HEAD", description: "Fetch the upstream repository to detect if the HEAD installation of the "\ "formula is outdated. Otherwise, the repository's HEAD will be checked for "\ "updates when a new stable or devel version has been released." switch "--ignore-pinned", description: "Set a 0 exit code even if pinned formulae are not upgraded." - switch "--build-bottle", - description: "Prepare the formula for eventual bottling during installation." + switch "--keep-tmp", + description: "Dont delete the temporary files created during installation." + switch :force, + description: "Install without checking for previously installed keg-only or "\ + "non-migrated versions." + switch :verbose, + description: "Print the verification and postinstall steps." switch "--display-times", description: "Print install times for each formula at the end of the run." - switch :verbose - switch :debug + formula_options end end diff --git a/Library/Homebrew/test/cmd/reinstall_spec.rb b/Library/Homebrew/test/cmd/reinstall_spec.rb index ab64d5e0cf..178a0588d4 100644 --- a/Library/Homebrew/test/cmd/reinstall_spec.rb +++ b/Library/Homebrew/test/cmd/reinstall_spec.rb @@ -21,8 +21,9 @@ describe "brew reinstall", :integration_test do end it "reinstalls a Formula even when one of the options is invalid" do - expect { brew "reinstall", "testball", "--with-fo" } - .to output(/Error: invalid option: --with-fo/).to_stderr + expect { brew "reinstall", "testball", "--invalid" } + .to output(/Error: invalid option: --invalid/).to_stderr + .and not_to_output.to_stdout .and be_a_failure end diff --git a/docs/Manpage.md b/docs/Manpage.md index 553a347314..c7e86cb8a7 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -279,7 +279,7 @@ these flags should only appear after a command. If `--devel` is passed, and *`formula`* defines it, install the development version. If `--HEAD` is passed, and *`formula`* defines it, install the HEAD version, - aka master, trunk, unstable. + aka. master, trunk, unstable. If `--keep-tmp` is passed, the temporary files created during installation are not deleted. @@ -414,12 +414,34 @@ these flags should only appear after a command. If `--syntax` is passed, also syntax-check all of Homebrew's Ruby files. - * `reinstall` [`--display-times`] *`formula`*: - Uninstall and then install *`formula`* (with existing install options). + * `reinstall` [`--debug`] [`--build-from-source`|`--force-bottle`] [`--keep-tmp`] [`--force`] [`--verbose`] [`--display-times`] *`formula`*: + Uninstall and then install *`formula`* (with existing and any appended install options). + + If `--debug` (or `-d`) is passed and brewing fails, open an interactive debugging + session with access to IRB or a shell inside the temporary build directory. + + If `--build-from-source` (or `-s`) is passed, compile the specified *`formula`* from + source even if a bottle is provided. Dependencies will still be installed + from bottles if they are available. + + If `--force-bottle` is passed, install from a bottle if it exists for the + current or newest version of macOS, even if it would not normally be used + for installation. + + If `--keep-tmp` is passed, the temporary files created during installation + are not deleted. + + If `--force` (or `-f`) is passed, install without checking for previously + installed keg-only or non-migrated versions + + If `--verbose` (or `-v`) is passed, print the verification and postinstall steps. If `--display-times` is passed, install times for each formula are printed at the end of the run. + Installation options specific to *`formula`* may be appended to the command, + and can be listed with `brew options` *`formula`*. + * `search`, `-S`: Display all locally available formulae (including tapped ones). No online search is performed. @@ -588,10 +610,22 @@ these flags should only appear after a command. `repositories`) using `git`(1) to their latest `origin/master`. Note this will destroy all your uncommitted or committed changes. - * `upgrade` [*`install-options`*] [`--fetch-HEAD`] [`--ignore-pinned`] [`--display-times`] [*`formulae`*]: - Upgrade outdated, unpinned brews (with existing install options). + * `upgrade` [`--debug`] [`--build-from-source`|`--force-bottle`] [`--fetch-HEAD`] [`--ignore-pinned`] [`--keep-tmp`] [`--force`] [`--verbose`] [`--display-times`] [*`formula`*] [*`options`* ...]: + Upgrade outdated, unpinned brews (with existing and any appended install options). - Options for the `install` command are also valid here. + If *`formula`* are given, upgrade only the specified brews (unless they + are pinned; see `pin`, `unpin`). + + If `--debug` (or `-d`) is passed and brewing fails, open an interactive debugging + session with access to IRB or a shell inside the temporary build directory. + + If `--build-from-source` (or `-s`) is passed, compile the specified *`formula`* from + source even if a bottle is provided. Dependencies will still be installed + from bottles if they are available. + + If `--force-bottle` is passed, install from a bottle if it exists for the + current or newest version of macOS, even if it would not normally be used + for installation. If `--fetch-HEAD` is passed, fetch the upstream repository to detect if the HEAD installation of the formula is outdated. Otherwise, the @@ -601,11 +635,19 @@ these flags should only appear after a command. If `--ignore-pinned` is passed, set a 0 exit code even if pinned formulae are not upgraded. + If `--keep-tmp` is passed, the temporary files created during installation + are not deleted. + + If `--force` (or `-f`) is passed, install without checking for previously + installed keg-only or non-migrated versions + + If `--verbose` (or `-v`) is passed, print the verification and postinstall steps. + If `--display-times` is passed, install times for each formula are printed at the end of the run. - If *`formulae`* are given, upgrade only the specified brews (unless they - are pinned; see `pin`, `unpin`). + Additional options specific to *`formula`* may be appended to the command, + and can be listed with `brew options` *`formula`*. * `uses` [`--installed`] [`--recursive`] [`--include-build`] [`--include-test`] [`--include-optional`] [`--skip-recommended`] [`--devel`|`--HEAD`] *`formulae`*: Show the formulae that specify *`formulae`* as a dependency. When given diff --git a/manpages/brew.1 b/manpages/brew.1 index 74f920374a..00fcb0a118 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -285,7 +285,7 @@ If \fB\-\-include\-test\fR is passed, install testing dependencies\. These are o If \fB\-\-devel\fR is passed, and \fIformula\fR defines it, install the development version\. . .IP -If \fB\-\-HEAD\fR is passed, and \fIformula\fR defines it, install the HEAD version, aka master, trunk, unstable\. +If \fB\-\-HEAD\fR is passed, and \fIformula\fR defines it, install the HEAD version, aka\. master, trunk, unstable\. . .IP If \fB\-\-keep\-tmp\fR is passed, the temporary files created during installation are not deleted\. @@ -426,12 +426,33 @@ If \fB\-\-aliases\fR is passed, also verify any alias symlinks in each tap\. If \fB\-\-syntax\fR is passed, also syntax\-check all of Homebrew\'s Ruby files\. . .TP -\fBreinstall\fR [\fB\-\-display\-times\fR] \fIformula\fR -Uninstall and then install \fIformula\fR (with existing install options)\. +\fBreinstall\fR [\fB\-\-debug\fR] [\fB\-\-build\-from\-source\fR|\fB\-\-force\-bottle\fR] [\fB\-\-keep\-tmp\fR] [\fB\-\-force\fR] [\fB\-\-verbose\fR] [\fB\-\-display\-times\fR] \fIformula\fR +Uninstall and then install \fIformula\fR (with existing and any appended install options)\. +. +.IP +If \fB\-\-debug\fR (or \fB\-d\fR) is passed and brewing fails, open an interactive debugging session with access to IRB or a shell inside the temporary build directory\. +. +.IP +If \fB\-\-build\-from\-source\fR (or \fB\-s\fR) is passed, compile the specified \fIformula\fR from source even if a bottle is provided\. Dependencies will still be installed from bottles if they are available\. +. +.IP +If \fB\-\-force\-bottle\fR is passed, install from a bottle if it exists for the current or newest version of macOS, even if it would not normally be used for installation\. +. +.IP +If \fB\-\-keep\-tmp\fR is passed, the temporary files created during installation are not deleted\. +. +.IP +If \fB\-\-force\fR (or \fB\-f\fR) is passed, install without checking for previously installed keg\-only or non\-migrated versions +. +.IP +If \fB\-\-verbose\fR (or \fB\-v\fR) is passed, print the verification and postinstall steps\. . .IP If \fB\-\-display\-times\fR is passed, install times for each formula are printed at the end of the run\. . +.IP +Installation options specific to \fIformula\fR may be appended to the command, and can be listed with \fBbrew options\fR \fIformula\fR\. +. .TP \fBsearch\fR, \fB\-S\fR Display all locally available formulae (including tapped ones)\. No online search is performed\. @@ -601,11 +622,20 @@ If \fB\-\-force\fR (or \fB\-f\fR) is specified then always do a slower, full upd Fetches and resets Homebrew and all tap repositories (or the specified \fBrepositories\fR) using \fBgit\fR(1) to their latest \fBorigin/master\fR\. Note this will destroy all your uncommitted or committed changes\. . .TP -\fBupgrade\fR [\fIinstall\-options\fR] [\fB\-\-fetch\-HEAD\fR] [\fB\-\-ignore\-pinned\fR] [\fB\-\-display\-times\fR] [\fIformulae\fR] -Upgrade outdated, unpinned brews (with existing install options)\. +\fBupgrade\fR [\fB\-\-debug\fR] [\fB\-\-build\-from\-source\fR|\fB\-\-force\-bottle\fR] [\fB\-\-fetch\-HEAD\fR] [\fB\-\-ignore\-pinned\fR] [\fB\-\-keep\-tmp\fR] [\fB\-\-force\fR] [\fB\-\-verbose\fR] [\fB\-\-display\-times\fR] [\fIformula\fR] [\fIoptions\fR \.\.\.] +Upgrade outdated, unpinned brews (with existing and any appended install options)\. . .IP -Options for the \fBinstall\fR command are also valid here\. +If \fIformula\fR are given, upgrade only the specified brews (unless they are pinned; see \fBpin\fR, \fBunpin\fR)\. +. +.IP +If \fB\-\-debug\fR (or \fB\-d\fR) is passed and brewing fails, open an interactive debugging session with access to IRB or a shell inside the temporary build directory\. +. +.IP +If \fB\-\-build\-from\-source\fR (or \fB\-s\fR) is passed, compile the specified \fIformula\fR from source even if a bottle is provided\. Dependencies will still be installed from bottles if they are available\. +. +.IP +If \fB\-\-force\-bottle\fR is passed, install from a bottle if it exists for the current or newest version of macOS, even if it would not normally be used for installation\. . .IP If \fB\-\-fetch\-HEAD\fR is passed, fetch the upstream repository to detect if the HEAD installation of the formula is outdated\. Otherwise, the repository\'s HEAD will be checked for updates when a new stable or devel version has been released\. @@ -614,10 +644,19 @@ If \fB\-\-fetch\-HEAD\fR is passed, fetch the upstream repository to detect if t If \fB\-\-ignore\-pinned\fR is passed, set a 0 exit code even if pinned formulae are not upgraded\. . .IP +If \fB\-\-keep\-tmp\fR is passed, the temporary files created during installation are not deleted\. +. +.IP +If \fB\-\-force\fR (or \fB\-f\fR) is passed, install without checking for previously installed keg\-only or non\-migrated versions +. +.IP +If \fB\-\-verbose\fR (or \fB\-v\fR) is passed, print the verification and postinstall steps\. +. +.IP If \fB\-\-display\-times\fR is passed, install times for each formula are printed at the end of the run\. . .IP -If \fIformulae\fR are given, upgrade only the specified brews (unless they are pinned; see \fBpin\fR, \fBunpin\fR)\. +Additional options specific to \fIformula\fR may be appended to the command, and can be listed with \fBbrew options\fR \fIformula\fR\. . .TP \fBuses\fR [\fB\-\-installed\fR] [\fB\-\-recursive\fR] [\fB\-\-include\-build\fR] [\fB\-\-include\-test\fR] [\fB\-\-include\-optional\fR] [\fB\-\-skip\-recommended\fR] [\fB\-\-devel\fR|\fB\-\-HEAD\fR] \fIformulae\fR