public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "André Erdmann" <dywi@mailerd.de>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/overlay/
Date: Tue,  3 Sep 2013 08:35:30 +0000 (UTC)	[thread overview]
Message-ID: <1378197177.f874355dd601abd680b0a4978fb1bf6b11259099.dywi@gentoo> (raw)

commit:     f874355dd601abd680b0a4978fb1bf6b11259099
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Tue Sep  3 08:32:57 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Tue Sep  3 08:32:57 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=f874355d

depres rule generator: sort rules

+ don't ignore rules without repo ids

---
 roverlay/overlay/rulegen.py | 46 ++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 41 insertions(+), 5 deletions(-)

diff --git a/roverlay/overlay/rulegen.py b/roverlay/overlay/rulegen.py
index 7610e9a..ea15b72 100644
--- a/roverlay/overlay/rulegen.py
+++ b/roverlay/overlay/rulegen.py
@@ -4,6 +4,8 @@
 # Distributed under the terms of the GNU General Public License;
 # either version 2 of the License, or (at your option) any later version.
 
+import collections
+
 class DepresRuleGenerator ( object ):
 
    def __init__ ( self, overlay ):
@@ -58,14 +60,48 @@ class DepresRuleGenerator ( object ):
 
    def make_rule_dict ( self ):
       rule_dict = dict()
+      rules_without_repo = list()
+
       for repo_ids, rule_kwargs in self.make_rule_args():
          rule = self.rule_class ( **rule_kwargs )
-         for repo_id in repo_ids:
-            if repo_id in rule_dict:
-               rule_dict [repo_id].append ( rule )
-            else:
-               rule_dict [repo_id] = [ rule ]
+         if repo_ids:
+            for repo_id in repo_ids:
+               if repo_id in rule_dict:
+                  rule_dict [repo_id].append ( rule )
+               else:
+                  rule_dict [repo_id] = [ rule ]
+         else:
+            rules_without_repo.append ( rule )
+
+      # TODO: use distmap to restore repo ids
+      assert '_' not in rule_dict
+      rule_dict ['_'] = rules_without_repo
+
       return rule_dict
    # --- end of make_rule_dict (...) ---
 
+   def make_rule_list ( self, do_sort=False ):
+      if do_sort:
+         rule_dict = self.make_rule_dict()
+         for rules in rule_dict.values():
+            rules.sort ( key=( lambda k: k.priority ) )
+
+         undef_key = -1
+         #undef_key = max ( k for k in rule_dict if k != '_' ) + 1
+
+         return sorted (
+            rule_dict.items(),
+            key=lambda kv: ( undef_key if kv[0] == '_' else kv[0] )
+         )
+      else:
+         return list ( self.make_rule_dict().items() )
+   # --- end of make_rule_list (...) ---
+
+   def make_ordered_rule_dict ( self ):
+      # _not_ efficient:
+      #  build a dict -> build a list -> build a dict
+      #
+      return collections.OrderedDict ( self.make_rule_list ( do_sort=True ) )
+   # --- end of make_ordered_rule_dict (...) ---
+
 # --- end of DepresRuleGenerator ---


             reply	other threads:[~2013-09-03  8:35 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-03  8:35 André Erdmann [this message]
  -- strict thread matches above, loose matches on Subject: below --
2014-08-23 19:03 [gentoo-commits] proj/R_overlay:master commit in: roverlay/overlay/ André Erdmann
2014-07-29 18:29 ` André Erdmann
2014-07-18 16:20 André Erdmann
2014-07-18  2:28 [gentoo-commits] proj/R_overlay:wip/addition_control " André Erdmann
2014-07-18 16:20 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2014-07-18  2:28 [gentoo-commits] proj/R_overlay:wip/addition_control " André Erdmann
2014-07-18 16:20 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2014-04-01 16:38 André Erdmann
2013-09-18 14:00 André Erdmann
2013-09-17 13:49 André Erdmann
2013-09-03 15:51 André Erdmann
2013-09-03 13:15 André Erdmann
2013-09-02 16:21 André Erdmann
2013-09-02 16:21 André Erdmann
2013-08-29 12:36 André Erdmann
2013-08-20 21:46 André Erdmann
2013-08-20 21:46 André Erdmann
2013-07-29 14:56 André Erdmann
2013-07-10 15:10 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-07-10 16:16 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-06-22 15:24 André Erdmann
2013-06-18 14:12 André Erdmann
2013-06-13 16:34 André Erdmann
2013-04-25 16:44 André Erdmann
2013-04-25 16:44 André Erdmann
2013-02-09 21:28 André Erdmann
2013-02-09 20:45 André Erdmann
2013-02-09 20:45 André Erdmann
2013-01-30 20:16 André Erdmann
2012-08-17 17:26 André Erdmann
2012-08-03 13:38 André Erdmann
2012-08-01 21:10 André Erdmann
2012-07-30 15:53 André Erdmann
2012-07-30  8:52 André Erdmann
2012-07-30  8:52 André Erdmann
2012-07-24 16:59 [gentoo-commits] proj/R_overlay:overlay_wip " André Erdmann
2012-07-30  8:52 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2012-07-05 16:00 André Erdmann
2012-07-04 18:21 André Erdmann
2012-07-03 17:48 André Erdmann
2012-06-27 14:46 André Erdmann
2012-06-26 15:42 André Erdmann
2012-06-22 18:13 André Erdmann
2012-06-21 16:55 André Erdmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1378197177.f874355dd601abd680b0a4978fb1bf6b11259099.dywi@gentoo \
    --to=dywi@mailerd.de \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox