From 94d3235dc84cd243fab5452a3422daf877aeaa84 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Sat, 28 May 2011 20:12:28 +0200 Subject: [PATCH] [entropy.spm] PortagePlugin: improve reliability of preinstall+setup phase execution --- .../interfaces/portage_plugin/__init__.py | 50 ++++++++++++++++--- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/libraries/entropy/spm/plugins/interfaces/portage_plugin/__init__.py b/libraries/entropy/spm/plugins/interfaces/portage_plugin/__init__.py index b33076a8d..e48979eda 100644 --- a/libraries/entropy/spm/plugins/interfaces/portage_plugin/__init__.py +++ b/libraries/entropy/spm/plugins/interfaces/portage_plugin/__init__.py @@ -2044,23 +2044,56 @@ class PortagePlugin(SpmPlugin): return myebuild, moved_ebuild - def _pkg_setup(self, package_metadata, skip_if_found = False): + def _pkg_setup(self, package_metadata): package = PortagePlugin._pkg_compose_atom(package_metadata) env_file = os.path.join(package_metadata['unpackdir'], "portage", package, "temp/environment") - if os.path.isfile(env_file) and skip_if_found: + if os.path.isfile(env_file): return 0 ebuild = PortagePlugin._pkg_compose_xpak_ebuild(package_metadata) - rc = self._portage_doebuild(ebuild, "setup", - "bintree", package, portage_tmpdir = package_metadata['unpackdir'], - licenses = package_metadata.get('accept_license')) + + try: + rc = self._portage_doebuild(ebuild, "setup", + "bintree", package, + portage_tmpdir = package_metadata['unpackdir'], + licenses = package_metadata.get('accept_license')) + except Exception as e: + entropy.tools.print_traceback() + + self.log_message( + "[SETUP] ATTENTION Cannot properly run SPM setup" + " phase for %s. Something bad happened." + " Exception %s" % (package, repr(e),)) + + mytxt = "%s: %s %s." % ( + bold(_("QA")), + brown(_("Cannot run Source Package Manager trigger for")), + bold(str(package)), + ) + self.__output.output( + mytxt, + importance = 0, + header = red(" ## ") + ) + mytxt = "%s. %s: %s [%s]" % ( + brown(_("Please report it")), + bold(_("Attach this")), + darkred(etpConst['entropylogfile']), + brown(phase), + ) + self.__output.output( + mytxt, + importance = 0, + header = red(" ## ") + ) + rc = 1 if rc != 0: self.log_message( - "[POST] ATTENTION Cannot properly run Source Package Manager" + "[SETUP] ATTENTION Cannot properly run Source Package Manager" " setup phase for %s Something bad happened." % (package,) ) @@ -2076,10 +2109,11 @@ class PortagePlugin(SpmPlugin): if not (os.path.isfile(ebuild) and os.access(ebuild, os.R_OK)): return rc + rc = self._pkg_setup(package_metadata) + if rc != 0: + return rc try: - self._pkg_setup(package_metadata, skip_if_found = True) - rc = self._portage_doebuild(ebuild, phase, "bintree", package, portage_tmpdir = package_metadata['unpackdir'], licenses = package_metadata.get('accept_license'))