+ self.create_buildname_once(dry_run)
+ scp_command = "scp "
+ if not dry_run:
+ scp_command += TestSsh.std_options
+ if recursive:
+ scp_command += "-r "
+ scp_command += self.key_part()
+ scp_command += "{} {}:{}/{}".format(local_file, self.hostname_part(),
+ self.fullname(self.buildname),
+ os.path.basename(local_file) or ".")
+ if dry_run:
+ utils.header("DRY RUN TestSsh.copy {}".format(scp_command))
+ # need to be consistent with the non-dry-run mode
+ return 0
+ return utils.system(scp_command)
+
+ def copy_abs(self, local_file, remote_file,
+ recursive=False, dry_run=False):
+ if self.is_local():
+ dest = ""
+ else:
+ dest = "{}:".format(self.hostname_part())
+ scp_command = "scp "
+ scp_command += TestSsh.std_options
+ if recursive:
+ scp_command += "-r "
+ scp_command += self.key_part()
+ scp_command += "{} {}{}".format(local_file, dest, remote_file)
+ if dry_run:
+ utils.header("DRY RUN TestSsh.copy {}".format(scp_command))
+ # need to be consistent with the non-dry-run mode
+ return 0
+ return utils.system(scp_command)
+
+ def copy_home(self, local_file, recursive=False):
+ return self.copy_abs(local_file, os.path.basename(local_file), recursive)
+
+ def fetch (self, remote_file, local_file, recursive=False, dry_run=False):
+ if self.is_local():
+ command="cp "
+ if recursive:
+ command += "-r "
+ command += "{} {}".format(remote_file, local_file)
+ else:
+ command = "scp "
+ if not dry_run:
+ command += TestSsh.std_options
+ if recursive:
+ command += "-r "
+ command += self.key_part()
+ # absolute path - do not preprend buildname
+ if remote_file.find("/") == 0:
+ remote_path = remote_file
+ else:
+ remote_path = "{}/{}".format(self.buildname, remote_file)
+ remote_path = self.fullname(remote_path)
+ command += "{}:{} {}".format(self.hostname_part(), remote_path, local_file)