From: "André Erdmann" <dywi@mailerd.de>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/R_overlay:gsoc13/next commit in: roverlay/ebuild/
Date: Wed, 19 Jun 2013 18:58:03 +0000 (UTC) [thread overview]
Message-ID: <1371667660.d58688a7338049e1762b5fe9702cca820fd7fee2.dywi@gentoo> (raw)
commit: d58688a7338049e1762b5fe9702cca820fd7fee2
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Wed Jun 19 18:47:40 2013 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> 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 <dywi@mailerd.de>
+# 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 ---
WARNING: multiple messages have this Message-ID (diff)
From: "André Erdmann" <dywi@mailerd.de>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/ebuild/
Date: Wed, 19 Jun 2013 18:59:05 +0000 (UTC) [thread overview]
Message-ID: <1371667660.d58688a7338049e1762b5fe9702cca820fd7fee2.dywi@gentoo> (raw)
Message-ID: <20130619185905.DP0vL_y_vOsEciYqlAUIsX_rjLNiWsjNwyGNzG3l6PU@z> (raw)
commit: d58688a7338049e1762b5fe9702cca820fd7fee2
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Wed Jun 19 18:47:40 2013 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> 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 <dywi@mailerd.de>
+# 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 ---
next reply other threads:[~2013-06-19 18:58 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-19 18:58 André Erdmann [this message]
2013-06-19 18:59 ` [gentoo-commits] proj/R_overlay:master commit in: roverlay/ebuild/ André Erdmann
-- strict thread matches above, loose matches on Subject: below --
2013-07-10 16:16 André Erdmann
2013-07-10 15:10 ` [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-07-10 8:26 André Erdmann
2013-07-08 22:47 André Erdmann
2013-07-08 22:47 André Erdmann
2013-07-08 22:47 André Erdmann
2013-06-05 18:08 André Erdmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1371667660.d58688a7338049e1762b5fe9702cca820fd7fee2.dywi@gentoo \
--to=dywi@mailerd.de \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox