Fixes #11137: Fixup how cloud publish handles its arguments

Prior to this commit, if a user didn't supply a box file on disk or a
box url, Vagrant would crash and display a stacktrace with an invalid
file. This commit fixes that by adding some extra handling around the
arguments supplied to the publish command.
This commit is contained in:
Brian Cain 2019-11-07 10:15:03 -08:00
parent 7560c7fdef
commit 145f04893c
No known key found for this signature in database
GPG Key ID: 9FC4639B2E4510A0
2 changed files with 10 additions and 1 deletions

View File

@ -55,7 +55,7 @@ module VagrantPlugins
argv = parse_options(opts)
return if !argv
if argv.empty? || argv.length > 4 || argv.length < 3
if argv.empty? || argv.length > 4 || argv.length < 3 || (argv.length == 3 && !options[:url])
raise Vagrant::Errors::CLIInvalidUsage,
help: opts.help.chomp
end

View File

@ -52,6 +52,15 @@ describe VagrantPlugins::CloudCommand::Command::Publish do
let(:argv) { ["vagrant/box", "1.0.0", "virtualbox"] }
it "shows help" do
expect { subject.execute }.
to raise_error(Vagrant::Errors::CLIInvalidUsage)
end
end
context "missing box file" do
let(:argv) { ["vagrant/box", "1.0.0", "virtualbox", "/notreal/file.box"] }
it "raises an exception" do
allow(File).to receive(:file?).and_return(false)
expect { subject.execute }.
to raise_error(Vagrant::Errors::BoxFileNotExist)