]> git.ipfire.org Git - pakfire.git/commitdiff
Add scriptlets that are executed prior to the transaction.
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 11 Apr 2012 17:28:16 +0000 (19:28 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 11 Apr 2012 17:28:16 +0000 (19:28 +0200)
python/pakfire/actions.py
python/pakfire/constants.py
python/pakfire/packages/lexer.py
python/pakfire/transaction.py

index d1e1fba2fe7307b65553a874c45e72b050ce7fab..1434841f4aefd5f26f2e08dd3b9b11c9ec2e07a0 100644 (file)
@@ -249,6 +249,22 @@ class ActionScriptPostUp(ActionScript):
        script_action = "postup"
 
 
+class ActionScriptPreTrans(ActionScript):
+       pass
+
+
+class ActionScriptPreTransIn(ActionScriptPreTrans):
+       script_action = "pretransin"
+
+
+class ActionScriptPreTransUn(ActionScriptPreTrans):
+       script_action = "pretransun"
+
+
+class ActionScriptPreTransUp(ActionScriptPreTrans):
+       script_action = "pretransup"
+
+
 class ActionScriptPostTrans(ActionScript):
        pass
 
index 9d4f34a2a954bdd1b058b6f3da80258632f8f901..0899dd0281381b95b58fe252e1f83352d7316949 100644 (file)
@@ -190,6 +190,9 @@ SCRIPTLET_INTERPRETER = "/bin/sh"
 SCRIPTLET_TIMEOUT = 60 * 15
 
 SCRIPTS = (
+       "pretransin",
+       "pretransun",
+       "pretransup",
        "prein",
        "postin",
        "preun",
index 432806d7a8074ce55b4e6d2bf0bd6f0a49fc1636..2e662c9a0761117eef33b88091182b87bfb102fc 100644 (file)
@@ -29,7 +29,7 @@ class LexerUndefinedVariableError(LexerError):
 LEXER_VALID_PACKAGE_NAME    = re.compile(r"[A-Za-z][A-Za-z0-9\_\-\+]")
 
 # XXX need to build check
-LEXER_VALID_SCRIPTLET_NAME  = re.compile(r"((pre|post|posttrans)(in|un|up))")
+LEXER_VALID_SCRIPTLET_NAME  = re.compile(r"((pre|post|pretrans|posttrans)(in|un|up))")
 
 LEXER_COMMENT_CHAR    = "#"
 LEXER_COMMENT         = re.compile(r"^\s*#")
index 9610f61ed15e1c10a17973c5bec7f0274906248b..0b417d26d31d14a14bcdd8ca9a32040bbb3f07c6 100644 (file)
@@ -157,12 +157,44 @@ class TransactionCheck(object):
 
 class Transaction(object):
        action_classes = {
-               ActionInstall.type   : [ActionScriptPreIn, ActionInstall, ActionScriptPostIn, ActionScriptPostTransIn],
-               ActionReinstall.type : [ActionScriptPreIn, ActionReinstall, ActionScriptPostIn, ActionScriptPostTransIn],
-               ActionRemove.type    : [ActionScriptPreUn, ActionRemove, ActionScriptPostUn, ActionScriptPostTransUn],
-               ActionUpdate.type    : [ActionScriptPreUp, ActionUpdate,  ActionScriptPostUp, ActionScriptPostTransUp],
-               ActionCleanup.type   : [ActionCleanup,],
-               ActionDowngrade.type : [ActionScriptPreUp, ActionDowngrade, ActionScriptPostUp, ActionScriptPostTransUp],
+               ActionInstall.type : [
+                       ActionScriptPreTransIn,
+                       ActionScriptPreIn,
+                       ActionInstall,
+                       ActionScriptPostIn,
+                       ActionScriptPostTransIn,
+               ],
+               ActionReinstall.type : [
+                       ActionScriptPreTransIn,
+                       ActionScriptPreIn,
+                       ActionReinstall,
+                       ActionScriptPostIn,
+                       ActionScriptPostTransIn,
+               ],
+               ActionRemove.type : [
+                       ActionScriptPreTransUn,
+                       ActionScriptPreUn,
+                       ActionRemove,
+                       ActionScriptPostUn,
+                       ActionScriptPostTransUn,
+               ],
+               ActionUpdate.type : [
+                       ActionScriptPreTransUp,
+                       ActionScriptPreUp,
+                       ActionUpdate,
+                       ActionScriptPostUp,
+                       ActionScriptPostTransUp,
+               ],
+               ActionCleanup.type : [
+                       ActionCleanup,
+               ],
+               ActionDowngrade.type : [
+                       ActionScriptPreTransUp,
+                       ActionScriptPreUp,
+                       ActionDowngrade,
+                       ActionScriptPostUp,
+                       ActionScriptPostTransUp,
+               ],
        }
 
        def __init__(self, pakfire):
@@ -233,15 +265,18 @@ class Transaction(object):
                        Sort all actions.
                """
                actions = []
+               actions_pre = []
                actions_post = []
 
                for action in self.actions:
-                       if isinstance(action, ActionScriptPostTrans):
+                       if isinstance(action, ActionScriptPreTrans):
+                               actions_pre.append(action)
+                       elif isinstance(action, ActionScriptPostTrans):
                                actions_post.append(action)
                        else:
                                actions.append(action)
 
-               self.actions = actions + actions_post
+               self.actions = actions_pre + actions + actions_post
                self.__need_sort = False
 
        @property