Adding a box that already exists should result in an exception.

This commit is contained in:
Mitchell Hashimoto 2012-07-01 21:46:16 -07:00
parent 9cb0015b6e
commit 9e33d16ca1
2 changed files with 23 additions and 2 deletions

View File

@ -23,6 +23,9 @@ module Vagrant
# This adds a new box to the system. # This adds a new box to the system.
# #
# There are some exceptional cases: # There are some exceptional cases:
# * BoxAlreadyExists - The box you're attempting to add already exists.
# * BoxProviderDoesntMatch - If the given box provider doesn't match the
# actual box provider in the untarred box.
# #
# Preconditions: # Preconditions:
# * File given in `path` must exist. # * File given in `path` must exist.
@ -33,9 +36,14 @@ module Vagrant
# will be verified with the `metadata.json` file in the box and is # will be verified with the `metadata.json` file in the box and is
# meant as a basic check. # meant as a basic check.
def add(path, name, provider) def add(path, name, provider)
@logger.debug("Adding box: #{name} (#{provider}) from #{path}")
if find(name, provider)
@logger.error("Box already exists, can't add: #{name} #{provider}")
raise Errors::BoxAlreadyExists, :name => name, :provider => provider
end
box_dir = @directory.join(name, provider.to_s) box_dir = @directory.join(name, provider.to_s)
@logger.debug("Adding box: #{path}") @logger.debug("New box directory: #{box_dir}")
@logger.debug("Box directory: #{box_dir}")
# Create the directory that'll store our box # Create the directory that'll store our box
box_dir.mkpath box_dir.mkpath

View File

@ -24,6 +24,19 @@ describe Vagrant::BoxCollection2 do
box.should_not be_nil box.should_not be_nil
end end
it "should raise an exception if the box already exists" do
prev_box_name = "foo"
prev_box_provider = :virtualbox
# Create the box we're adding
environment.box2(prev_box_name, prev_box_provider)
# Attempt to add the box with the same name
box_path = environment.box2_file(prev_box_provider)
expect { instance.add(box_path, prev_box_name, prev_box_provider) }.
to raise_error(Vagrant::Errors::BoxAlreadyExists)
end
it "should raise an exception and not add the box if the provider doesn't match" do it "should raise an exception and not add the box if the provider doesn't match" do
box_name = "foo" box_name = "foo"
good_provider = :virtualbox good_provider = :virtualbox