core: error if newer home dir version is detected

This commit is contained in:
Mitchell Hashimoto 2014-01-22 11:25:36 -08:00
parent b52d33e0af
commit 6cddb92407
4 changed files with 24 additions and 31 deletions

View File

@ -642,6 +642,10 @@ module Vagrant
version_file = @home_path.join("setup_version") version_file = @home_path.join("setup_version")
if version_file.file? if version_file.file?
version = version_file.read version = version_file.read
if version > CURRENT_SETUP_VERSION
raise Errors::HomeDirectoryLaterVersion
end
case version case version
when CURRENT_SETUP_VERSION when CURRENT_SETUP_VERSION
# We're already good, at the latest version. # We're already good, at the latest version.

View File

@ -260,6 +260,10 @@ module Vagrant
error_key(:environment_locked) error_key(:environment_locked)
end end
class HomeDirectoryLaterVersion < VagrantError
error_key(:home_dir_later_version)
end
class HomeDirectoryNotAccessible < VagrantError class HomeDirectoryNotAccessible < VagrantError
error_key(:home_dir_not_accessible) error_key(:home_dir_not_accessible)
end end

View File

@ -432,6 +432,11 @@ en:
as mounting shared folders and configuring networks. Please add as mounting shared folders and configuring networks. Please add
the ability to detect this guest operating system to Vagrant the ability to detect this guest operating system to Vagrant
by creating a plugin or reporting a bug. by creating a plugin or reporting a bug.
home_dir_later_version: |-
It appears that a newer version of Vagrant was run on this machine
at some point. The current version of Vagrant is unable to read
the configuration structure of this newer version. Please upgrade to
the latest version of Vagrant.
home_dir_not_accessible: |- home_dir_not_accessible: |-
The home directory you specified is not accessible. The home The home directory you specified is not accessible. The home
directory that Vagrant uses must be both readable and writable. directory that Vagrant uses must be both readable and writable.

View File

@ -69,6 +69,17 @@ describe Vagrant::Environment do
end end
end end
it "raises an exception if the version is newer than ours" do
Dir.mktmpdir do |dir|
Pathname.new(dir).join("setup_version").open("w") do |f|
f.write("100.5")
end
expect { described_class.new(home_path: dir) }.
to raise_error(Vagrant::Errors::HomeDirectoryLaterVersion)
end
end
it "raises an exception if there is an unknown home directory version" do it "raises an exception if there is an unknown home directory version" do
Dir.mktmpdir do |dir| Dir.mktmpdir do |dir|
Pathname.new(dir).join("setup_version").open("w") do |f| Pathname.new(dir).join("setup_version").open("w") do |f|
@ -105,37 +116,6 @@ describe Vagrant::Environment do
collection.should_receive(:upgrade_v1_1_v1_5).once collection.should_receive(:upgrade_v1_1_v1_5).once
subject subject
end end
=begin
# Create all the old box directories
boxdir = env.homedir.join("boxes")
boxdir.mkpath
foo_path = boxdir.join("foo", "virtualbox")
vbox_path = boxdir.join("precise64", "virtualbox")
vmware_path = boxdir.join("precise64", "vmware")
v1_path = boxdir.join("v1box")
[foo_path, vbox_path, vmware_path].each do |path|
path.mkpath
path.join("name").open("w") do |f|
f.write(path.to_s)
end
end
v1_path.mkpath
v1_path.join("name").open("w") { |f| f.write("v1box") }
# Upgrade!
subject
expect(boxdir).to be_directory
expect(boxdir.children(false).map(&:to_s).sort).to eq(
["foo", "precise64", "v1box"])
expect(foo_path).to_not exist
expect(vbox_path).to_not exist
expect(vmware_path).to_not exist
expect(v1_path).to_not exist
=end
end end
end end