From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 660481381F3 for ; Mon, 2 Sep 2013 16:21:18 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id A1150E0D6A; Mon, 2 Sep 2013 16:21:16 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id F1306E0D5B for ; Mon, 2 Sep 2013 16:21:15 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id D5E3833EAC4 for ; Mon, 2 Sep 2013 16:21:14 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 874E4E5463 for ; Mon, 2 Sep 2013 16:21:13 +0000 (UTC) From: "André Erdmann" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "André Erdmann" Message-ID: <1378138689.0b3a8fd9aada581d8510e4f2bd4a433702d792b0.dywi@gentoo> Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/overlay/ X-VCS-Repository: proj/R_overlay X-VCS-Files: roverlay/overlay/rulegen.py X-VCS-Directories: roverlay/overlay/ X-VCS-Committer: dywi X-VCS-Committer-Name: André Erdmann X-VCS-Revision: 0b3a8fd9aada581d8510e4f2bd4a433702d792b0 X-VCS-Branch: master Date: Mon, 2 Sep 2013 16:21:13 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 0d78dd2a-3714-4d24-a033-310a9de4e92c X-Archives-Hash: 2c4f528c9dc6906dba87be0e5bd7c9ae commit: 0b3a8fd9aada581d8510e4f2bd4a433702d792b0 Author: André Erdmann mailerd de> AuthorDate: Mon Sep 2 16:18:09 2013 +0000 Commit: André Erdmann mailerd de> CommitDate: Mon Sep 2 16:18:09 2013 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=0b3a8fd9 roverlay/overlay: depres rule generator --- roverlay/overlay/rulegen.py | 71 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/roverlay/overlay/rulegen.py b/roverlay/overlay/rulegen.py new file mode 100644 index 0000000..7610e9a --- /dev/null +++ b/roverlay/overlay/rulegen.py @@ -0,0 +1,71 @@ +# R overlay -- overlay package, depres rule generator +# -*- coding: utf-8 -*- +# Copyright (C) 2012, 2013 André Erdmann +# Distributed under the terms of the GNU General Public License; +# either version 2 of the License, or (at your option) any later version. + +class DepresRuleGenerator ( object ): + + def __init__ ( self, overlay ): + super ( DepresRuleGenerator, self ).__init__() + self.overlay_ref = overlay.get_ref() + self.rule_class = None + # --- end of __init__ (...) --- + + def make_rule_args ( self ): + overlay = self.overlay_ref.deref_safe() + default_category_name = overlay.default_category + + # COULDFIX: direct access to "private" attributes + for cat_name, cat in overlay._categories.items(): + is_default_category = cat_name == default_category_name + + for pkgdir_name, pkgdir in cat._subdirs.items(): + if not pkgdir.empty(): + repo_ids = set() + package_names = set() + for p_info in pkgdir.iter_package_info(): + package_name = p_info.get ( + 'package_name', do_fallback=True + ) + if package_name: + package_names.add ( package_name ) + + repo = p_info.get ( 'origin', do_fallback=True ) + if repo is not None: + repo_ids.add ( repo.get_identifier() ) + # -- end for + + yield ( + repo_ids, + dict ( + dep_str = pkgdir_name, + resolving_package = ( cat_name + '/' + pkgdir_name ), + is_selfdep = 2 if is_default_category else 1, + priority = 90, + finalize = True, + selfdep_package_names = package_names, + ) + ) + # -- end for pkgdir + # -- end for category + # --- end of make_rule_args (...) --- + + def make_rules ( self ): + for repo_ids, rule_kwargs in self.make_rule_args(): + yield ( repo_ids, self.rule_class ( **rule_kwargs ) ) + # --- end of make_rules (...) --- + + def make_rule_dict ( self ): + rule_dict = dict() + 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 ] + return rule_dict + # --- end of make_rule_dict (...) --- + +# --- end of DepresRuleGenerator ---