mirror of
https://git.yoctoproject.org/poky
synced 2026-09-19 18:49:32 +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:
committed by
Richard Purdie
parent
e81d7a8afe
commit
eb0ab04149
@@ -1,3 +1,4 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (C) 2013 Intel Corporation
|
# Copyright (C) 2013 Intel Corporation
|
||||||
#
|
#
|
||||||
# Released under the MIT license (see COPYING.MIT)
|
# Released under the MIT license (see COPYING.MIT)
|
||||||
@@ -151,3 +152,86 @@ class SSHControl(object):
|
|||||||
def copy_from(self, remotepath, localpath):
|
def copy_from(self, remotepath, localpath):
|
||||||
command = self.scp + ['%s@%s:%s' % (self.user, self.ip, remotepath), localpath]
|
command = self.scp + ['%s@%s:%s' % (self.user, self.ip, remotepath), localpath]
|
||||||
return self._internal_run(command, ignore_status=False)
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user