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