mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 21:09:03 +02:00
sshcontrol.py: Add methods to copy dirs and delete files
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] (From OE-Core rev: f22afb09fefdcb568d79ccd81277a43dacee2a82) Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
e81d7a8afe
commit
eb0ab04149
|
@ -1,3 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright (C) 2013 Intel Corporation
|
||||
#
|
||||
# Released under the MIT license (see COPYING.MIT)
|
||||
|
@ -151,3 +152,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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user