1 |
commit: 0b3a8fd9aada581d8510e4f2bd4a433702d792b0 |
2 |
Author: André Erdmann <dywi <AT> mailerd <DOT> de> |
3 |
AuthorDate: Mon Sep 2 16:18:09 2013 +0000 |
4 |
Commit: André Erdmann <dywi <AT> mailerd <DOT> de> |
5 |
CommitDate: Mon Sep 2 16:18:09 2013 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=0b3a8fd9 |
7 |
|
8 |
roverlay/overlay: depres rule generator |
9 |
|
10 |
--- |
11 |
roverlay/overlay/rulegen.py | 71 +++++++++++++++++++++++++++++++++++++++++++++ |
12 |
1 file changed, 71 insertions(+) |
13 |
|
14 |
diff --git a/roverlay/overlay/rulegen.py b/roverlay/overlay/rulegen.py |
15 |
new file mode 100644 |
16 |
index 0000000..7610e9a |
17 |
--- /dev/null |
18 |
+++ b/roverlay/overlay/rulegen.py |
19 |
@@ -0,0 +1,71 @@ |
20 |
+# R overlay -- overlay package, depres rule generator |
21 |
+# -*- coding: utf-8 -*- |
22 |
+# Copyright (C) 2012, 2013 André Erdmann <dywi@×××××××.de> |
23 |
+# Distributed under the terms of the GNU General Public License; |
24 |
+# either version 2 of the License, or (at your option) any later version. |
25 |
+ |
26 |
+class DepresRuleGenerator ( object ): |
27 |
+ |
28 |
+ def __init__ ( self, overlay ): |
29 |
+ super ( DepresRuleGenerator, self ).__init__() |
30 |
+ self.overlay_ref = overlay.get_ref() |
31 |
+ self.rule_class = None |
32 |
+ # --- end of __init__ (...) --- |
33 |
+ |
34 |
+ def make_rule_args ( self ): |
35 |
+ overlay = self.overlay_ref.deref_safe() |
36 |
+ default_category_name = overlay.default_category |
37 |
+ |
38 |
+ # COULDFIX: direct access to "private" attributes |
39 |
+ for cat_name, cat in overlay._categories.items(): |
40 |
+ is_default_category = cat_name == default_category_name |
41 |
+ |
42 |
+ for pkgdir_name, pkgdir in cat._subdirs.items(): |
43 |
+ if not pkgdir.empty(): |
44 |
+ repo_ids = set() |
45 |
+ package_names = set() |
46 |
+ for p_info in pkgdir.iter_package_info(): |
47 |
+ package_name = p_info.get ( |
48 |
+ 'package_name', do_fallback=True |
49 |
+ ) |
50 |
+ if package_name: |
51 |
+ package_names.add ( package_name ) |
52 |
+ |
53 |
+ repo = p_info.get ( 'origin', do_fallback=True ) |
54 |
+ if repo is not None: |
55 |
+ repo_ids.add ( repo.get_identifier() ) |
56 |
+ # -- end for <get repo ids / package names> |
57 |
+ |
58 |
+ yield ( |
59 |
+ repo_ids, |
60 |
+ dict ( |
61 |
+ dep_str = pkgdir_name, |
62 |
+ resolving_package = ( cat_name + '/' + pkgdir_name ), |
63 |
+ is_selfdep = 2 if is_default_category else 1, |
64 |
+ priority = 90, |
65 |
+ finalize = True, |
66 |
+ selfdep_package_names = package_names, |
67 |
+ ) |
68 |
+ ) |
69 |
+ # -- end for pkgdir |
70 |
+ # -- end for category |
71 |
+ # --- end of make_rule_args (...) --- |
72 |
+ |
73 |
+ def make_rules ( self ): |
74 |
+ for repo_ids, rule_kwargs in self.make_rule_args(): |
75 |
+ yield ( repo_ids, self.rule_class ( **rule_kwargs ) ) |
76 |
+ # --- end of make_rules (...) --- |
77 |
+ |
78 |
+ def make_rule_dict ( self ): |
79 |
+ rule_dict = dict() |
80 |
+ for repo_ids, rule_kwargs in self.make_rule_args(): |
81 |
+ rule = self.rule_class ( **rule_kwargs ) |
82 |
+ for repo_id in repo_ids: |
83 |
+ if repo_id in rule_dict: |
84 |
+ rule_dict [repo_id].append ( rule ) |
85 |
+ else: |
86 |
+ rule_dict [repo_id] = [ rule ] |
87 |
+ return rule_dict |
88 |
+ # --- end of make_rule_dict (...) --- |
89 |
+ |
90 |
+# --- end of DepresRuleGenerator --- |