1 |
commit: f874355dd601abd680b0a4978fb1bf6b11259099 |
2 |
Author: André Erdmann <dywi <AT> mailerd <DOT> de> |
3 |
AuthorDate: Tue Sep 3 08:32:57 2013 +0000 |
4 |
Commit: André Erdmann <dywi <AT> mailerd <DOT> de> |
5 |
CommitDate: Tue Sep 3 08:32:57 2013 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=f874355d |
7 |
|
8 |
depres rule generator: sort rules |
9 |
|
10 |
+ don't ignore rules without repo ids |
11 |
|
12 |
--- |
13 |
roverlay/overlay/rulegen.py | 46 ++++++++++++++++++++++++++++++++++++++++----- |
14 |
1 file changed, 41 insertions(+), 5 deletions(-) |
15 |
|
16 |
diff --git a/roverlay/overlay/rulegen.py b/roverlay/overlay/rulegen.py |
17 |
index 7610e9a..ea15b72 100644 |
18 |
--- a/roverlay/overlay/rulegen.py |
19 |
+++ b/roverlay/overlay/rulegen.py |
20 |
@@ -4,6 +4,8 @@ |
21 |
# Distributed under the terms of the GNU General Public License; |
22 |
# either version 2 of the License, or (at your option) any later version. |
23 |
|
24 |
+import collections |
25 |
+ |
26 |
class DepresRuleGenerator ( object ): |
27 |
|
28 |
def __init__ ( self, overlay ): |
29 |
@@ -58,14 +60,48 @@ class DepresRuleGenerator ( object ): |
30 |
|
31 |
def make_rule_dict ( self ): |
32 |
rule_dict = dict() |
33 |
+ rules_without_repo = list() |
34 |
+ |
35 |
for repo_ids, rule_kwargs in self.make_rule_args(): |
36 |
rule = self.rule_class ( **rule_kwargs ) |
37 |
- for repo_id in repo_ids: |
38 |
- if repo_id in rule_dict: |
39 |
- rule_dict [repo_id].append ( rule ) |
40 |
- else: |
41 |
- rule_dict [repo_id] = [ rule ] |
42 |
+ if repo_ids: |
43 |
+ for repo_id in repo_ids: |
44 |
+ if repo_id in rule_dict: |
45 |
+ rule_dict [repo_id].append ( rule ) |
46 |
+ else: |
47 |
+ rule_dict [repo_id] = [ rule ] |
48 |
+ else: |
49 |
+ rules_without_repo.append ( rule ) |
50 |
+ |
51 |
+ # TODO: use distmap to restore repo ids |
52 |
+ assert '_' not in rule_dict |
53 |
+ rule_dict ['_'] = rules_without_repo |
54 |
+ |
55 |
return rule_dict |
56 |
# --- end of make_rule_dict (...) --- |
57 |
|
58 |
+ def make_rule_list ( self, do_sort=False ): |
59 |
+ if do_sort: |
60 |
+ rule_dict = self.make_rule_dict() |
61 |
+ for rules in rule_dict.values(): |
62 |
+ rules.sort ( key=( lambda k: k.priority ) ) |
63 |
+ |
64 |
+ undef_key = -1 |
65 |
+ #undef_key = max ( k for k in rule_dict if k != '_' ) + 1 |
66 |
+ |
67 |
+ return sorted ( |
68 |
+ rule_dict.items(), |
69 |
+ key=lambda kv: ( undef_key if kv[0] == '_' else kv[0] ) |
70 |
+ ) |
71 |
+ else: |
72 |
+ return list ( self.make_rule_dict().items() ) |
73 |
+ # --- end of make_rule_list (...) --- |
74 |
+ |
75 |
+ def make_ordered_rule_dict ( self ): |
76 |
+ # _not_ efficient: |
77 |
+ # build a dict -> build a list -> build a dict |
78 |
+ # |
79 |
+ return collections.OrderedDict ( self.make_rule_list ( do_sort=True ) ) |
80 |
+ # --- end of make_ordered_rule_dict (...) --- |
81 |
+ |
82 |
# --- end of DepresRuleGenerator --- |