Introduce `--fetch-HEAD` option. Without this option upgrade and
outdated never fetch latest upstream commit to detect if HEAD is
outdated -- tabs are used instead. However, if option is passed,
we fetch commit from upstream, which is more time consuming,
but we can be sure that version is up-to-date or outdated.
`any?` is not the opposite of `empty?`. Besides the case that
`[false, nil].any?` will return false, `any?`(O(n)) has much worse
performance than `empty?`(O(1)).
After some musing on brunophilipe/Cakebrew#71, I thought it would
be useful to let Cakebrew and other tools grab the outdated formulae
version information using a method more elegant than regex.
ClosesHomebrew/homebrew#30693.
Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Previously if I did `brew install boxen/brews/imagemagick` and then `brew
upgrade boxen/brews/imagemagick` and the version of `imagemagick` in
`boxen/brews` was older than the version in `Homebrew/homebrew` then it would
install the correct version from the `boxen/brews` tap and then try to
immediately upgrade it to the version from `Homebrew/homebrew`. I'd argue
fairly strongly that this behaviour is pretty unintuitive; when you fully
specify a formula from a tap then it should be prioritised by `brew upgrade`
and `brew outdated.
This commit makes `brew upgrade boxen/brews/imagemagick` only upgrade the
version of `imagemagick` if the version in the `boxen/brews` tap is newer.
Similarly `brew outdated imagemagick` and `brew outdated
boxen/brews/imagemagick` will show different results if the newer version
differs between `boxen/brews` and `Homebrew/homebrew`.
ClosesHomebrew/homebrew#36699.
Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
If formulae names are passed as arguments check if just they are outdated. Additionally, return a failed code if they are outdated.
This will hopefully be able to stop people complaining about the outdated error code as they can now just run e.g.:
`brew outdated git && brew upgrade git`
ClosesHomebrew/homebrew#31242.
Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
It is possible for the object returned by Formula#version to be a
subclass of Version with special behavior, so we want to use that for
the comparison.
Previously, `outdated_brews` returned a list of lists---each containing three
components of a Formula object:
- f.rack
- f.name
- f.version
Frequently more information is required which necessitates back-casting from
`name` to a Formula object---simpy returning formula objects removes this step.
The code was sucking. To the extent that maintenance was hard. It's a lot
easier to work with code that is sensibly split at sensible boundaries. So
now it is more like that.
But the refactor is minimal. Because we don't want you to have more merge
hell than absolutely necessary.
If you merge you will need to pay attention to brew.h.rb (as it is deleted)
and bin/brew (as command logic is gone). It will be painful, but you will just
have to help git out by moving any changes around manually.
Note compatibility.rb. It ensures that any function renames or removals don't
break anything. We're pretty serious about backwards compatibility. And that's
because we encourage you to hack around with the innards. And we couldn't do
that if we would then just make stuff disappear behind your back.