Gentoo Archives: gentoo-commits

From: "André Erdmann" <dywi@×××××××.de>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/overlay/
Date: Mon, 02 Sep 2013 16:21:18
Message-Id: 1378138689.0b3a8fd9aada581d8510e4f2bd4a433702d792b0.dywi@gentoo
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 ---