From 3f39a2867d692183d43a4a1fa33d62e5feaca41e Mon Sep 17 00:00:00 2001 From: Jeff Bonhag Date: Wed, 13 Nov 2019 13:44:51 -0500 Subject: [PATCH] Filter metadata versions by matching provider --- lib/vagrant/box_metadata.rb | 20 +++++++++++++++++--- plugins/commands/box/command/outdated.rb | 7 +------ test/unit/vagrant/box_metadata_test.rb | 5 +++++ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/lib/vagrant/box_metadata.rb b/lib/vagrant/box_metadata.rb index fe8e62cea..28388c7b6 100644 --- a/lib/vagrant/box_metadata.rb +++ b/lib/vagrant/box_metadata.rb @@ -68,11 +68,25 @@ module Vagrant # Returns all the versions supported by this metadata. These # versions are sorted so the last element of the list is the - # latest version. + # latest version. Optionally filter versions by a matching + # provider. # # @return[Array] - def versions - @version_map.keys.sort.map(&:to_s) + def versions(**opts) + provider = nil + provider = opts[:provider].to_sym if opts[:provider] + + if provider + @version_map.select do |version, raw| + if raw["providers"] + raw["providers"].detect do |p| + p["name"].to_sym == provider + end + end + end.keys.sort.map(&:to_s) + else + @version_map.keys.sort.map(&:to_s) + end end # Represents a single version within the metadata. diff --git a/plugins/commands/box/command/outdated.rb b/plugins/commands/box/command/outdated.rb index a08dcd913..dd814c93e 100644 --- a/plugins/commands/box/command/outdated.rb +++ b/plugins/commands/box/command/outdated.rb @@ -73,12 +73,7 @@ module VagrantPlugins end current = Gem::Version.new(box.version) - provider_latest = md.version(">= #{box.version}", provider: box.provider) - if provider_latest - latest = Gem::Version.new(provider_latest.version) - else - latest = Gem::Version.new(current) - end + latest = Gem::Version.new(md.versions(provider: box.provider).last) if latest <= current @env.ui.success(I18n.t( "vagrant.box_up_to_date", diff --git a/test/unit/vagrant/box_metadata_test.rb b/test/unit/vagrant/box_metadata_test.rb index de3950c3b..91f505239 100644 --- a/test/unit/vagrant/box_metadata_test.rb +++ b/test/unit/vagrant/box_metadata_test.rb @@ -115,6 +115,11 @@ describe Vagrant::BoxMetadata do expect(subject.versions).to eq( ["1.0.0", "1.1.0", "1.1.5"]) end + + it "filters versions by matching provider" do + expect(subject.versions(provider: :vmware)).to eq( + ["1.0.0", "1.1.0"]) + end end end