plugins/provisioners/file/provisioner.rb in vagrant-unbundled-1.9.8.1 vs plugins/provisioners/file/provisioner.rb in vagrant-unbundled-2.0.0.1
- old
+ new
@@ -9,18 +9,31 @@
# if source is a directory, make it then trim destination with dirname
# Make sure the remote path exists
if File.directory?(source)
# We need to make sure the actual destination folder
# also exists before uploading, otherwise
- # you will get nested folders. We also need to append
- # a './' to the source folder so we copy the contents
- # rather than the folder itself, in case a users destination
- # folder differs from its source.
+ # you will get nested folders
#
# https://serverfault.com/questions/538368/make-scp-always-overwrite-or-create-directory
# https://unix.stackexchange.com/questions/292641/get-scp-path-behave-like-rsync-path/292732
command = "mkdir -p \"%s\"" % destination
- source << "/."
+ if !destination.end_with?(File::SEPARATOR) &&
+ !source.end_with?("#{File::SEPARATOR}.")
+ # We also need to append a '/.' to the source folder so we copy
+ # the contents rather than the folder itself, in case a users
+ # destination folder differs from its source
+ #
+ # If source is set as `source/` it will lose the trailing
+ # slash due to how `File.expand_path` works, so we don't need
+ # a conditional for that case.
+ if @machine.config.vm.communicator == :winrm
+ # windows needs an array of paths because of the
+ # winrm-fs function Vagrant is using to upload file/folder.
+ source = Dir["#{source}#{File::SEPARATOR}*"]
+ else
+ source << "#{File::SEPARATOR}."
+ end
+ end
else
command = "mkdir -p \"%s\"" % File.dirname(destination)
end
comm.execute(command)