* [PATCHv2 0/2] Allows to copy symlinks to DUTs with testimage
@ 2016-07-26 9:38 mariano.lopez
2016-07-26 9:38 ` [PATCHv2 1/2] oeqa/oetest.py: Allow to export packages using symlinks mariano.lopez
2016-07-26 9:38 ` [PATCHv2 2/2] oeqa/utils/sshcontrol.py: Allows to copy symlinks to target mariano.lopez
0 siblings, 2 replies; 4+ messages in thread
From: mariano.lopez @ 2016-07-26 9:38 UTC (permalink / raw)
To: openembedded-core
From: Mariano Lopez <mariano.lopez@linux.intel.com>
Currently when using the install functionality in the DUT without package
manager, if you copy a symlink the function will fail.
These series will change the behaviour and will allow to recreate the
symlinks in the DUT.
Changes in v2:
- Use oe.path.copytree instead of shutil.copytree
- Don't create function oeqa_copy, not needed anymore
[YOCTO #9932]
The following changes since commit 039f47ad197a9a53109c9f3deadd9c35e62c056d:
uclibc: remove meta-yocto-bsp append (2016-07-26 08:56:32 +0100)
are available in the git repository at:
git://git.yoctoproject.org/poky-contrib mariano/bug9932v2
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=mariano/bug9932v2
Mariano Lopez (2):
oeqa/oetest.py: Allow to export packages using symlinks
oeqa/utils/sshcontrol.py: Allows to copy symlinks to target
meta/classes/testexport.bbclass | 24 +++++-------------------
meta/lib/oeqa/oetest.py | 17 +++++++++++++----
meta/lib/oeqa/utils/sshcontrol.py | 9 +++++++--
3 files changed, 25 insertions(+), 25 deletions(-)
--
2.6.6
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCHv2 1/2] oeqa/oetest.py: Allow to export packages using symlinks
2016-07-26 9:38 [PATCHv2 0/2] Allows to copy symlinks to DUTs with testimage mariano.lopez
@ 2016-07-26 9:38 ` mariano.lopez
2016-07-26 20:49 ` Joshua G Lock
2016-07-26 9:38 ` [PATCHv2 2/2] oeqa/utils/sshcontrol.py: Allows to copy symlinks to target mariano.lopez
1 sibling, 1 reply; 4+ messages in thread
From: mariano.lopez @ 2016-07-26 9:38 UTC (permalink / raw)
To: openembedded-core
From: Mariano Lopez <mariano.lopez@linux.intel.com>
Currently packages that contains symlinks can't be extracted
and exported. This allows to export extracted such packages.
A nice side effect is improved readability.
[YOCTO #9932]
Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
---
meta/classes/testexport.bbclass | 24 +++++-------------------
meta/lib/oeqa/oetest.py | 17 +++++++++++++----
2 files changed, 18 insertions(+), 23 deletions(-)
diff --git a/meta/classes/testexport.bbclass b/meta/classes/testexport.bbclass
index 15fa470..5147020 100644
--- a/meta/classes/testexport.bbclass
+++ b/meta/classes/testexport.bbclass
@@ -47,6 +47,7 @@ def exportTests(d,tc):
import shutil
import pkgutil
import re
+ import oe.path
exportpath = d.getVar("TEST_EXPORT_DIR", True)
@@ -103,7 +104,7 @@ def exportTests(d,tc):
isfolder = True
target_folder = os.path.join(exportpath, "oeqa", "runtime", os.path.basename(foldername))
if not os.path.exists(target_folder):
- shutil.copytree(foldername, target_folder)
+ oe.path.copytree(foldername, target_folder)
if not isfolder:
shutil.copy2(mod.path, os.path.join(exportpath, "oeqa/runtime"))
json_file = "%s.json" % mod.path.rsplit(".", 1)[0]
@@ -132,27 +133,12 @@ def exportTests(d,tc):
create_tarball(d, "testexport.tar.gz", d.getVar("TEST_EXPORT_DIR", True))
# Copy packages needed for runtime testing
- export_pkg_dir = os.path.join(d.getVar("TEST_EXPORT_DIR", True), "packages")
test_pkg_dir = d.getVar("TEST_NEEDED_PACKAGES_DIR", True)
- need_pkg_dir = False
- for root, subdirs, files in os.walk(test_pkg_dir):
- for subdir in subdirs:
- tmp_dir = os.path.join(root.replace(test_pkg_dir, "").lstrip("/"), subdir)
- new_dir = os.path.join(export_pkg_dir, tmp_dir)
- bb.utils.mkdirhier(new_dir)
-
- for f in files:
- need_pkg_dir = True
- src_f = os.path.join(root, f)
- dst_f = os.path.join(export_pkg_dir, root.replace(test_pkg_dir, "").lstrip("/"), f)
- shutil.copy2(src_f, dst_f)
-
- if need_pkg_dir:
+ if os.listdir(test_pkg_dir):
+ export_pkg_dir = os.path.join(d.getVar("TEST_EXPORT_DIR", True), "packages")
+ oe.path.copytree(test_pkg_dir, export_pkg_dir)
# Create tar file for packages needed by the DUT
create_tarball(d, "testexport_packages_%s.tar.gz" % d.getVar("MACHINE", True), export_pkg_dir)
- else:
- # Remov packages dir from exported test
- bb.utils.remove(export_pkg_dir, True)
# Copy SDK
if d.getVar("TEST_EXPORT_SDK_ENABLED", True) == "1":
diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py
index e63ca56..3bf3643 100644
--- a/meta/lib/oeqa/oetest.py
+++ b/meta/lib/oeqa/oetest.py
@@ -447,6 +447,8 @@ class RuntimeTestContext(TestContext):
modules = self.getTestModules()
bbpaths = self.d.getVar("BBPATH", True).split(":")
+ shutil.rmtree(self.d.getVar("TEST_EXTRACTED_DIR", True))
+ shutil.rmtree(self.d.getVar("TEST_PACKAGED_DIR", True))
for module in modules:
json_file = self._getJsonFile(module)
if json_file:
@@ -458,6 +460,8 @@ class RuntimeTestContext(TestContext):
Extract packages that will be needed during runtime.
"""
+ import oe.path
+
extracted_path = self.d.getVar("TEST_EXTRACTED_DIR", True)
packaged_path = self.d.getVar("TEST_PACKAGED_DIR", True)
@@ -481,13 +485,18 @@ class RuntimeTestContext(TestContext):
dst_dir = os.path.join(packaged_path)
# Extract package and copy it to TEST_EXTRACTED_DIR
- if extract and not os.path.exists(dst_dir):
- pkg_dir = self._extract_in_tmpdir(pkg)
- shutil.copytree(pkg_dir, dst_dir)
+ pkg_dir = self._extract_in_tmpdir(pkg)
+ if extract:
+
+ # Same package used for more than one test,
+ # don't need to extract again.
+ if os.path.exists(dst_dir):
+ continue
+ oe.path.copytree(pkg_dir, dst_dir)
shutil.rmtree(pkg_dir)
# Copy package to TEST_PACKAGED_DIR
- elif not extract:
+ else:
self._copy_package(pkg)
def _getJsonFile(self, module):
--
2.6.6
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCHv2 2/2] oeqa/utils/sshcontrol.py: Allows to copy symlinks to target
2016-07-26 9:38 [PATCHv2 0/2] Allows to copy symlinks to DUTs with testimage mariano.lopez
2016-07-26 9:38 ` [PATCHv2 1/2] oeqa/oetest.py: Allow to export packages using symlinks mariano.lopez
@ 2016-07-26 9:38 ` mariano.lopez
1 sibling, 0 replies; 4+ messages in thread
From: mariano.lopez @ 2016-07-26 9:38 UTC (permalink / raw)
To: openembedded-core
From: Mariano Lopez <mariano.lopez@linux.intel.com>
Currently when copying a symlink to the target it will fail
throwing an exception. This will recreate symlinks from the
system performing the tests to the device under tests.
[YOCTO #9932]
Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
---
meta/lib/oeqa/utils/sshcontrol.py | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/meta/lib/oeqa/utils/sshcontrol.py b/meta/lib/oeqa/utils/sshcontrol.py
index f5d46e0..da485ee 100644
--- a/meta/lib/oeqa/utils/sshcontrol.py
+++ b/meta/lib/oeqa/utils/sshcontrol.py
@@ -147,8 +147,13 @@ class SSHControl(object):
return self._internal_run(command, timeout, self.ignore_status)
def copy_to(self, localpath, remotepath):
- command = self.scp + [localpath, '%s@%s:%s' % (self.user, self.ip, remotepath)]
- return self._internal_run(command, ignore_status=False)
+ if os.path.islink(localpath):
+ link = os.readlink(localpath)
+ dst_dir, dst_base = os.path.split(remotepath)
+ return self.run("cd %s; ln -s %s %s" % (dst_dir, link, dst_base))
+ else:
+ command = self.scp + [localpath, '%s@%s:%s' % (self.user, self.ip, remotepath)]
+ return self._internal_run(command, ignore_status=False)
def copy_from(self, remotepath, localpath):
command = self.scp + ['%s@%s:%s' % (self.user, self.ip, remotepath), localpath]
--
2.6.6
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCHv2 1/2] oeqa/oetest.py: Allow to export packages using symlinks
2016-07-26 9:38 ` [PATCHv2 1/2] oeqa/oetest.py: Allow to export packages using symlinks mariano.lopez
@ 2016-07-26 20:49 ` Joshua G Lock
0 siblings, 0 replies; 4+ messages in thread
From: Joshua G Lock @ 2016-07-26 20:49 UTC (permalink / raw)
To: mariano.lopez, openembedded-core
On Tue, 2016-07-26 at 09:38 +0000, mariano.lopez@linux.intel.com wrote:
> From: Mariano Lopez <mariano.lopez@linux.intel.com>
>
> Currently packages that contains symlinks can't be extracted
> and exported. This allows to export extracted such packages.
>
> A nice side effect is improved readability.
>
> [YOCTO #9932]
>
> Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
> ---
> meta/classes/testexport.bbclass | 24 +++++-------------------
> meta/lib/oeqa/oetest.py | 17 +++++++++++++----
> 2 files changed, 18 insertions(+), 23 deletions(-)
>
> diff --git a/meta/classes/testexport.bbclass
> b/meta/classes/testexport.bbclass
> index 15fa470..5147020 100644
> --- a/meta/classes/testexport.bbclass
> +++ b/meta/classes/testexport.bbclass
> @@ -47,6 +47,7 @@ def exportTests(d,tc):
> import shutil
> import pkgutil
> import re
> + import oe.path
>
> exportpath = d.getVar("TEST_EXPORT_DIR", True)
>
> @@ -103,7 +104,7 @@ def exportTests(d,tc):
> isfolder = True
> target_folder = os.path.join(exportpath, "oeqa",
> "runtime", os.path.basename(foldername))
> if not os.path.exists(target_folder):
> - shutil.copytree(foldername, target_folder)
> + oe.path.copytree(foldername, target_folder)
> if not isfolder:
> shutil.copy2(mod.path, os.path.join(exportpath,
> "oeqa/runtime"))
> json_file = "%s.json" % mod.path.rsplit(".", 1)[0]
> @@ -132,27 +133,12 @@ def exportTests(d,tc):
> create_tarball(d, "testexport.tar.gz",
> d.getVar("TEST_EXPORT_DIR", True))
>
> # Copy packages needed for runtime testing
> - export_pkg_dir = os.path.join(d.getVar("TEST_EXPORT_DIR", True),
> "packages")
> test_pkg_dir = d.getVar("TEST_NEEDED_PACKAGES_DIR", True)
> - need_pkg_dir = False
> - for root, subdirs, files in os.walk(test_pkg_dir):
> - for subdir in subdirs:
> - tmp_dir = os.path.join(root.replace(test_pkg_dir,
> "").lstrip("/"), subdir)
> - new_dir = os.path.join(export_pkg_dir, tmp_dir)
> - bb.utils.mkdirhier(new_dir)
> -
> - for f in files:
> - need_pkg_dir = True
> - src_f = os.path.join(root, f)
> - dst_f = os.path.join(export_pkg_dir,
> root.replace(test_pkg_dir, "").lstrip("/"), f)
> - shutil.copy2(src_f, dst_f)
> -
> - if need_pkg_dir:
> + if os.listdir(test_pkg_dir):
> + export_pkg_dir = os.path.join(d.getVar("TEST_EXPORT_DIR",
> True), "packages")
> + oe.path.copytree(test_pkg_dir, export_pkg_dir)
> # Create tar file for packages needed by the DUT
> create_tarball(d, "testexport_packages_%s.tar.gz" %
> d.getVar("MACHINE", True), export_pkg_dir)
> - else:
> - # Remov packages dir from exported test
> - bb.utils.remove(export_pkg_dir, True)
>
> # Copy SDK
> if d.getVar("TEST_EXPORT_SDK_ENABLED", True) == "1":
> diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py
> index e63ca56..3bf3643 100644
> --- a/meta/lib/oeqa/oetest.py
> +++ b/meta/lib/oeqa/oetest.py
> @@ -447,6 +447,8 @@ class RuntimeTestContext(TestContext):
> modules = self.getTestModules()
> bbpaths = self.d.getVar("BBPATH", True).split(":")
>
> + shutil.rmtree(self.d.getVar("TEST_EXTRACTED_DIR", True))
> + shutil.rmtree(self.d.getVar("TEST_PACKAGED_DIR", True))
Do we use the shutil module anywhere else in oetest.py? Could we drop
it completely if we use oe.path.remove() rather than shutil.rmtree()?
Perhaps you could send a follow-on patch?
> for module in modules:
> json_file = self._getJsonFile(module)
> if json_file:
> @@ -458,6 +460,8 @@ class RuntimeTestContext(TestContext):
> Extract packages that will be needed during runtime.
> """
>
> + import oe.path
> +
> extracted_path = self.d.getVar("TEST_EXTRACTED_DIR", True)
> packaged_path = self.d.getVar("TEST_PACKAGED_DIR", True)
>
> @@ -481,13 +485,18 @@ class RuntimeTestContext(TestContext):
> dst_dir = os.path.join(packaged_path)
>
> # Extract package and copy it to TEST_EXTRACTED_DIR
> - if extract and not os.path.exists(dst_dir):
> - pkg_dir = self._extract_in_tmpdir(pkg)
> - shutil.copytree(pkg_dir, dst_dir)
> + pkg_dir = self._extract_in_tmpdir(pkg)
> + if extract:
> +
> + # Same package used for more than one test,
> + # don't need to extract again.
> + if os.path.exists(dst_dir):
> + continue
> + oe.path.copytree(pkg_dir, dst_dir)
> shutil.rmtree(pkg_dir)
>
> # Copy package to TEST_PACKAGED_DIR
> - elif not extract:
> + else:
> self._copy_package(pkg)
>
> def _getJsonFile(self, module):
> --
> 2.6.6
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-07-26 20:49 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-26 9:38 [PATCHv2 0/2] Allows to copy symlinks to DUTs with testimage mariano.lopez
2016-07-26 9:38 ` [PATCHv2 1/2] oeqa/oetest.py: Allow to export packages using symlinks mariano.lopez
2016-07-26 20:49 ` Joshua G Lock
2016-07-26 9:38 ` [PATCHv2 2/2] oeqa/utils/sshcontrol.py: Allows to copy symlinks to target mariano.lopez
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.