From c8b829c4d2f97bf9caf524f2333526c9a4de9657 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Wed, 13 Mar 2013 21:50:41 -0700 Subject: [PATCH] Properly resolve cygwin paths in Cygwin environments [GH-1366] --- CHANGELOG.md | 2 ++ lib/vagrant/util/platform.rb | 15 +++++++++++++++ plugins/providers/virtualbox/action/import.rb | 3 --- plugins/providers/virtualbox/driver/base.rb | 5 +---- .../providers/virtualbox/driver/version_4_0.rb | 4 ++++ .../providers/virtualbox/driver/version_4_1.rb | 4 ++++ .../providers/virtualbox/driver/version_4_2.rb | 4 ++++ 7 files changed, 30 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c994a3e82..b66570d04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,8 @@ FEATURES: IMPROVEMENTS / BUG FIXES: + - Vagrant works much better in Cygwin environments on Windows by + properly resolving Cygwin paths. [GH-1366] - Improve the SSH "ready?" check by more gracefully handling timeouts. [GH-841] - Human friendly error if connection times out for HTTP downloads. [GH-849] - Detect when the VirtualBox installation is incomplete and error. [GH-846] diff --git a/lib/vagrant/util/platform.rb b/lib/vagrant/util/platform.rb index c3b16d083..44a4b0a63 100644 --- a/lib/vagrant/util/platform.rb +++ b/lib/vagrant/util/platform.rb @@ -1,6 +1,8 @@ require 'rbconfig' require 'tempfile' +require "vagrant/util/subprocess" + module Vagrant module Util # This class just contains some platform checking code. @@ -48,6 +50,19 @@ module Vagrant !bit64? end + # This takes as input a path as a string and converts it into + # a platform-friendly version of the path. This is most important + # when using the path in shell environments with Cygwin. + # + # @param [String] path + # @return [String] + def platform_path(path) + return path if !cygwin? + + process = Subprocess.execute("cygpath", "-u", path.to_s) + process.stdout.chomp + end + # Returns a boolean noting whether the terminal supports color. # output. def terminal_supports_colors? diff --git a/plugins/providers/virtualbox/action/import.rb b/plugins/providers/virtualbox/action/import.rb index 0dfd52f89..14ac2b0bb 100644 --- a/plugins/providers/virtualbox/action/import.rb +++ b/plugins/providers/virtualbox/action/import.rb @@ -12,9 +12,6 @@ module VagrantPlugins # Import the virtual machine ovf_file = env[:machine].box.directory.join("box.ovf").to_s - if Vagrant::Util::Platform.cygwin? - ovf_file = `cygpath -m '#{ovf_file}'`.chomp - end env[:machine].id = env[:machine].provider.driver.import(ovf_file) do |progress| env[:ui].clear_line env[:ui].report_progress(progress, 100, false) diff --git a/plugins/providers/virtualbox/driver/base.rb b/plugins/providers/virtualbox/driver/base.rb index e7cc2e035..36c4df22f 100644 --- a/plugins/providers/virtualbox/driver/base.rb +++ b/plugins/providers/virtualbox/driver/base.rb @@ -33,9 +33,6 @@ module VagrantPlugins if ENV.has_key?("VBOX_INSTALL_PATH") # Get the path. path = ENV["VBOX_INSTALL_PATH"] - if Vagrant::Util::Platform.cygwin? - path = `cygpath -u '#{path}'`.chomp - end @logger.debug("VBOX_INSTALL_PATH value: #{path}") # There can actually be multiple paths in here, so we need to @@ -48,7 +45,7 @@ module VagrantPlugins # and break out vboxmanage = "#{path}VBoxManage.exe" if File.file?(vboxmanage) - @vboxmanage_path = vboxmanage + @vboxmanage_path = Vagrant::Util::Platform.platform_path(vboxmanage) break end end diff --git a/plugins/providers/virtualbox/driver/version_4_0.rb b/plugins/providers/virtualbox/driver/version_4_0.rb index 91bfb62a2..bdbfa3ae0 100644 --- a/plugins/providers/virtualbox/driver/version_4_0.rb +++ b/plugins/providers/virtualbox/driver/version_4_0.rb @@ -1,5 +1,7 @@ require 'log4r' +require "vagrant/util/platform" + require File.expand_path("../base", __FILE__) module VagrantPlugins @@ -157,6 +159,8 @@ module VagrantPlugins end def import(ovf) + ovf = Vagrant::Util::Platform.platform_path(ovf) + output = "" total = "" last = 0 diff --git a/plugins/providers/virtualbox/driver/version_4_1.rb b/plugins/providers/virtualbox/driver/version_4_1.rb index 6d0854d32..923240466 100644 --- a/plugins/providers/virtualbox/driver/version_4_1.rb +++ b/plugins/providers/virtualbox/driver/version_4_1.rb @@ -1,5 +1,7 @@ require 'log4r' +require "vagrant/util/platform" + require File.expand_path("../base", __FILE__) module VagrantPlugins @@ -157,6 +159,8 @@ module VagrantPlugins end def import(ovf) + ovf = Vagrant::Util::Platform.platform_path(ovf) + output = "" total = "" last = 0 diff --git a/plugins/providers/virtualbox/driver/version_4_2.rb b/plugins/providers/virtualbox/driver/version_4_2.rb index be6824a50..75d1ab56d 100644 --- a/plugins/providers/virtualbox/driver/version_4_2.rb +++ b/plugins/providers/virtualbox/driver/version_4_2.rb @@ -1,5 +1,7 @@ require 'log4r' +require "vagrant/util/platform" + require File.expand_path("../base", __FILE__) module VagrantPlugins @@ -155,6 +157,8 @@ module VagrantPlugins end def import(ovf) + ovf = Vagrant::Util::Platform.platform_path(ovf) + output = "" total = "" last = 0