Filter metadata versions by matching provider
This commit is contained in:
parent
643a6a5bc6
commit
3f39a2867d
|
@ -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.
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue