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 55C94138202 for ; Tue, 18 Jun 2013 14:12:46 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id A25C9E07D1; Tue, 18 Jun 2013 14:12:45 +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 193EAE07FA for ; Tue, 18 Jun 2013 14:12:44 +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 5D87733E049 for ; Tue, 18 Jun 2013 14:12:43 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 0581EE468F for ; Tue, 18 Jun 2013 14:12:42 +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: <1371559761.33cbb79fc1631d4354db1cde777ae33be73d5a99.dywi@gentoo> Subject: [gentoo-commits] proj/R_overlay:gsoc13/next commit in: roverlay/ebuild/, roverlay/config/, roverlay/, roverlay/overlay/ X-VCS-Repository: proj/R_overlay X-VCS-Files: roverlay/__init__.py roverlay/config/const.py roverlay/config/entrymap.py roverlay/config/loader.py roverlay/config/tree.py roverlay/ebuild/depres.py roverlay/ebuild/evars.py roverlay/overlay/root.py X-VCS-Directories: roverlay/ebuild/ roverlay/config/ roverlay/ roverlay/overlay/ X-VCS-Committer: dywi X-VCS-Committer-Name: André Erdmann X-VCS-Revision: 33cbb79fc1631d4354db1cde777ae33be73d5a99 X-VCS-Branch: gsoc13/next Date: Tue, 18 Jun 2013 14:12:42 +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: 2b72f751-bb86-4df6-87ca-1e57fad2fa78 X-Archives-Hash: 57be9504678c2fc7dbf8d4a03e6a7301 commit: 33cbb79fc1631d4354db1cde777ae33be73d5a99 Author: André Erdmann mailerd de> AuthorDate: Tue Jun 18 12:49:21 2013 +0000 Commit: André Erdmann mailerd 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/.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 + '.') 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 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 3D5DD138200 for ; Tue, 18 Jun 2013 14:13:06 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 9B872E0898; Tue, 18 Jun 2013 14:13:00 +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 1F164E087D for ; Tue, 18 Jun 2013 14:12:59 +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 ACD5933E58C for ; Tue, 18 Jun 2013 14:12:58 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 58F9CE5464 for ; Tue, 18 Jun 2013 14:12:56 +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: <1371559761.33cbb79fc1631d4354db1cde777ae33be73d5a99.dywi@gentoo> Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/ebuild/, roverlay/config/, roverlay/, roverlay/overlay/ X-VCS-Repository: proj/R_overlay X-VCS-Files: roverlay/__init__.py roverlay/config/const.py roverlay/config/entrymap.py roverlay/config/loader.py roverlay/config/tree.py roverlay/ebuild/depres.py roverlay/ebuild/evars.py roverlay/overlay/root.py X-VCS-Directories: roverlay/ebuild/ roverlay/config/ roverlay/ roverlay/overlay/ X-VCS-Committer: dywi X-VCS-Committer-Name: André Erdmann X-VCS-Revision: 33cbb79fc1631d4354db1cde777ae33be73d5a99 X-VCS-Branch: master Date: Tue, 18 Jun 2013 14:12:56 +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: a5ef8162-a8dc-4311-8119-b4c67604756b X-Archives-Hash: 3a98623540bad3226d0cf9b988e7c288 Message-ID: <20130618141256.TSdPndfafCmXentz7RNgkoChEtkgdcoY-sWY_N1xBh8@z> commit: 33cbb79fc1631d4354db1cde777ae33be73d5a99 Author: André Erdmann mailerd de> AuthorDate: Tue Jun 18 12:49:21 2013 +0000 Commit: André Erdmann mailerd 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/.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 + '.') 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