* [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
* 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
* [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
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