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 09C411381F3 for ; Wed, 19 Jun 2013 18:59:15 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 91623E081B; Wed, 19 Jun 2013 18:59:09 +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 12F15E081B for ; Wed, 19 Jun 2013 18:59:08 +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 E392433E61B for ; Wed, 19 Jun 2013 18:59:07 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 6F475E5464 for ; Wed, 19 Jun 2013 18:59:05 +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: <1371667660.d58688a7338049e1762b5fe9702cca820fd7fee2.dywi@gentoo> Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/ebuild/ X-VCS-Repository: proj/R_overlay X-VCS-Files: roverlay/ebuild/useflagmap.py X-VCS-Directories: roverlay/ebuild/ X-VCS-Committer: dywi X-VCS-Committer-Name: André Erdmann X-VCS-Revision: d58688a7338049e1762b5fe9702cca820fd7fee2 X-VCS-Branch: master Date: Wed, 19 Jun 2013 18:59:05 +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: 6c04cd5f-060a-4244-ba39-3ab699a11827 X-Archives-Hash: b5258c55220c1014a45e6719b34cd206 Message-ID: <20130619185905.DP0vL_y_vOsEciYqlAUIsX_rjLNiWsjNwyGNzG3l6PU@z> commit: d58688a7338049e1762b5fe9702cca820fd7fee2 Author: André Erdmann mailerd de> AuthorDate: Wed Jun 19 18:47:40 2013 +0000 Commit: André Erdmann mailerd de> CommitDate: Wed Jun 19 18:47:40 2013 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=d58688a7 roverlay/ebuild: useflagmap This should've been committed yesterday. UseFlagRenameMap/UseFlagAliasMap allow to rename USE_EXPAND flags. --- roverlay/ebuild/useflagmap.py | 152 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) diff --git a/roverlay/ebuild/useflagmap.py b/roverlay/ebuild/useflagmap.py new file mode 100644 index 0000000..8b5d7a6 --- /dev/null +++ b/roverlay/ebuild/useflagmap.py @@ -0,0 +1,152 @@ +# R overlay -- ebuild creation, USE_EXPAND alias map +# -*- coding: utf-8 -*- +# Copyright (C) 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. + +import roverlay.util +import roverlay.strutil + +__all__ = [ 'UseFlagAliasMap', 'UseFlagRenameMap', ] + +class _UseFlagMapBase ( dict ): + + class AbstractMethod ( NotImplementedError ): + pass + + class BadFile ( Exception ): + pass + + def __init__ ( self, from_file=None ): + super ( _UseFlagMapBase, self ).__init__() + if from_file: + self.read_file ( from_file ) + # --- end of __init__ (...) --- + + def add_entry ( self, flag, alias_list, **kw ): + raise self.__class__.AbstractMethod() + # --- end of add_entry (...) --- + + def get_alias_map ( self ): + raise self.__class__.AbstractMethod() + # --- end of get_alias_map (...) --- + + def get_rename_map ( self ): + raise self.__class__.AbstractMethod() + # --- end of get_rename_map (...) --- + + def __invert__ ( self ): + raise self.__class__.AbstractMethod() + # --- end of __invert__ (...) --- + + def read_file ( self, filepath ): + with open ( filepath, 'rt' ) as FH: + current_flag = None + for line in FH.readlines(): + sline = line.strip() + if not sline or sline [0] == '#': + pass + elif sline [0] != line [0]: + # append to last flag + alias = roverlay.strutil.split_whitespace ( sline ) + if alias: + self.add_entry ( current_flag, alias ) + else: + next_flag, alias = roverlay.util.headtail ( + roverlay.strutil.split_whitespace ( sline ) + ) + next_flag = next_flag.lower() + if not next_flag or next_flag == '=': + raise self.__class__.BadFile() + elif alias: + if alias [0] == '=': + self.add_entry ( next_flag, alias [1:] ) + else: + self.add_entry ( next_flag, alias ) + # -- end if; + current_flag = next_flag + # -- end if; + # -- end for; + # --- end of read_file (...) --- + + def _iter_sorted ( self ): + return sorted ( self.items(), key=lambda e: e[0] ) + # --- end of _iter_sorted (...) --- + + def get_export_str ( self ): + raise self.__class__.AbstractMethod() + # --- end of get_export_str (...) --- + +# --- end of _UseFlagMapBase --- + + +# { new_name => [original_name...] } +class UseFlagAliasMap ( _UseFlagMapBase ): + + def add_entry ( self, flag, alias_list, not_a_list=False ): + existing_entry = self.get ( flag, None ) + if existing_entry: + if not_a_list: + existing_entry.add ( alias_list ) + else: + existing_entry.update ( alias_list ) + elif not_a_list: + self [flag] = { alias_list, } + else: + self [flag] = set ( alias_list ) + # --- end of add_entry (...) --- + + def get_rename_map ( self ): + c = UseFlagRenameMap() + for flag, alias in self.items(): + c.add_entry ( flag, alias ) + return c + # --- end of get_rename_map (...) --- + + def get_alias_map ( self ): + return self + # --- end of get_alias_map (...) --- + + def __invert__ ( self ): + return self.get_rename_map() + # --- end of __invert__ (...) --- + + def get_export_str ( self ): + return '\n'.join ( + '{flag} : {alias}'.format ( flag=k, alias=' '.join ( sorted ( v ) ) ) + for k, v in self._iter_sorted() + ) + # --- end of get_export_str (...) --- + +# --- end of UseFlagMap --- + + +# { original_name => new_name } +class UseFlagRenameMap ( _UseFlagMapBase ): + + def add_entry ( self, flag, alias_list ): + for alias in alias_list: + #assert alias not in self + self [alias] = flag + # --- end of add_entry (...) --- + + def get_rename_map ( self ): + return self + # --- end of get_rename_map (...) --- + + def get_alias_map ( self ): + c = UseFlagAliasMap() + for alias, flag in self.items(): + c.add_entry ( flag, alias, not_a_list=True ) + return c + # --- end of get_alias_map ( self ) + + def __invert__ ( self ): + return self.get_alias_map() + # --- end of __invert__ (...) --- + + def get_export_str ( self ): + return self.get_alias_map().get_export_str() + # --- end of get_export_str (...) --- + +# --- end of UseFlagRenameMap ---