Merge pull request #7440 from FTLam11/FTLam11-#7432-add-json-option-to-brew-cask-outdated

Add JSON support for brew cask outdated, fixes #7432
This commit is contained in:
Mike McQuaid 2020-04-29 11:40:22 +01:00 committed by GitHub
commit e8a29a2d72
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 123 additions and 16 deletions

View File

@ -122,6 +122,22 @@ module Cask
installed.reject { |v| v == version } installed.reject { |v| v == version }
end end
def outdated_info(greedy, verbose, json)
return token if !verbose && !json
installed_versions = outdated_versions(greedy).join(", ")
if json
{
name: token,
installed_versions: installed_versions,
current_version: version,
}
else
"#{token} (#{installed_versions}) != #{version}"
end
end
def to_s def to_s
@token @token
end end

View File

@ -5,30 +5,21 @@ module Cask
class Outdated < AbstractCommand class Outdated < AbstractCommand
option "--greedy", :greedy, false option "--greedy", :greedy, false
option "--quiet", :quiet, false option "--quiet", :quiet, false
option "--json", :json, false
def initialize(*) def initialize(*)
super super
self.verbose = ($stdout.tty? || verbose?) && !quiet? self.verbose = ($stdout.tty? || verbose?) && !quiet?
@outdated_casks = casks(alternative: -> { Caskroom.casks }).select do |cask|
odebug "Checking update info of Cask #{cask}"
cask.outdated?(greedy?)
end
end end
def run def run
casks(alternative: -> { Caskroom.casks }).each do |cask| output = @outdated_casks.map { |cask| cask.outdated_info(greedy?, verbose?, json?) }
odebug "Checking update info of Cask #{cask}"
self.class.list_if_outdated(cask, greedy?, verbose?)
end
end
def self.list_if_outdated(cask, greedy, verbose) puts json? ? JSON.generate(output) : output
return unless cask.outdated?(greedy)
if verbose
outdated_versions = cask.outdated_versions(greedy)
outdated_info = "#{cask.token} (#{outdated_versions.join(", ")})"
current_version = cask.version.to_s
puts "#{outdated_info} != #{current_version}"
else
puts cask.token
end
end end
def self.help def self.help

View File

@ -88,4 +88,104 @@ describe Cask::Cmd::Outdated, :cask do
EOS EOS
end end
end end
describe "--json" do
it "lists outdated Casks in JSON format" do
result = [
{
name: "local-caffeine",
installed_versions: "1.2.2",
current_version: "1.2.3",
},
{
name: "local-transmission",
installed_versions: "2.60",
current_version: "2.61",
},
].to_json
expect {
described_class.run("--json")
}.to output(result + "\n").to_stdout
end
end
describe "--json overrides --quiet" do
it "ignores --quiet and lists outdated Casks in JSON format" do
result = [
{
name: "local-caffeine",
installed_versions: "1.2.2",
current_version: "1.2.3",
},
{
name: "local-transmission",
installed_versions: "2.60",
current_version: "2.61",
},
].to_json
expect {
described_class.run("--json", "--quiet")
}.to output(result + "\n").to_stdout
end
end
describe "--json and --greedy" do
it 'includes the Casks with "auto_updates true" or "version latest" in JSON format' do
result = [
{
name: "auto-updates",
installed_versions: "2.57",
current_version: "2.61",
},
{
name: "local-caffeine",
installed_versions: "1.2.2",
current_version: "1.2.3",
},
{
name: "local-transmission",
installed_versions: "2.60",
current_version: "2.61",
},
{
name: "version-latest-string",
installed_versions: "latest",
current_version: "latest",
},
].to_json
expect {
described_class.run("--json", "--greedy")
}.to output(result + "\n").to_stdout
end
it 'does not include the Casks with "auto_updates true" with no version change in JSON format' do
cask = Cask::CaskLoader.load(cask_path("auto-updates"))
InstallHelper.install_with_caskfile(cask)
result = [
{
name: "local-caffeine",
installed_versions: "1.2.2",
current_version: "1.2.3",
},
{
name: "local-transmission",
installed_versions: "2.60",
current_version: "2.61",
},
{
name: "version-latest-string",
installed_versions: "latest",
current_version: "latest",
},
].to_json
expect {
described_class.run("--json", "--greedy")
}.to output(result + "\n").to_stdout
end
end
end end