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.
27 lines
1.1 KiB
Ruby
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
|