* [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox