- 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>
Formula filenames are required to be lowercase, so the
extract command should downcase version before
using it to construct the filename. I noticed this while
extracting tbb@2020, which has version 2020_U3
and resulted in tbb@2020_U3.rb
- A friend got an error message when trying to use `brew extract` and it
wasn't immediately obvious to me why. The usage banner only mentioned
the "formula" argument, which they'd provided. This improves the error
message when there aren't enough arguments so that others have a
chance of figuring out how to use this command without having to look
at the code for `extract_args`.
Before:
```
➜ brew extract --version='1.4' libftdi
Usage: brew extract [--version=] [--force] formula ...
[...]
Error: Invalid usage: this command requires a formula argument
```
After:
```
➜ brew extract --version='1.4' libftdi
Usage: brew extract [options] formula tap
[...]
Error: Invalid usage: This command requires at least 2 named arguments.
```
- I don't like the "at least 2" phrasing here but that's a dive into the
arg parsing code that I don't have time for right now. An alternative
was `named_args [:formula, :destination_tap]`, but that gave the error
message "requires formula or destination_tap" which wasn't great
either. I also tried `min: 2, max: 2` and that was the same "at least
2" message.
- Make `brew extract` strip out bottle blocks
- Make `brew extract` output the path in a readable fashion
- Warn about building from source before fetching (not installing)
- If fetching a bottle fails, refetch and build from source.
I was wanting to do this today to add `ruby@2.6` and it's a social
rather than technical requirement (i.e. we don't want users to mess
with their homebrew/core unless they know what they are doing) so allow
overriding with `HOMEBREW_DEVELOPER` set.
Turn the output versioned formula from the form "name@version" to
"name-version", then following by appending the specific version
after it.
This solution ensures that separate extracted versions of a formulae
can exist alongside each other (e.g. 'python-2@2.7.17' and
'python-2@2.7.16').