public ProcessExitResultWithOutput RunAndProcess(ITransferProgress progress, string source, string destination, CancellationToken token, RsyncOptions options = null) { var processInfo = BuildProcessInfo(progress, source, destination, options); processInfo.CancellationToken = token; return ProcessExitResultWithOutput.FromProcessExitResult(_processManager.LaunchAndProcess(processInfo), progress.Output); }
public async Task<ProcessExitResultWithOutput> RunAndProcessAsync(ITransferProgress progress, string source, string destination, RsyncOptions options = null) { var processInfo = BuildProcessInfo(progress, source, destination, options); return ProcessExitResultWithOutput.FromProcessExitResult( await _processManager.LaunchAndProcessAsync(processInfo).ConfigureAwait(false), progress.Output); }
public ProcessExitResultWithOutput Run(string source, string destination, RsyncOptions options = null) { var startInfo = new ProcessStartInfo(_binPath.ToString(), JoinArgs(source, destination, options)) .SetWorkingDirectoryOrDefault(Directory.GetCurrentDirectory()); return _processManager.LaunchAndGrab( new BasicLaunchInfo( startInfo) { MonitorOutput = _processManager.DefaultMonitorOutputTimeOut, MonitorResponding = _processManager.DefaultMonitorRespondingTimeOut }); }
LaunchAndProcessInfo BuildProcessInfo(ITransferProgress progress, string source, string destination, RsyncOptions options) { return new LaunchAndProcessInfo(GetProcessStartInfo(source, destination, options)) { StandardOutputAction = (process, data) => _parser.ParseOutput(process, data, progress), StandardErrorAction = (process, data) => _parser.ParseOutput(process, data, progress), MonitorOutput = _processManager.DefaultMonitorOutputTimeOut, MonitorResponding = _processManager.DefaultMonitorRespondingTimeOut }; }
string JoinArgs(string source, string destination, RsyncOptions options) { return string.Join(" ", GetArguments(source, destination, options)); }
IEnumerable<string> GetArguments(string source, string destination, RsyncOptions options) { if (options == null) options = new RsyncOptions(); var args = new[] {defaultParams}.ToList(); if (options.Key != null) args.Add(string.Format("-e \"'{0}' {1} -i '{2}'\"", _sshBinPath, sshKeyParams, HandlePath(options.Key))); if (options.AdditionalArguments != null) args.AddRange(options.AdditionalArguments); args.Add(HandlePath(source).EscapePath()); args.Add(HandlePath(destination).EscapePath()); return args; }
ProcessStartInfo GetProcessStartInfo(string source, string destination, RsyncOptions options) { return new ProcessStartInfoBuilder(_binPath, JoinArgs(source, destination, options)) { WorkingDirectory = options.WorkingDirectory ?? Directory.GetCurrentDirectory() }.Build(); }