diff options
| -rw-r--r-- | meta/lib/oeqa/utils/sshcontrol.py | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/meta/lib/oeqa/utils/sshcontrol.py b/meta/lib/oeqa/utils/sshcontrol.py index 1658744165..ff88d37bd9 100644 --- a/meta/lib/oeqa/utils/sshcontrol.py +++ b/meta/lib/oeqa/utils/sshcontrol.py | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | # -*- coding: utf-8 -*- | ||
| 1 | # Copyright (C) 2013 Intel Corporation | 2 | # Copyright (C) 2013 Intel Corporation |
| 2 | # | 3 | # |
| 3 | # Released under the MIT license (see COPYING.MIT) | 4 | # Released under the MIT license (see COPYING.MIT) |
| @@ -151,3 +152,86 @@ class SSHControl(object): | |||
| 151 | def copy_from(self, remotepath, localpath): | 152 | def copy_from(self, remotepath, localpath): |
| 152 | command = self.scp + ['%s@%s:%s' % (self.user, self.ip, remotepath), localpath] | 153 | command = self.scp + ['%s@%s:%s' % (self.user, self.ip, remotepath), localpath] |
| 153 | return self._internal_run(command, ignore_status=False) | 154 | return self._internal_run(command, ignore_status=False) |
| 155 | |||
| 156 | def copy_dir_to(self, localpath, remotepath): | ||
| 157 | """ | ||
| 158 | Copy recursively localpath directory to remotepath in target. | ||
| 159 | """ | ||
| 160 | |||
| 161 | for root, dirs, files in os.walk(localpath): | ||
| 162 | # Create directories in the target as needed | ||
| 163 | for d in dirs: | ||
| 164 | tmp_dir = os.path.join(root, d).replace(localpath, "") | ||
| 165 | new_dir = os.path.join(remotepath, tmp_dir.lstrip("/")) | ||
| 166 | cmd = "mkdir -p %s" % new_dir | ||
| 167 | self.run(cmd) | ||
| 168 | |||
| 169 | # Copy files into the target | ||
| 170 | for f in files: | ||
| 171 | tmp_file = os.path.join(root, f).replace(localpath, "") | ||
| 172 | dst_file = os.path.join(remotepath, tmp_file.lstrip("/")) | ||
| 173 | src_file = os.path.join(root, f) | ||
| 174 | self.copy_to(src_file, dst_file) | ||
| 175 | |||
| 176 | |||
| 177 | def delete_files(self, remotepath, files): | ||
| 178 | """ | ||
| 179 | Delete files in target's remote path. | ||
| 180 | """ | ||
| 181 | |||
| 182 | cmd = "rm" | ||
| 183 | if not isinstance(files, list): | ||
| 184 | files = [files] | ||
| 185 | |||
| 186 | for f in files: | ||
| 187 | cmd = "%s %s" % (cmd, os.path.join(remotepath, f)) | ||
| 188 | |||
| 189 | self.run(cmd) | ||
| 190 | |||
| 191 | |||
| 192 | def delete_dir(self, remotepath): | ||
| 193 | """ | ||
| 194 | Delete remotepath directory in target. | ||
| 195 | """ | ||
| 196 | |||
| 197 | cmd = "rmdir %s" % remotepath | ||
| 198 | self.run(cmd) | ||
| 199 | |||
| 200 | |||
| 201 | def delete_dir_structure(self, localpath, remotepath): | ||
| 202 | """ | ||
| 203 | Delete recursively localpath structure directory in target's remotepath. | ||
| 204 | |||
| 205 | This function is very usefult to delete a package that is installed in | ||
| 206 | the DUT and the host running the test has such package extracted in tmp | ||
| 207 | directory. | ||
| 208 | |||
| 209 | Example: | ||
| 210 | pwd: /home/user/tmp | ||
| 211 | tree: . | ||
| 212 | └── work | ||
| 213 | ├── dir1 | ||
| 214 | │ └── file1 | ||
| 215 | └── dir2 | ||
| 216 | |||
| 217 | localpath = "/home/user/tmp" and remotepath = "/home/user" | ||
| 218 | |||
| 219 | With the above variables this function will try to delete the | ||
| 220 | directory in the DUT in this order: | ||
| 221 | /home/user/work/dir1/file1 | ||
| 222 | /home/user/work/dir1 (if dir is empty) | ||
| 223 | /home/user/work/dir2 (if dir is empty) | ||
| 224 | /home/user/work (if dir is empty) | ||
| 225 | """ | ||
| 226 | |||
| 227 | for root, dirs, files in os.walk(localpath, topdown=False): | ||
| 228 | # Delete files first | ||
| 229 | tmpdir = os.path.join(root).replace(localpath, "") | ||
| 230 | remotedir = os.path.join(remotepath, tmpdir.lstrip("/")) | ||
| 231 | self.delete_files(remotedir, files) | ||
| 232 | |||
| 233 | # Remove dirs if empty | ||
| 234 | for d in dirs: | ||
| 235 | tmpdir = os.path.join(root, d).replace(localpath, "") | ||
| 236 | remotedir = os.path.join(remotepath, tmpdir.lstrip("/")) | ||
| 237 | self.delete_dir(remotepath) | ||
