Adam Nelson a606822fff Change mkdir command on Windows for rsync
This corrects the `mkdir` command used by rsync on Windows to make sure
the destination directory exists before starting to sync.  The old form
was correct on Linux but not on Windows, and it was just a coincidence
that the `-p` argument appeared to be work.
2020-09-04 12:01:41 +02:00

27 lines
1.1 KiB
Ruby

module VagrantPlugins
module GuestWindows
module Cap
class RSync
def self.rsync_scrub_guestpath( machine, opts )
# Windows guests most often use cygwin-dependent rsync utilities
# that expect "/cygdrive/c" instead of "c:" as the path prefix
# some vagrant code may pass guest paths with drive-lettered paths here
opts[:guestpath].gsub( /^([a-zA-Z]):/, '/cygdrive/\1' )
end
def self.rsync_pre(machine, opts)
machine.communicate.tap do |comm|
# rsync does not construct any gaps in the path to the target directory
# make sure that all subdirectories are created
# NB: Per #11878, the `mkdir` command on Windows is different than used on Unix.
# This formulation matches the form used in the WinRM communicator plugin.
# This will ignore any -p switches, which are redundant in PowerShell,
# and ambiguous in PowerShell 4+
comm.execute("mkdir \"#{opts[:guestpath]}\" -force")
end
end
end
end
end
end