From 41636a8a9cefa68d18e641efee9fc410ed1dd1d4 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Wed, 9 Apr 2014 14:15:26 -0700 Subject: [PATCH] core: can't add boxes from network shares [GH-3279] --- CHANGELOG.md | 1 + lib/vagrant/action/builtin/box_add.rb | 6 ++++++ lib/vagrant/errors.rb | 4 ++++ templates/locales/en.yml | 7 +++++++ 4 files changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d9f45d4c..7af4b22e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ BUG FIXES: fail [GH-3391] - core: `vagrant` on Windows cmd.exe doesn't always exit with exit code zero. [GH-3420] + - core: Adding a box from a network share has nice error on Windows. [GH-3279] - commands/package: Nice error if includes contain symlinks. [GH-3200] - commands/rsync-auto: Don't crash if the machine can't be communicated to. [GH-3419] diff --git a/lib/vagrant/action/builtin/box_add.rb b/lib/vagrant/action/builtin/box_add.rb index 81cf19744..917fee237 100644 --- a/lib/vagrant/action/builtin/box_add.rb +++ b/lib/vagrant/action/builtin/box_add.rb @@ -41,6 +41,12 @@ module Vagrant # Expand the path and try to use that, if possible p = File.expand_path(URI.unescape(u.gsub(/^file:\/\//, ""))) p = Util::Platform.cygwin_windows_path(p) + + # If this is a network share on Windows then show the user an error + if Util::Platform.windows? && (p.start_with?("//") || p.start_with?("\\\\")) + raise Errors::BoxUrlIsNetworkShare, url: p + end + next "file://#{URI.escape(p.gsub("\\", "/"))}" if File.file?(p) u diff --git a/lib/vagrant/errors.rb b/lib/vagrant/errors.rb index be378dd57..754b29a73 100644 --- a/lib/vagrant/errors.rb +++ b/lib/vagrant/errors.rb @@ -232,6 +232,10 @@ module Vagrant error_key(:box_update_no_metadata) end + class BoxUrlIsNetworkShare < VagrantError + error_key(:box_url_is_network_share) + end + class BoxVerificationFailed < VagrantError error_key(:failed, "vagrant.actions.box.verify") end diff --git a/templates/locales/en.yml b/templates/locales/en.yml index ba69c6b20..d8727cd5e 100644 --- a/templates/locales/en.yml +++ b/templates/locales/en.yml @@ -495,6 +495,13 @@ en: directly instead of from a box catalog. Vagrant can only check the versions of boxes that were added from a catalog such as from the public Vagrant Server. + box_url_is_network_share: |- + You specified a network share path as a path to add a box. Vagrant + current doesn't support network share URLs. Please copy the file + from the network share to your local machine, then add it from + there. + + URL: %{url} bundler_disabled: |- Vagrant's built-in bundler management mechanism is disabled because Vagrant is running in an external bundler environment. In these