This commit checks the local box collection to see if the latest box update has already been downloaded. If it has, Vagrant will display the destroy/recreate message instead of the "run vagrant update" message.
This commit is contained in:
parent
2eaa6e9be1
commit
a39a7ae794
|
@ -70,15 +70,23 @@ module Vagrant
|
||||||
message: e.message))
|
message: e.message))
|
||||||
end
|
end
|
||||||
env[:box_outdated] = update != nil
|
env[:box_outdated] = update != nil
|
||||||
if update
|
local_update = check_outdated_local(env)
|
||||||
|
if update && (local_update.nil? || (local_update.version < update[1].version))
|
||||||
env[:ui].warn(I18n.t(
|
env[:ui].warn(I18n.t(
|
||||||
"vagrant.box_outdated_single",
|
"vagrant.box_outdated_single",
|
||||||
name: update[0].name,
|
name: update[0].name,
|
||||||
provider: box.provider,
|
provider: box.provider,
|
||||||
current: box.version,
|
current: box.version,
|
||||||
latest: update[1].version))
|
latest: update[1].version))
|
||||||
|
elsif local_update
|
||||||
|
env[:ui].warn(I18n.t(
|
||||||
|
"vagrant.box_outdated_local",
|
||||||
|
name: local_update.name,
|
||||||
|
old: box.version,
|
||||||
|
new: local_update.version))
|
||||||
|
env[:box_outdated] = true
|
||||||
else
|
else
|
||||||
check_outdated_local(env)
|
env[:box_outdated] = false
|
||||||
end
|
end
|
||||||
|
|
||||||
@app.call(env)
|
@app.call(env)
|
||||||
|
@ -93,19 +101,8 @@ module Vagrant
|
||||||
version ||= ""
|
version ||= ""
|
||||||
version += "> #{machine.box.version}"
|
version += "> #{machine.box.version}"
|
||||||
|
|
||||||
box = env[:box_collection].find(
|
env[:box_collection].find(
|
||||||
machine.box.name, machine.box.provider, version)
|
machine.box.name, machine.box.provider, version)
|
||||||
if box
|
|
||||||
env[:ui].warn(I18n.t(
|
|
||||||
"vagrant.box_outdated_local",
|
|
||||||
name: box.name,
|
|
||||||
old: machine.box.version,
|
|
||||||
new: box.version))
|
|
||||||
env[:box_outdated] = true
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
env[:box_outdated] = false
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -141,6 +141,41 @@ describe Vagrant::Action::Builtin::BoxCheckOutdated do
|
||||||
expect(env[:box_outdated]).to be(true)
|
expect(env[:box_outdated]).to be(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "both local and remote update exist" do
|
||||||
|
it "should prompt user to update" do
|
||||||
|
iso_env.box3("foo", "1.1", :virtualbox)
|
||||||
|
|
||||||
|
md = Vagrant::BoxMetadata.new(StringIO.new(<<-RAW))
|
||||||
|
{
|
||||||
|
"name": "foo",
|
||||||
|
"versions": [
|
||||||
|
{
|
||||||
|
"version": "1.2",
|
||||||
|
"providers": [
|
||||||
|
{
|
||||||
|
"name": "virtualbox",
|
||||||
|
"url": "bar"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
RAW
|
||||||
|
|
||||||
|
expect(box).to receive(:has_update?).with(machine.config.vm.box_version,
|
||||||
|
{download_options:
|
||||||
|
{automatic_check: true, ca_cert: nil, ca_path: nil, client_cert: nil, insecure: false}}).
|
||||||
|
and_return([md, md.version("1.2"), md.version("1.2").provider("virtualbox")])
|
||||||
|
|
||||||
|
allow(I18n).to receive(:t) { :ok }
|
||||||
|
expect(I18n).to receive(:t).with(/box_outdated_single/, hash_including(latest: "1.2")).once
|
||||||
|
|
||||||
|
expect(app).to receive(:call).with(env).once
|
||||||
|
|
||||||
|
subject.call(env)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "does not have a local update if not within constraints" do
|
it "does not have a local update if not within constraints" do
|
||||||
iso_env.box3("foo", "1.1", :virtualbox)
|
iso_env.box3("foo", "1.1", :virtualbox)
|
||||||
|
|
||||||
|
@ -227,4 +262,21 @@ describe Vagrant::Action::Builtin::BoxCheckOutdated do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe ".check_outdated_local" do
|
||||||
|
let(:updated_box) do
|
||||||
|
box_dir = iso_env.box3("foo", "1.1", :virtualbox)
|
||||||
|
Vagrant::Box.new("foo", :virtualbox, "1.1", box_dir).tap do |b|
|
||||||
|
allow(b).to receive(:has_update?).and_return(nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should return the updated box if it is already installed" do
|
||||||
|
expect(env[:box_collection]).to receive(:find).with("foo", :virtualbox, "> 1.0").and_return(updated_box)
|
||||||
|
|
||||||
|
local_update = subject.check_outdated_local(env)
|
||||||
|
|
||||||
|
expect(local_update).to eq(updated_box)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue