public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/R_overlay:gsoc13/next commit in: roverlay/ebuild/, roverlay/config/, roverlay/, roverlay/overlay/
@ 2013-06-18 14:12 André Erdmann
  2013-06-18 14:12 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
  0 siblings, 1 reply; 2+ messages in thread
From: André Erdmann @ 2013-06-18 14:12 UTC (permalink / raw
  To: gentoo-commits

commit:     33cbb79fc1631d4354db1cde777ae33be73d5a99
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Tue Jun 18 12:49:21 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Tue Jun 18 12:49:21 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=33cbb79f

USE_EXPAND: rename flags, read flag desc file

* the USE_EXPAND flags can now be renamed by dict-like entries in a
  USE_EXTEND_RENAME file
* the USE_EXPAND_DESC file can be used to provide flag descriptions

---
 roverlay/__init__.py        | 10 ++++++++--
 roverlay/config/const.py    |  1 -
 roverlay/config/entrymap.py | 22 ++++++++++++++++++++--
 roverlay/config/loader.py   | 19 +++++++++++++++++++
 roverlay/config/tree.py     |  6 ++++++
 roverlay/ebuild/depres.py   |  5 ++++-
 roverlay/ebuild/evars.py    |  5 +++--
 roverlay/overlay/root.py    | 42 +++++++++++++++++++++++++++++++-----------
 8 files changed, 91 insertions(+), 19 deletions(-)

diff --git a/roverlay/__init__.py b/roverlay/__init__.py
index 4894efd..5b4007e 100644
--- a/roverlay/__init__.py
+++ b/roverlay/__init__.py
@@ -44,16 +44,22 @@ def load_config_file ( cfile, extraconf=None ):
    """
    roverlay_config = roverlay.config.access()
 
+   confloader = roverlay_config.get_loader()
+
    if cfile:
-      roverlay_config.get_loader().load_config ( cfile )
+      confloader.load_config ( cfile )
 
    if extraconf is not None:
       roverlay_config.merge_with ( extraconf )
 
    roverlay.recipe.easylogger.setup ( roverlay_config )
 
-   roverlay_config.get_loader().load_field_definition (
+   confloader.load_field_definition (
       roverlay_config.get_or_fail ( "DESCRIPTION.field_definition_file" )
    )
 
+   confloader.load_use_expand_map (
+      roverlay_config.get ( "EBUILD.USE_EXPAND.rename_file" )
+   )
+
    return roverlay_config

diff --git a/roverlay/config/const.py b/roverlay/config/const.py
index 6a34f5c..3d330ba 100644
--- a/roverlay/config/const.py
+++ b/roverlay/config/const.py
@@ -46,7 +46,6 @@ _CONSTANTS = dict (
 
       USE_EXPAND = dict (
          name   = 'R_SUGGESTS',
-         rename = None,
       ),
    ),
 

diff --git a/roverlay/config/entrymap.py b/roverlay/config/entrymap.py
index 03a5f30..4dbce44 100644
--- a/roverlay/config/entrymap.py
+++ b/roverlay/config/entrymap.py
@@ -213,6 +213,12 @@ CONFIG_ENTRY_MAP = dict (
       ''',
    ),
 
+   overlay_backup_desc = dict (
+      path        = [ 'OVERLAY', 'backup_desc' ],
+      value_type  = yesno,
+      description = 'back up files in/from profiles/desc',
+   ),
+
    overlay_category = dict (
       desc = "overlay category to use for created ebuilds, e.g. 'sci-R'.",
    ),
@@ -295,6 +301,7 @@ CONFIG_ENTRY_MAP = dict (
    ),
 
    # * alias
+   backup_desc               = 'overlay_backup_desc',
    eclass                    = 'overlay_eclass',
    keep_nth_latest           = 'overlay_keep_nth_latest',
    manifest_implementation   = 'overlay_manifest_implementation',
@@ -313,6 +320,12 @@ CONFIG_ENTRY_MAP = dict (
 #      value_type  = str,
 #   ),
 
+   ebuild_use_expand_desc = dict (
+      path        = [ 'EBUILD', 'USE_EXPAND', 'desc_file', ],
+      description = "USE_EXPAND flag description file",
+      value_type  = 'fs_file',
+   ),
+
    ebuild_use_expand_name = dict (
       path        = [ 'EBUILD', 'USE_EXPAND', 'name', ],
       description = (
@@ -320,12 +333,17 @@ CONFIG_ENTRY_MAP = dict (
       )
    ),
 
-   ebuild_use_expand_rename = None,
+   ebuild_use_expand_rename = dict (
+      path        = [ 'EBUILD', 'USE_EXPAND', 'rename_file', ],
+      description = 'file for renaming USE_EXPAND flags',
+      value_type  = 'fs_file',
+   ),
 
    # * alias
    #eapi              = 'ebuild_eapi',
+   use_expand_desc   = 'ebuild_use_expand_desc',
    use_expand_name   = 'ebuild_use_expand_name',
-   #use_expand_rename = 'ebuild_use_expand_rename',
+   use_expand_rename = 'ebuild_use_expand_rename',
 
    # --- ebuild
 

diff --git a/roverlay/config/loader.py b/roverlay/config/loader.py
index 182915a..debc740 100644
--- a/roverlay/config/loader.py
+++ b/roverlay/config/loader.py
@@ -22,6 +22,8 @@ from roverlay.config          import fielddef
 from roverlay.config.util     import get_config_path
 from roverlay.config.entrymap import CONFIG_ENTRY_MAP
 
+import roverlay.ebuild.useflagmap
+
 def listlike ( var ):
    return hasattr ( var, '__iter__' ) and not isinstance ( var, str )
 # --- end of listlike (...) ---
@@ -300,6 +302,23 @@ class ConfigLoader ( object ):
 
    # --- end of load_config (...) ---
 
+   def load_use_expand_map ( self, map_file ):
+      """Loads the USE_EXPAND flag rename 'map'.
+
+      arguments:
+      * map_file --
+      """
+      if map_file:
+         # a is a map in file "format": dict { flag => *alias }
+         a = roverlay.ebuild.useflagmap.UseFlagAliasMap ( from_file=map_file )
+
+         # a dict { alias => flag } is required here:
+         if self.ctree._use_extend_map:
+            self.ctree._use_extend_map.update ( ~a )
+         else:
+            self.ctree._use_extend_map = ~a
+   # --- end of load_use_expand_map
+
    def load_field_definition ( self, def_file, lenient=False ):
       """Loads a field definition file.
       Please see the example file for format details.

diff --git a/roverlay/config/tree.py b/roverlay/config/tree.py
index 91a93ad..3466889 100644
--- a/roverlay/config/tree.py
+++ b/roverlay/config/tree.py
@@ -52,6 +52,7 @@ class ConfigTree ( object ):
       self._config = const.clone() if import_const else dict ()
       self._const_imported    = import_const
       self._field_definition  = None
+      self._use_extend_map    = None
 
    # --- end of __init__ (...) ---
 
@@ -225,6 +226,11 @@ class ConfigTree ( object ):
          return self._field_definition
    # --- end of get_field_definition (...) ---
 
+   def get_use_expand_map ( self ):
+      """Returns the USE_EXPAND rename map stored in this ConfigTree."""
+      return self._use_extend_map
+   # --- end of get_use_expand_map (...) ---
+
    def _tree_to_str ( self, root, name, level=0 ):
       """Returns string representation of a config tree rooted at root.
       Uses recursion (DFS).

diff --git a/roverlay/ebuild/depres.py b/roverlay/ebuild/depres.py
index eeea67c..ac65e31 100644
--- a/roverlay/ebuild/depres.py
+++ b/roverlay/ebuild/depres.py
@@ -53,7 +53,10 @@ FIELDS = {
 
 def create_use_expand_var ( *args, **kwargs ):
    return evars.R_SUGGESTS_USE_EXPAND (
-      config.get_or_fail ( "EBUILD.USE_EXPAND.name" ), *args, **kwargs
+      config.get_or_fail ( "EBUILD.USE_EXPAND.name" ),
+      *args,
+      use_expand_map=config.access().get_use_expand_map(),
+      **kwargs
    )
 
 EBUILDVARS = {

diff --git a/roverlay/ebuild/evars.py b/roverlay/ebuild/evars.py
index 8cafaef..ef5016b 100644
--- a/roverlay/ebuild/evars.py
+++ b/roverlay/ebuild/evars.py
@@ -55,7 +55,7 @@ class UseExpandListValue (
          **kw
       )
       self.insert_leading_newline = True
-      self.alias_map              = alias_map
+      self.alias_map              = alias_map or None
       self.basename               = basename.rstrip ( '_' ).lower()
       self.sort_flags             = True
 
@@ -63,10 +63,11 @@ class UseExpandListValue (
    # --- end of __init__ (...) ---
 
    def _get_depstr_key ( self, depstr ):
+      # tries to get the use flag name from depstr
       match = self.__class__.RE_USENAME.match ( depstr )
       if match:
          return self._get_use_key (
-            match.group ( "pn" ) or match.group ( "pf" )
+            ( match.group ( "pn" ) or match.group ( "pf" ) ).lower()
          )
       else:
          raise ValueError (

diff --git a/roverlay/overlay/root.py b/roverlay/overlay/root.py
index 71156df..c2522b7 100644
--- a/roverlay/overlay/root.py
+++ b/roverlay/overlay/root.py
@@ -179,6 +179,11 @@ class Overlay ( object ):
          self.scan()
 
       self.import_ebuilds ( overwrite=( not incremental ) )
+
+      if __debug__:
+         # verify that these config keys exist:
+         roverlay.config.get_or_fail ( "EBUILD.USE_EXPAND.name" ).rstrip()
+         ##roverlay.config.get ( 'OVERLAY.backup_desc', True )
    # --- end of __init__ (...) ---
 
    def _get_category ( self, category ):
@@ -313,21 +318,23 @@ class Overlay ( object ):
             write_profiles_file ( 'categories', cats + '\n' )
 
          # profiles/desc/<r_suggests>.desc
-         # !!! (late) config access (FIXME)
-
          use_expand_name = roverlay.config.get_or_fail (
             "EBUILD.USE_EXPAND.name"
          ).rstrip ( "_" )
 
          self._write_rsuggests_use_desc (
-            (
+            desc_file = (
                self._profiles_dir + os.sep + 'desc' + os.sep
                + use_expand_name.lower() + '.desc'
             ),
-            use_expand_name.upper(),
-            roverlay.config.get ( 'OVERLAY.backup_desc', True )
+            use_expand_name = use_expand_name.upper(),
+            backup_file = roverlay.config.get ( 'OVERLAY.backup_desc', True ),
+            flagdesc_file = roverlay.config.get (
+               'EBUILD.USE_EXPAND.desc_file', None
+            ),
          )
 
+
          # profiles/use.desc
          if self._use_desc:
             write_profiles_file ( 'use.desc', self._use_desc + '\n' )
@@ -349,7 +356,8 @@ class Overlay ( object ):
    # --- end of _init_overlay (...) ---
 
    def _write_rsuggests_use_desc (
-      self, desc_file, use_expand_name, backup_file, rewrite=False
+      self, desc_file, use_expand_name, backup_file, flagdesc_file,
+      rewrite=False
    ):
       """Creates a USE_EXPAND description file.
 
@@ -361,6 +369,7 @@ class Overlay ( object ):
       * backup_file     -- move desc_file to backup_file before overwriting it
                            This can also be an int i (=> desc_file + '.<i>')
                            or a bool (if True => desc_file + '.bak').
+      * flagdesc_file   -- file with flag descriptions (will be read only)
       * rewrite         -- force recreation of the desc file
       """
       FLAG_SEPA  = ' - '
@@ -373,12 +382,12 @@ class Overlay ( object ):
          shutil.move ( desc_file, dest )
       # --- end of do_backup (...) ---
 
-      def read_desc_file():
+      def read_desc_file ( desc_file ):
          """Reads the old desc file (if it exists).
          Returns a 3-tuple ( list header, dict flags, bool file_existed ).
 
          arguments:
-         * @implicit desc_file --
+         * desc_file --
 
          Passes all exceptions (IOError, ...) but "file does not exist".
          """
@@ -453,14 +462,25 @@ class Overlay ( object ):
             yield NEWLINE
       # --- end of gen_desc (...) ---
 
-      header, old_flags, can_backup = read_desc_file()
+      header, old_flags, can_backup = read_desc_file ( desc_file )
+
+      if flagdesc_file:
+         flagdesc_header, flagdesc, flagdesc_cb = read_desc_file (
+            str ( flagdesc_file )
+         )
+         del flagdesc_header, flagdesc_cb
+      else:
+         flagdesc = dict()
 
       if self._incremental:
          # incremental: add new flags
          #  Create dict flag=>None that contains all new flags
          #  and copy old_flags "over" it.
          #
-         flags = dict.fromkeys ( self._rsuggests_flags )
+         flags = {
+            flag: flagdesc.get ( flag, None )
+            for flag in self._rsuggests_flags
+         }
          flags.update ( old_flags )
       else:
          # not incremental: discard old flags
@@ -468,7 +488,7 @@ class Overlay ( object ):
          #  from old_flags if available.
          #
          flags = {
-            flag: old_flags.get ( flag, None )
+            flag: old_flags.get ( flag, None ) or flagdesc.get ( flag, None )
             for flag in self._rsuggests_flags
          }
       # -- end if


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2013-06-18 14:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-18 14:12 [gentoo-commits] proj/R_overlay:gsoc13/next commit in: roverlay/ebuild/, roverlay/config/, roverlay/, roverlay/overlay/ André Erdmann
2013-06-18 14:12 ` [gentoo-commits] proj/R_overlay:master " André Erdmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox