diff --git a/libraries/entropy/client/interfaces/package.py b/libraries/entropy/client/interfaces/package.py index c4d835886..25b74d13c 100644 --- a/libraries/entropy/client/interfaces/package.py +++ b/libraries/entropy/client/interfaces/package.py @@ -3216,6 +3216,19 @@ class Package: del pkgdata return 0 + def _setup_step(self): + pkgdata = self.pkgmeta['triggers'].get('install') + action_data = self.pkgmeta['triggers'].get('install') + if pkgdata: + trigger = self._entropy.Triggers(self._action, 'setup', + pkgdata, action_data) + do = trigger.prepare() + if do: + trigger.run() + trigger.kill() + del pkgdata + return 0 + def _pre_remove_step(self): remdata = self.pkgmeta['triggers'].get('remove') action_data = self.pkgmeta['triggers'].get('install') @@ -3505,6 +3518,14 @@ class Package: self._entropy.set_title(self._xterm_title) return self._post_install_step() + def do_setup(): + self._xterm_title += ' %s: %s' % ( + _("Setup"), + self.pkgmeta['atom'], + ) + self._entropy.set_title(self._xterm_title) + return self._setup_step() + def do_preinstall(): self._xterm_title += ' %s: %s' % ( _("Preinstall"), @@ -3557,6 +3578,7 @@ class Package: "remove": do_remove, "cleanup": do_cleanup, "postinstall": do_postinstall, + "setup": do_setup, "preinstall": do_preinstall, "postremove": do_postremove, "postremove_install": do_postremove_install, @@ -3948,6 +3970,7 @@ class Package: self.pkgmeta['steps'].append("unpack") # preinstall placed before preremove in order # to respect Spm order + self.pkgmeta['steps'].append("setup") self.pkgmeta['steps'].append("preinstall") self.pkgmeta['steps'].append("install") if self.pkgmeta['removeidpackage'] != -1: diff --git a/libraries/entropy/client/interfaces/trigger.py b/libraries/entropy/client/interfaces/trigger.py index 73cc26470..03b5f18a9 100644 --- a/libraries/entropy/client/interfaces/trigger.py +++ b/libraries/entropy/client/interfaces/trigger.py @@ -28,11 +28,12 @@ class Trigger: """ Entropy Client Package installation phases trigger functions. The place where Source Package Manager (SPM) is called in order to - work out installation, removal phases (post-install, pre-install, + work out installation, removal phases (setup, pre-install, post-install, post-remove, etc). """ - VALID_PHASES = ("preinstall", "postinstall", "preremove", "postremove",) + VALID_PHASES = ("setup", "preinstall", "postinstall", "preremove", + "postremove",) def __init__(self, entropy_client, action, phase, package_metadata, action_metadata): @@ -139,6 +140,27 @@ class Trigger: functions.append(self._trigger_call_ext_postinstall) return functions + def _setup(self): + """ + The setup phase generator. + """ + functions = [] + if self._spm is not None: + spm_class = self._entropy.Spm_class() + phases_map = spm_class.package_phases_map() + append_setup = False + if self._pkgdata['spm_phases'] != None: + if "setup" in self._pkgdata['spm_phases']: + append_setup = True + else: + append_setup = True + if append_setup: + functions.append(self._trigger_spm_setup) + + if self._pkgdata['trigger']: + functions.append(self._trigger_call_ext_setup) + return functions + def _preinstall(self): """ The preinstall phases generator. @@ -147,28 +169,13 @@ class Trigger: if self._spm is not None: spm_class = self._entropy.Spm_class() phases_map = spm_class.package_phases_map() - found_preinstall = False while True: if self._pkgdata['spm_phases'] != None: if phases_map.get('preinstall') not \ in self._pkgdata['spm_phases']: break functions.append(self._trigger_spm_preinstall) - found_preinstall = True break - # if found_preinstall is False, we have to call setup, if - # available. Otherwise, the spm package setup phase is never - # called. - append_setup = False - if not found_preinstall: - if self._pkgdata['spm_phases'] != None: - if "setup" in self._pkgdata['spm_phases']: - append_setup = True - else: - append_setup = True - if append_setup: - functions.append(self._trigger_spm_setup) - if self._pkgdata['trigger']: functions.append(self._trigger_call_ext_preinstall) @@ -226,6 +233,8 @@ class Trigger: return functions + def _trigger_call_ext_setup(self): + return self._trigger_call_ext_generic() def _trigger_call_ext_preinstall(self): return self._trigger_call_ext_generic() @@ -398,6 +407,7 @@ class Trigger: def __get_sh_stage(self, stage): mydict = { + "setup": "pkg_setup", "preinstall": "pkg_preinst", "postinstall": "pkg_postinst", "preremove": "pkg_prerm",