From e12295849da2aac67cb7266f165a054a0a0ca5b7 Mon Sep 17 00:00:00 2001 From: Colin Dean <git@cad.cx> Date: Sun, 6 Jul 2014 11:41:03 -0400 Subject: [PATCH] Adds JSON output to `outdated` command 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. Closes Homebrew/homebrew#30693. Signed-off-by: Jack Nagel <jacknagel@gmail.com> --- Library/Contributions/brew_bash_completion.sh | 2 +- Library/Homebrew/cmd/outdated.rb | 38 +++++++++++++++---- Library/Homebrew/manpages/brew.1.md | 5 ++- share/man/man1/brew.1 | 5 ++- 4 files changed, 39 insertions(+), 11 deletions(-) diff --git a/Library/Contributions/brew_bash_completion.sh b/Library/Contributions/brew_bash_completion.sh index 9068ac0c74..75ecf2b136 100644 --- a/Library/Contributions/brew_bash_completion.sh +++ b/Library/Contributions/brew_bash_completion.sh @@ -395,7 +395,7 @@ _brew_outdated () local cur="${COMP_WORDS[COMP_CWORD]}" case "$cur" in --*) - __brewcomp "--quiet" + __brewcomp "--quiet --json=v1" return ;; esac diff --git a/Library/Homebrew/cmd/outdated.rb b/Library/Homebrew/cmd/outdated.rb index 6ae5254e55..10fa369533 100644 --- a/Library/Homebrew/cmd/outdated.rb +++ b/Library/Homebrew/cmd/outdated.rb @@ -3,14 +3,10 @@ require 'keg' module Homebrew def outdated - formulae = ARGV.resolved_formulae.any? ? ARGV.resolved_formulae : Formula.installed - - outdated = outdated_brews(formulae) do |f, versions| - if ($stdout.tty? || ARGV.verbose?) && !ARGV.flag?("--quiet") - puts "#{f.full_name} (#{versions*', '} < #{f.pkg_version})" - else - puts f.full_name - end + if ARGV.json == "v1" + outdated = print_outdated_json + else + outdated = print_outdated end Homebrew.failed = ARGV.resolved_formulae.any? && outdated.any? end @@ -37,4 +33,30 @@ module Homebrew end end.compact end + + def formulae_to_check + ARGV.resolved_formulae.any? ? ARGV.resolved_formulae : Formula.installed + end + + def print_outdated + outdated_brews(formulae_to_check) do |f, versions| + if ($stdout.tty? || ARGV.verbose?) && !ARGV.flag?("--quiet") + puts "#{f.full_name} (#{versions*', '} < #{f.pkg_version})" + else + puts f.full_name + end + end + end + + def print_outdated_json + json = [] + outdated = outdated_brews(formulae_to_check) do |f, versions| + json << {:name => f.name, + :installed_versions => versions.collect(&:to_s), + :current_version => f.pkg_version.to_s} + end + puts Utils::JSON.dump(json) + + outdated + end end diff --git a/Library/Homebrew/manpages/brew.1.md b/Library/Homebrew/manpages/brew.1.md index 4b3ef93f59..8ba9c66e9d 100644 --- a/Library/Homebrew/manpages/brew.1.md +++ b/Library/Homebrew/manpages/brew.1.md @@ -296,7 +296,7 @@ Note that these flags should only appear after a command. If `--installed` is passed, show options for all installed formulae. - * `outdated [--quiet|--verbose]`: + * `outdated [--quiet | --verbose | --json=v1 ]`: Show formulae that have an updated version available. By default, version information is displayed in interactive shells, and @@ -307,6 +307,9 @@ Note that these flags should only appear after a command. If `--verbose` is passed, display detailed version information. + If `--json=<version>` is passed, the output will be in JSON format. The only + valid version is `v1`. + * `pin` <formulae>: Pin the specified <formulae>, preventing them from being upgraded when issuing the `brew upgrade --all` command. See also `unpin`. diff --git a/share/man/man1/brew.1 b/share/man/man1/brew.1 index b91e6dec75..5a85119691 100644 --- a/share/man/man1/brew.1 +++ b/share/man/man1/brew.1 @@ -290,7 +290,7 @@ If \fB\-\-all\fR is passed, show options for all formulae\. If \fB\-\-installed\fR is passed, show options for all installed formulae\. . .IP "\(bu" 4 -\fBoutdated [\-\-quiet|\-\-verbose]\fR: Show formulae that have an updated version available\. +\fBoutdated [\-\-quiet | \-\-verbose | \-\-json=v1 ]\fR: Show formulae that have an updated version available\. . .IP By default, version information is displayed in interactive shells, and suppressed otherwise\. @@ -301,6 +301,9 @@ If \fB\-\-quiet\fR is passed, list only the names of outdated brews (takes prece .IP If \fB\-\-verbose\fR is passed, display detailed version information\. . +.IP +If \fB\-\-json=<version>\fR is passed, the output will be in JSON format\. The only valid version is \fBv1\fR\. +. .IP "\(bu" 4 \fBpin\fR \fIformulae\fR: Pin the specified \fIformulae\fR, preventing them from being upgraded when issuing the \fBbrew upgrade \-\-all\fR command\. See also \fBunpin\fR\. . -- GitLab