--- a/src/Pure/General/rsync.scala Tue Sep 13 10:44:47 2022 +0200
+++ b/src/Pure/General/rsync.scala Tue Sep 13 11:56:38 2022 +0200
@@ -9,14 +9,23 @@
object Rsync {
sealed case class Context(progress: Progress,
- port: Int = 0,
+ ssh_port: Int = 0,
+ ssh_control_path: String = "",
archive: Boolean = true,
protect_args: Boolean = true // requires rsync 3.0.0, or later
) {
- def command: String =
- "rsync --rsh=" + Bash.string("ssh" + (if (port > 0) "-p " + port else "")) +
+ require(ssh_control_path.isEmpty || ssh_control_path == Bash.string(ssh_control_path),
+ "Malformed socket path: " + quote(ssh_control_path))
+
+ def command: String = {
+ val ssh_command =
+ "ssh" + (if (ssh_port > 0) " -p " + ssh_port else "") +
+ (if (ssh_control_path.nonEmpty) " -o ControlPath=" + ssh_control_path else "")
+
+ "rsync --rsh=" + Bash.string(ssh_command) +
(if (archive) " --archive" else "") +
(if (protect_args) " --protect-args" else "")
+ }
}
def exec(