commit:     c56757276df58cf03a19512d3ed4f9d36cef6f06
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Thu Jul 17 23:53:48 2014 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Thu Jul 17 23:58:33 2014 +0000
URL:        
http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=c5675727

packagerules/rules->PackageRules: append_rule()

Adds a rule to an (possibly) already-sorted PackageRules object and gives it the
lowest priority (highest int, 1+max(self._rules priority).

Will be used to add generated rules that should be applied last (add-policy).

---
 roverlay/packagerules/rules.py | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/roverlay/packagerules/rules.py b/roverlay/packagerules/rules.py
index 5cbe600..0dd0d3d 100644
--- a/roverlay/packagerules/rules.py
+++ b/roverlay/packagerules/rules.py
@@ -47,6 +47,34 @@ class PackageRules ( 
roverlay.packagerules.abstract.rules.NestedPackageRule ):
       self.is_toplevel = True
    # --- end of __init__ (...) ---
 
+   def append_rule ( self, rule, prepare_rule=True ):
+      """
+      Sets the given rule's priority to 1 + lowest prio of already-added rules
+      (so that it will be applied last) and adds it.
+
+      Optionally prepares the rule so that prepare() doesn't need to be
+      called afterwards, assuming that the PackageRules was already prepared.
+
+      arguments:
+      * rule         --
+      * prepare_rule -- whether to prepare the added rule or not
+                         Defaults to True.
+      """
+      if self._rules:
+         rule.priority = 1 + max ( rule.priority for rule in self._rules )
+      else:
+         rule.priority = 0
+
+      self.add_rule ( rule )
+
+      if prepare_rule:
+         rule.set_logger ( self.logger.getChild ( 'nested' ) )
+         rule.prepare()
+         # no need to sort self._rules
+         #    self._rules [-1].prio > self._rules [-2].prio
+         #     <=> sorted if self.prepare() has been called before
+   # --- end of append_rule (...) ---
+
    def _gen_rules_str ( self, level ):
       if level == 0:
          last_rule_index = len ( self._rules ) - 1

Reply via email to