Skip to content
Snippets Groups Projects
Unverified Commit e5fe57c1 authored by nandahkrishna's avatar nandahkrishna
Browse files

Migrate livecheck to Homebrew/brew

parent 44c826ea
No related branches found
No related tags found
No related merge requests found
# frozen_string_literal: true
require "cli/parser"
require "formula"
require "livecheck/livecheck"
require "livecheck/strategy"
module Homebrew
module_function
WATCHLIST_PATH = (
ENV["HOMEBREW_LIVECHECK_WATCHLIST"] ||
Pathname.new(Dir.home)/".brew_livecheck_watchlist"
).freeze
def livecheck_args
Homebrew::CLI::Parser.new do
usage_banner <<~EOS
`livecheck` [<formulae>]
Check for newer versions of formulae from upstream.
If no formula argument is passed, the list of formulae to check is taken from `HOMEBREW_LIVECHECK_WATCHLIST`
or `~/.brew_livecheck_watchlist`.
EOS
switch "--full-name",
description: "Print formulae with fully-qualified names."
flag "--tap=",
description: "Check the formulae within the given tap, specified as <user>`/`<repo>."
switch "--installed",
description: "Check formulae that are currently installed."
switch "--json",
description: "Output informations in JSON format."
switch "--all",
description: "Check all available formulae."
switch "--newer-only",
description: "Show the latest version only if it's newer than the formula."
conflicts "--debug", "--json"
conflicts "--tap=", "--all", "--installed"
end
end
def livecheck
args = livecheck_args.parse
if args.debug? && args.verbose?
puts args
puts ENV["HOMEBREW_LIVECHECK_WATCHLIST"] if ENV["HOMEBREW_LIVECHECK_WATCHLIST"].present?
end
formulae_to_check = if args.tap
Tap.fetch(args.tap).formula_names.map { |name| Formula[name] }
elsif args.installed?
Formula.installed
elsif args.all?
Formula
elsif args.formulae.present?
args.formulae
elsif File.exist?(WATCHLIST_PATH)
begin
WATCHLIST_PATH.read.lines.map do |line|
next if line.start_with?("#")
Formula[line.strip]
end.compact
rescue Errno::ENOENT => e
onoe e
end
end
raise UsageError, "No formulae to check." if formulae_to_check.blank?
Livecheck.livecheck_formulae(formulae_to_check, args)
end
end
...@@ -173,6 +173,11 @@ module Homebrew ...@@ -173,6 +173,11 @@ module Homebrew
default_text: 'The "Beer Mug" emoji.', default_text: 'The "Beer Mug" emoji.',
default: "🍺", default: "🍺",
}, },
HOMEBREW_LIVECHECK_WATCHLIST: {
description: "Use this file to get the list of default Formulae to check when no Formula argument " \
"is passed to `brew livecheck`",
default: "$HOME/.brew_livecheck_watchlist",
},
HOMEBREW_LOGS: { HOMEBREW_LOGS: {
description: "Use the specified directory to store log files.", description: "Use the specified directory to store log files.",
default_text: "macOS: `$HOME/Library/Logs/Homebrew`, "\ default_text: "macOS: `$HOME/Library/Logs/Homebrew`, "\
......
...@@ -23,6 +23,7 @@ DEPRECATED_OFFICIAL_TAPS = %w[ ...@@ -23,6 +23,7 @@ DEPRECATED_OFFICIAL_TAPS = %w[
games games
gui gui
head-only head-only
livecheck
nginx nginx
php php
python python
......
...@@ -75,6 +75,7 @@ RSpec/MultipleDescribes: ...@@ -75,6 +75,7 @@ RSpec/MultipleDescribes:
- 'dev-cmd/formula_spec.rb' - 'dev-cmd/formula_spec.rb'
- 'dev-cmd/irb_spec.rb' - 'dev-cmd/irb_spec.rb'
- 'dev-cmd/linkage_spec.rb' - 'dev-cmd/linkage_spec.rb'
- 'dev-cmd/livecheck_spec.rb'
- 'dev-cmd/pull_spec.rb' - 'dev-cmd/pull_spec.rb'
- 'dev-cmd/ruby_spec.rb' - 'dev-cmd/ruby_spec.rb'
- 'dev-cmd/sh_spec.rb' - 'dev-cmd/sh_spec.rb'
......
# frozen_string_literal: true
require "cmd/shared_examples/args_parse"
describe "Homebrew.livecheck_args" do
it_behaves_like "parseable arguments"
end
describe "brew livecheck", :integration_test do
it "reports the latest version of a Formula", :needs_network do
content = <<~RUBY
desc "Some test"
homepage "https://github.com/Homebrew/brew"
url "https://brew.sh/test-1.0.0.tgz"
RUBY
setup_test_formula("test", content)
expect { brew "livecheck", "test" }
.to output(/test : /).to_stdout
.and not_to_output.to_stderr
.and be_a_success
end
end
...@@ -352,6 +352,17 @@ _brew_list() { ...@@ -352,6 +352,17 @@ _brew_list() {
fi fi
} }
_brew_livecheck() {
local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in
-*)
__brewcomp "--verbose --quiet --debug --full-name --tap --installed --json --all --newer-only --help"
return
;;
esac
__brew_complete_formulae
}
_brew_log() { _brew_log() {
# if git-completion is loaded, then we complete git-log options # if git-completion is loaded, then we complete git-log options
declare -F _git_log >/dev/null || return declare -F _git_log >/dev/null || return
...@@ -860,6 +871,7 @@ _brew() { ...@@ -860,6 +871,7 @@ _brew() {
irb) _brew_irb ;; irb) _brew_irb ;;
link|ln) _brew_link ;; link|ln) _brew_link ;;
list|ls) _brew_list ;; list|ls) _brew_list ;;
livecheck) _brew_livecheck ;;
log) _brew_log ;; log) _brew_log ;;
man) _brew_man ;; man) _brew_man ;;
missing) __brew_complete_formulae ;; missing) __brew_complete_formulae ;;
......
...@@ -446,6 +446,20 @@ __fish_brew_complete_arg 'list ls; ...@@ -446,6 +446,20 @@ __fish_brew_complete_arg 'list ls;
' -l multiple -d "Only show formulae with multiple versions" ' -l multiple -d "Only show formulae with multiple versions"
__fish_brew_complete_cmd 'livecheck' "Check for newer versions of formulae from upstream"
__fish_brew_complete_arg 'livecheck' -a '(__fish_brew_suggest_formulae_all)'
__fish_brew_complete_arg 'livecheck' -s v -l verbose -d "Make some output more verbose"
__fish_brew_complete_arg 'livecheck' -s q -l quiet -d "Suppress any warnings"
__fish_brew_complete_arg 'livecheck' -s d -l debug -d "Display any debugging information"
__fish_brew_complete_arg 'livecheck' -l full-name -d "Print formulae with fully-qualified name"
__fish_brew_complete_arg 'livecheck' -l tap -d "Check the formulae within the given tap, specified as user/repo"
__fish_brew_complete_arg 'livecheck' -l installed -d "Check formulae that are currently installed"
__fish_brew_complete_arg 'livecheck' -l json -d "Output information in JSON format"
__fish_brew_complete_arg 'livecheck' -l all -d "Check all available formulae"
__fish_brew_complete_arg 'livecheck' -l newer-only -d "Show the latest version only if it is newer than the formula"
__fish_brew_complete_arg 'livecheck' -s h -l help -d "Show the help message"
__fish_brew_complete_cmd 'log' "Show git log for formula" __fish_brew_complete_cmd 'log' "Show git log for formula"
__fish_brew_complete_arg 'log' -a '(__fish_brew_suggest_formulae_all)' __fish_brew_complete_arg 'log' -a '(__fish_brew_suggest_formulae_all)'
......
...@@ -47,6 +47,7 @@ leaves ...@@ -47,6 +47,7 @@ leaves
link link
linkage linkage
list list
livecheck
ln ln
log log
ls ls
......
...@@ -504,6 +504,23 @@ _brew_list() { ...@@ -504,6 +504,23 @@ _brew_list() {
'*:: :__brew_installed_formulae' '*:: :__brew_installed_formulae'
} }
# brew livecheck [--verbose] [--quiet] [--debug] [--full-name] [--tap user/repo]
# [--installed] [--json] [--all] [--newer-only] formulae
_brew_livecheck() {
_arguments \
'(--verbose,-v)'{--verbose,-v}'[Make some output more verbose]' \
'(--quiet,-q)'{--quiet,-q}'[Suppress any warnings]' \
'(--debug,-d)'{--debug,-d}'[Display any debugging information]' \
'--full-name[Print formulae with fully-qualified name]' \
'--tap[Check the formulae within the given tap, specified as user/repo]' \
'--installed[Check formulae that are currently installed]' \
'--json[Output information in JSON format]' \
'--all[Check all available formulae]' \
'--newer-only[Show the latest version only if it is newer than the formula]' \
'(--help,-h)'{--help,-h}'[Show the help message]' \
'*:: :__brew_formulae'
}
# brew log [git-log-options] formula ...: # brew log [git-log-options] formula ...:
_brew_log() { _brew_log() {
__brew_formulae __brew_formulae
......
...@@ -992,6 +992,26 @@ provided, check all kegs. Raises an error if run on uninstalled formulae. ...@@ -992,6 +992,26 @@ provided, check all kegs. Raises an error if run on uninstalled formulae.
* `--cached`: * `--cached`:
Print the cached linkage values stored in `HOMEBREW_CACHE`, set by a previous `brew linkage` run. Print the cached linkage values stored in `HOMEBREW_CACHE`, set by a previous `brew linkage` run.
### `livecheck` [*`formulae`*]
Check for newer versions of formulae from upstream.
If no formula argument is passed, the list of formulae to check is taken from `HOMEBREW_LIVECHECK_WATCHLIST`
or `~/.brew_livecheck_watchlist`.
* `--full-name`:
Print formulae with fully-qualified names.
* `--tap`:
Check the formulae within the given tap, specified as *`user`*`/`*`repo`*.
* `--installed`:
Check formulae that are currently installed.
* `--json`:
Output informations in JSON format.
* `--all`:
Check all available formulae.
* `--newer-only`:
Show the latest version only if it's newer than the formula.
### `man` [*`options`*] ### `man` [*`options`*]
Generate Homebrew's manpages. Generate Homebrew's manpages.
...@@ -1591,6 +1611,11 @@ For example, you might add something like the following to your ~/.profile, ~/.b ...@@ -1591,6 +1611,11 @@ For example, you might add something like the following to your ~/.profile, ~/.b
*Default:* The "Beer Mug" emoji. *Default:* The "Beer Mug" emoji.
* `HOMEBREW_LIVECHECK_WATCHLIST`:
Use this file to get the list of default Formulae to check when no Formula argument is passed to `brew livecheck`
*Default:* `$HOME/.brew_livecheck_watchlist`.
* `HOMEBREW_LOGS`: * `HOMEBREW_LOGS`:
Use the specified directory to store log files. Use the specified directory to store log files.
......
...@@ -1362,6 +1362,36 @@ For every library that a keg references, print its dylib path followed by the bi ...@@ -1362,6 +1362,36 @@ For every library that a keg references, print its dylib path followed by the bi
\fB\-\-cached\fR \fB\-\-cached\fR
Print the cached linkage values stored in \fBHOMEBREW_CACHE\fR, set by a previous \fBbrew linkage\fR run\. Print the cached linkage values stored in \fBHOMEBREW_CACHE\fR, set by a previous \fBbrew linkage\fR run\.
. .
.SS "\fBlivecheck\fR [\fIformulae\fR]"
Check for newer versions of formulae from upstream\.
.
.P
If no formula argument is passed, the list of formulae to check is taken from \fBHOMEBREW_LIVECHECK_WATCHLIST\fR or \fB~/\.brew_livecheck_watchlist\fR\.
.
.TP
\fB\-\-full\-name\fR
Print formulae with fully\-qualified names\.
.
.TP
\fB\-\-tap\fR
Check the formulae within the given tap, specified as \fIuser\fR\fB/\fR\fIrepo\fR\.
.
.TP
\fB\-\-installed\fR
Check formulae that are currently installed\.
.
.TP
\fB\-\-json\fR
Output informations in JSON format\.
.
.TP
\fB\-\-all\fR
Check all available formulae\.
.
.TP
\fB\-\-newer\-only\fR
Show the latest version only if it\'s newer than the formula\.
.
.SS "\fBman\fR [\fIoptions\fR]" .SS "\fBman\fR [\fIoptions\fR]"
Generate Homebrew\'s manpages\. Generate Homebrew\'s manpages\.
. .
...@@ -2181,6 +2211,13 @@ Print this text before the installation summary of each successful build\. ...@@ -2181,6 +2211,13 @@ Print this text before the installation summary of each successful build\.
\fIDefault:\fR The "Beer Mug" emoji\. \fIDefault:\fR The "Beer Mug" emoji\.
. .
.TP .TP
\fBHOMEBREW_LIVECHECK_WATCHLIST\fR
Use this file to get the list of default Formulae to check when no Formula argument is passed to \fBbrew livecheck\fR
.
.IP
\fIDefault:\fR \fB$HOME/\.brew_livecheck_watchlist\fR\.
.
.TP
\fBHOMEBREW_LOGS\fR \fBHOMEBREW_LOGS\fR
Use the specified directory to store log files\. Use the specified directory to store log files\.
. .
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment