lib/vagrant-vcloud/action/sync_folders.rb in vagrant-vcloud-0.1.0 vs lib/vagrant-vcloud/action/sync_folders.rb in vagrant-vcloud-0.1.1
- old
+ new
@@ -1,9 +1,29 @@
+# The MIT License (MIT)
+# Copyright (c) 2013 Mitchell Hashimoto
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy of
+# this software and associated documentation files (the "Software"), to deal in
+# the Software without restriction, including without limitation the rights to
+# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+# of the Software, and to permit persons to whom the Software is furnished to do
+# so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
require "log4r"
require "vagrant/util/subprocess"
require "vagrant/util/scoped_hash_override"
-require "unison"
+require "vagrant/util/which"
module VagrantPlugins
module VCloud
module Action
class SyncFolders
@@ -25,22 +45,30 @@
data = scoped_hash_override(data, :vcloud)
# Ignore disabled shared folders
next if data[:disabled]
+ unless Vagrant::Util::Which.which('rsync')
+ env[:ui].warn(I18n.t('vagrant_vcloud.rsync_not_found_warning'))
+ break
+ end
+
hostpath = File.expand_path(data[:hostpath], env[:root_path])
guestpath = data[:guestpath]
# Make sure there is a trailing slash on the host path to
# avoid creating an additional directory with rsync
hostpath = "#{hostpath}/" if hostpath !~ /\/$/
- @logger.debug("RSYNCING OVER #{hostpath} to #{guestpath}")
+ # on windows rsync.exe requires cygdrive-style paths
+ if Vagrant::Util::Platform.windows?
+ hostpath = hostpath.gsub(/^(\w):/) { "/cygdrive/#{$1}" }
+ end
- # env[:ui].info(I18n.t("vagrant_aws.rsync_folder",
- # :hostpath => hostpath,
- # :guestpath => guestpath))
+ env[:ui].info(I18n.t("vagrant_vcloud.rsync_folder",
+ :hostpath => hostpath,
+ :guestpath => guestpath))
# Create the host path if it doesn't exist and option flag is set
if data[:create]
begin
FileUtils::mkdir_p(hostpath)
@@ -57,15 +85,21 @@
"chown #{ssh_info[:username]} '#{guestpath}'")
# Rsync over to the guest path using the SSH info
command = [
"rsync", "--verbose", "--archive", "-z",
- "--exclude", ".vagrant/",
+ "--exclude", ".vagrant/", "--exclude", "Vagrantfile",
"-e", "ssh -p #{ssh_info[:port]} -o StrictHostKeyChecking=no -i '#{ssh_info[:private_key_path]}'",
hostpath,
"#{ssh_info[:username]}@#{ssh_info[:host]}:#{guestpath}"]
+ # we need to fix permissions when using rsync.exe on windows, see
+ # http://stackoverflow.com/questions/5798807/rsync-permission-denied-created-directories-have-no-permissions
+ if Vagrant::Util::Platform.windows?
+ command.insert(1, "--chmod", "ugo=rwX")
+ end
+
r = Vagrant::Util::Subprocess.execute(*command)
if r.exit_code != 0
raise Errors::RsyncError,
:guestpath => guestpath,
:hostpath => hostpath,
@@ -74,9 +108,6 @@
end
end
end
end
end
-end
-
-
-
+end
\ No newline at end of file