138 Commits

Author SHA1 Message Date
Mike McQuaid
c36389165c
cli/named_args: don't warn about old tokens overlapping.
This avoids e.g.

```
Warning: Treating angband as a formula.
For the cask, use homebrew/cask/angband-app or specify the `--cask` flag.
To silence this message, use the `--formula` flag.
```

when running `brew install angband`.
2025-06-25 17:24:35 +01:00
Patrick Linnane
c6a2fa335d
brew style --fix 2025-05-05 14:35:08 -07:00
Douglas Eichelberger
9a2b386a52 Remove unsafe references from CLI and Formulary code 2024-12-06 11:06:27 -08:00
Douglas Eichelberger
90d066c7b8 Tidy up layout 2024-12-04 08:00:32 -08:00
Douglas Eichelberger
e1fdd2eda4 Enable strict typing in NamedArgs 2024-12-03 17:43:22 -08:00
Douglas Eichelberger
89e640c567 Remove OpenStruct from Uses cmd 2024-11-22 21:04:51 -08:00
Carlo Cabrera
2101411c0a
cli/named_args: update package_conflicts_message
Let's also show users the right way to silence this message.

Follow-up to #18330.
2024-09-17 00:23:15 +08:00
Mike McQuaid
8fd78bffce
Merge pull request #18330 from Homebrew/package-conflicts-message-quiet
cli/named_args: silence `package_conflicts_message` with `--quiet`
2024-09-16 17:00:04 +01:00
Bo Anderson
eb93d844d8
Fix NoSuchKegFromTapError handling 2024-09-16 05:46:14 +01:00
Carlo Cabrera
150e14f83d
cli/named_args: silence package_conflicts_message with --quiet
Based on feedback from Homebrew/discussions#5602.

While users can already silence this by passing `--formula` or `--cask`
as required, I am inclined to agree that `--quiet` should probably
silence messages that are relatively low priority (of which I think this
is one).
2024-09-15 18:51:06 +08:00
Rylan Polster
8cb62b1398
Set correct tap when loading installed casks 2024-09-10 13:34:40 -04:00
Issy Long
45978435e7
rubocop: Use Sorbet/StrictSigil as it's better than comments
- Previously I thought that comments were fine to discourage people from
  wasting their time trying to bump things that used `undef` that Sorbet
  didn't support. But RuboCop is better at this since it'll complain if
  the comments are unnecessary.

- Suggested in https://github.com/Homebrew/brew/pull/18018#issuecomment-2283369501.

- I've gone for a mixture of `rubocop:disable` for the files that can't
  be `typed: strict` (use of undef, required before everything else, etc)
  and `rubocop:todo` for everything else that should be tried to make
  strictly typed. There's no functional difference between the two as
  `rubocop:todo` is `rubocop:disable` with a different name.

- And I entirely disabled the cop for the docs/ directory since
  `typed: strict` isn't going to gain us anything for some Markdown
  linting config files.

- This means that now it's easier to track what needs to be done rather
  than relying on checklists of files in our big Sorbet issue:

```shell
$ git grep 'typed: true # rubocop:todo Sorbet/StrictSigil' | wc -l
    268
```

- And this is confirmed working for new files:

```shell
$ git status
On branch use-rubocop-for-sorbet-strict-sigils
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        Library/Homebrew/bad.rb
        Library/Homebrew/good.rb

nothing added to commit but untracked files present (use "git add" to track)

$ brew style
Offenses:

bad.rb:1:1: C: Sorbet/StrictSigil: Sorbet sigil should be at least strict got true.
^^^^^^^^^^^^^

1340 files inspected, 1 offense detected
```
2024-08-12 15:24:27 +01:00
Mike McQuaid
5bdd19d3eb
cli/named_args: improve missing_formula requires.
Let's make these more tightly scoped instead.
2024-07-25 12:54:03 +01:00
Hector Aguilar
4b9b2a53b8 Add missing_formula require 2024-07-18 20:42:05 -07:00
Mike McQuaid
c5dbd3ca24
Rearrange requires
This improves the load time of most brew commands. For an example of
one of the simplest commands this speeds up:

Without Bootsnap:
```
$ hyperfine 'git checkout master; brew help' 'git checkout optimise_requires; brew help'
Benchmark 1: git checkout master; brew help
  Time (mean ± σ):     525.0 ms ±  35.8 ms    [User: 229.9 ms, System: 113.1 ms]
  Range (min … max):   465.3 ms … 576.6 ms    10 runs

Benchmark 2: git checkout optimise_requires; brew help
  Time (mean ± σ):     383.3 ms ±  25.1 ms    [User: 133.0 ms, System: 72.1 ms]
  Range (min … max):   353.0 ms … 443.6 ms    10 runs

Summary
  git checkout optimise_requires; brew help ran
    1.37 ± 0.13 times faster than git checkout master; brew help
```

With Bootsnap:
```
$ hyperfine 'git checkout master; brew help' 'git checkout optimise_requires; brew help'
Benchmark 1: git checkout master; brew help
  Time (mean ± σ):     386.0 ms ±  30.9 ms    [User: 130.2 ms, System: 93.8 ms]
  Range (min … max):   359.5 ms … 469.3 ms    10 runs

Benchmark 2: git checkout optimise_requires; brew help
  Time (mean ± σ):     330.2 ms ±  32.4 ms    [User: 93.4 ms, System: 73.0 ms]
  Range (min … max):   302.9 ms … 413.9 ms    10 runs

Summary
  git checkout optimise_requires; brew help ran
    1.17 ± 0.15 times faster than git checkout master; brew help
```
2024-07-14 08:49:39 -04:00
Bo Anderson
ae9d5f9f14
cli/named_args: raise priority of core casks 2024-07-12 05:27:57 +01:00
apainintheneck
3dcb26072b cli/named_args: address review feedback
- use `T.cast` to avoid unnecessary error handling with Sorbet
- avoid using dashes in terminal output to make piping easier
2024-05-08 18:13:35 -07:00
apainintheneck
60149fb5de cli/named_args: improve message for casks/formulae without taps
This just improves the messaging in the `#to_formulae_and_casks_with_taps`
method so that users have a better idea of what to try next.

Ex.

```
Error: These formulae and casks are not in any locally installed taps!

- discord
- iterm2
- visual-studio-code
- zstd

You may need to run `brew tap` to install additional taps.
```
2024-05-07 21:22:58 -07:00
apainintheneck
ffc503f1d0 Fix cask source file path loading issues
There are two big changes here. Both have to do with how we want
to load casks in different scenarios. One also is related to formulae.

1. Prevent loading casks & formulae outside of taps for specific commands.

There are certain commands like `bump`, `bump-*-pr`, `livecheck` and `audit`
where it really makes no sense to try and run things if the specified formulae
or cask is not in a tap. A new `#to_formulae_and_casks_with_taps` method was
added to the `CLI::NamedArgs` class to allow us to easily grab and validate
formulae and casks from named arguments.

2. Always load the source file path when loading casks with the path loader.

There was an edge case where all JSON cask files were being loaded without
setting the source file path because most of the work was handed off to the
API loader where that normally would make more sense. Now we set that when
calling the API loader which solves the problem. This improves the user
experience of people using the `--cache` and `fetch` commands in certain
edge cases. Hopefully it makes the user experience a bit more consistent.

A regression test was added for this point.
2024-05-06 23:34:23 -07:00
Markus Reiter
0b56d0be4a
Document Tab.for_keg and use Keg#tab where possible. 2024-04-28 20:50:13 +02:00
Markus Reiter
0f0055ede4
Make documentation @api private by default. 2024-04-26 19:04:20 +02:00
apainintheneck
db507be41a keg: update sorting by version logic
This updates logic to add a `#scheme_and_version` method to be used
with `.sort_by` and `.max_by`. Using `Keg#version` by itself can be
inaccurate when different version schemes are present. This also
updates the behavior of `Formula#eligible_kegs_for_cleanup` to match
the previous behavior. We were dropping the wrong keg based on the
sort being reversed in a previous PR.
2024-03-31 17:52:32 -07:00
Bo Anderson
dd382487c7
Sort kegs based on version scheme 2024-03-29 23:33:41 +00:00
apainintheneck
ad35db4b24 tests: fix tests that make unexpected network calls
These were found with the Utils::Curl check and just turning
off the network on my computer and running the entire test suite.
2024-03-18 20:57:35 -07:00
Mike McQuaid
ea2892f8ee
brew.rb: handle missing args. 2024-03-07 16:20:20 +00:00
Markus Reiter
42652442af
Don't warn while checking for conflicting casks. 2024-03-06 23:30:34 +01:00
Markus Reiter
76d8d6c840
Add type signatures. 2024-02-08 16:30:08 +01:00
Issy Long
f682147598
Fix RuboCop Style/RedundantFreeze offenses 2024-01-18 22:20:01 +00:00
apainintheneck
779d90082d cli/parser: rescue formula specification errors
This came up recently where an outdated formula definition
caused the program to crash with an ambiguous message when
a user wanted to upgrade a cask instead. Catching these errors
allows them to get handled later on improving error messages
and defaults. Now if the only formula with the given name is
invalid it will default to using the cask unless --formula is
specified.

- https://github.com/Homebrew/brew/issues/16123
2023-10-21 17:15:26 -07:00
apainintheneck
23b277bbd7 cli/named_args: better handle name conflicts in #to_paths
Before we used to evaluate all named arguments as local paths
first. This means that the following could be a name conflict.

$ brew edit src

If there was a local file or directory named src, it would default
to that. Otherwise it would search for a formula/cask with the
same name and return that.

Now it will only default to the local path if the named argument
starts or ends with a slash ('/') or includes a period ('.').
This means that in the event of a name clash with a normal package
name it will default to the package instead of the local file.

It also fixes an edge case where the following would be interpreted
as a tap name.

$ brew edit /src
2023-10-01 15:51:02 -07:00
apainintheneck
b1c47969a6 cli/named_args: expand paths in #to_paths
This will make the output clearer for `brew edit --print-path`.
2023-09-27 23:16:20 -07:00
Bo Anderson
ba2ecede1a
cli/named_args: don't interpret --formula/--cask args as paths 2023-09-27 17:56:42 +01:00
Mike McQuaid
b3c33d34ab
Various sharding fixes
- Load paths with no API when needed (e.g. for `brew edit`)
- Use no API mode for `brew log` as it's needed there
- Define sharding format for homebrew-cask and homebrew-core inside
  `Tap` methods
- Create new formulae/casks in location defined by these `Tap` methods
- Fix a bug in Formulary that made sharded formulae lookup less
  efficient (and possibly broke it for core and some API usage)
- Fix various other hardcoded Formula/Cask directory assumptions

Co-authored-by: Bo Anderson <mail@boanderson.me>
2023-08-04 16:43:13 +01:00
Eric Knibbe
b3ecd91f97
dev-cmd/edit: suggest tapping core repositories 2023-08-01 13:39:28 -04:00
Bo Anderson
68289f1165
Add without_api specifier for CLI named args 2023-06-22 01:57:28 +01:00
Markus Reiter
486c3765ce
Add --os=all and --arch=all options. 2023-05-17 15:26:46 +02:00
Markus Reiter
a3231a03fa
Implement cask renames. 2023-05-12 21:17:30 +02:00
Douglas Eichelberger
08af78a2a5 brew style --fix 2023-04-25 09:26:24 -07:00
Douglas Eichelberger
24cf6076e8 brew style --fix 2023-04-24 20:42:39 -07:00
Douglas Eichelberger
04f7258009 brew style --fix 2023-03-13 11:24:49 -07:00
Douglas Eichelberger
e5a392c256 T.unsafe is now safe 2023-03-13 10:46:39 -07:00
Douglas Eichelberger
d98b7845d3 Enable typing in misc files 2023-03-03 08:29:26 -08:00
EricFromCanada
dfc9906184
internal messaging fixes 2023-02-10 23:17:16 -05:00
Rylan Polster
1e536217b2
Streamline loading casks from API 2022-06-15 16:35:49 -04:00
Bo Anderson
1d36c42fb7
Support offline usage under HOMEBREW_INSTALL_FROM_API 2022-06-14 16:06:05 -04:00
Bevan Kay
183cbe0001
named_args: handle additional cask exception 2022-06-02 12:21:44 +10:00
Mike McQuaid
fdefffc0a5
named_args: better handle keg-like casks.
Need to ensure we're using the installed caskfile when it's requested
and readable.

Follow-up from https://github.com/Homebrew/brew/pull/13289 addressing
https://github.com/Homebrew/brew/pull/13289#discussion_r884853652
2022-05-31 09:06:52 +01:00
Mike McQuaid
94148c3bc8
Fix handling unreadable casks
When casks are unreadable (e.g. have invalid syntax, the cask file
cannot be found) then it's not been possible to uninstall them, list
them or perform any operation which iterates through all casks.

Handle these various cases by falling back to creating a `Cask::Cask`
object using just the name/token and latest installed version on disk.

This provides enough functionality to be able to verbosely list these
casks, not error on listing and, most importantly, uninstall/reinstall
them.

Fixes https://github.com/Homebrew/homebrew-cask/issues/62223
2022-05-16 17:27:13 -04:00
Mike McQuaid
38e1b3d64b
Deprecations, disables, deletions for 3.4.0 2022-02-22 14:28:32 +00:00
fn ⌃ ⌥
9b611be759 Print given argument instead of rename if matching keg not found 2021-11-24 11:39:52 -08:00