public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
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 ---


             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