14 Commits

Author SHA1 Message Date
Mike McQuaid
774ef54981
Improve Download Queue output
Update the naming, presence and values for various download queue
methods to improve the output for users while making the internal code
a little easier to follow.

While we're here, also ensure that a single formula download still
displays the download queue output and indirectly fix an issue with
bottle manifests being named incorrectly.
2025-08-04 15:51:02 +01:00
Mike McQuaid
ebd4ad6077
download_queue: fix patch handling.
These were being downloaded twice simultaneously which causes a locking
race condition.

While we're here, also improve the output of bottle manifests and
patches in the download queue.
2025-08-01 16:57:47 +01:00
Mike McQuaid
d3a9525fd7
retryable_download: ensure HOMEBREW_CELLAR exists. 2025-07-29 12:19:38 +01:00
Mike McQuaid
ed5805e50c
Add JSON API download strategy for download queue
This fixes the weird/broken existing behaviour which was incorrectly
creating symlinks at download time. It also defers much more logic to
the original code.

For clarity, rename the existing `API::Download` class to
`API::SourceDownload`.

While we're here:
- add a/improve the `download_type` method on all `Downloadable`
  subclasses to improve download queue output format
- move some logic to `RetryDownload`
2025-07-22 17:48:32 +01:00
Mike McQuaid
2a5c37cfdd
retryable_download: retry on bottle manifest errors.
This is needed in case these files are e.g. corrupt.
2025-07-21 15:07:19 +01:00
Mike McQuaid
36c7f4950c
Optionally parallelise API file downloads
This assumes that all should be downloaded (at least once) on `brew`
commands being run.

Requires a certain amount of cleanup and refactoring around our API
handling and Tap migration methods (which were both weirdly placed and
in some cases broken).

Behaviour without `HOMEBREW_DOWNLOAD_CONCURRENCY` set should
be unchanged.
2025-07-18 15:01:34 +01:00
Mike McQuaid
5cc6722372
Optionally use DownloadQueue for brew install
Allowing using `HOMEBREW_DOWNLOAD_CONCURRENCY` to use the
`DownloadQueue` for `brew install` by downloading and extracting
bottles in parallel.

This requires some fixes in e.g. `Dependency` and `FormulaInstaller`
to be able to front-load all downloads and handle parallelisation of
bottle pouring.

Behaviour without `HOMEBREW_DOWNLOAD_CONCURRENCY` set should be
unchanged.

Attestations are not handled for now and the UI should be improved
before we roll this out to users.

Post-install upgrades are not yet parallelised.

Co-authored-by: Carlo Cabrera <github@carlo.cab>
2025-07-18 15:00:23 +01:00
Mike McQuaid
a3d6ee1d2a
Refactor DownloadQueue handling
- Use undocumented (for now) `HOMEBREW_DOWNLOAD_CONCURRENCY` instead
  of `--concurrency` flag and avoid passing around `concurrency`
- Create and use `Formula#enqueue_resources_and_patches` helper method
- Rename some method calls to be more obvious
- Use `Downloadable` type to simplify type checks
- General refactoring
2025-07-17 17:49:53 +01:00
Mike McQuaid
f4e629331f
Move more logic from cmd/fetch to download_queue
This is the first step towards using the download queue for all
download operations e.g. `brew install`, `brew upgrade`,
`brew reinstall` etc.

While we're here, do some API cleanup and Sorbet type improvements.
2025-07-11 16:57:41 +01:00
Bo Anderson
35f874c036
Cleanup Downloadable variables and types 2025-04-23 03:30:15 +01:00
Douglas Eichelberger
e58486cd4c
fix: Allow Formula.url with no args to get url 2025-03-26 12:15:25 -07:00
Markus Reiter
f41d2516ce
Fix type signatures. 2024-09-04 22:54:21 +02:00
Markus Reiter
b6d529dab3
Convert Downloadable to a module. 2024-09-04 22:54:21 +02:00
Markus Reiter
b297be77a1
Implement concurrent downloads. 2024-09-04 22:54:20 +02:00