sshcontrol.py: Add methods to copy dirs and delete files
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/1 sshcontrol.py: Add methods to copy dirs and delete files
From: Mariano Lopez <[email protected]>
This patch add new methods to SSHControl class. These methods include:
- Copy a dir to DUT
- Delete a file in the DUT
- Delete a directory in the DUT (if empty)
- Delete a directory structure in the DUT
[YOCTO #9565]
--- meta/lib/oeqa/utils/sshcontrol.py | 83 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+)
meta/lib/oeqa/utils/sshcontrol.py +83 -0
@@ -151,3 +151,86 @@ class SSHControl(object): def copy_from(self, remotepath, localpath): command = self.scp + ['%s@%s:%s' % (self.user, self.ip, remotepath), localpath] return self._internal_run(command, ignore_status=False) + + def copy_dir_to(self, localpath, remotepath): + """ + Copy recursively localpath directory to remotepath in target. + """ + + for root, dirs, files in os.walk(localpath): + # Create directories in the target as needed + for d in dirs: + tmp_dir = os.path.join(root, d).replace(localpath, "") + new_dir = os.path.join(remotepath, tmp_dir.lstrip("/")) + cmd = "mkdir -p %s" % new_dir + self.run(cmd) + + # Copy files into the target + for f in files: + tmp_file = os.path.join(root, f).replace(localpath, "") + dst_file = os.path.join(remotepath, tmp_file.lstrip("/")) + src_file = os.path.join(root, f) + self.copy_to(src_file, dst_file) + + + def delete_files(self, remotepath, files): + """ + Delete files in target's remote path. + """ + + cmd = "rm" + if not isinstance(files, list): + files = [files] + + for f in files: + cmd = "%s %s" % (cmd, os.path.join(remotepath, f)) + + self.run(cmd) + + + def delete_dir(self, remotepath): + """ + Delete remotepath directory in target. + """ + + cmd = "rmdir %s" % remotepath + self.run(cmd) + + + def delete_dir_structure(self, localpath, remotepath): + """ + Delete recursively localpath structure directory in target's remotepath. + + This function is very usefult to delete a package that is installed in + the DUT and the host running the test has such package extracted in tmp + directory. + + Example: + pwd: /home/user/tmp + tree: . + └── work + ├── dir1 + │ └── file1 + └── dir2 + + localpath = "/home/user/tmp" and remotepath = "/home/user" + + With the above variables this function will try to delete the + directory in the DUT in this order: + /home/user/work/dir1/file1 + /home/user/work/dir1 (if dir is empty) + /home/user/work/dir2 (if dir is empty) + /home/user/work (if dir is empty) + """ + + for root, dirs, files in os.walk(localpath, topdown=False): + # Delete files first + tmpdir = os.path.join(root).replace(localpath, "") + remotedir = os.path.join(remotepath, tmpdir.lstrip("/")) + self.delete_files(remotedir, files) + + # Remove dirs if empty + for d in dirs: + tmpdir = os.path.join(root, d).replace(localpath, "") + remotedir = os.path.join(remotepath, tmpdir.lstrip("/")) + self.delete_dir(remotepath)
Signature · 1 line
2.6.6
meta/lib/oeqa/utils/sshcontrol.py class SSHControl(object): · line 214
Quoted 6 lines · On 2 May 2016 at 12:27, <[email protected]> wrote:
meta/lib/oeqa/utils/sshcontrol.py +5
-0+ tree: . + └── work + ├── dir1 + │ └── file1 + └── dir2
This is very pretty, but:
SyntaxError: Non-ASCII character '\xe2' in file /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-oe-selftest/build/meta/lib/oeqa/utils/sshcontrol.py on line 212, but no encoding declared; see
http://python.org/dev/peps/pep-0263/ for details
Add encoding tags or ASCIIfy the comments, please.
Ross