Filter metadata versions by matching provider

This commit is contained in:
Jeff Bonhag 2019-11-13 13:44:51 -05:00
parent 643a6a5bc6
commit 3f39a2867d
3 changed files with 23 additions and 9 deletions

View File

@ -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<String>]
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.

View File

@ -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",

View File

@ -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