# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1

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
