aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--roverlay/__init__.py10
-rw-r--r--roverlay/config/const.py1
-rw-r--r--roverlay/config/entrymap.py22
-rw-r--r--roverlay/config/loader.py19
-rw-r--r--roverlay/config/tree.py6
-rw-r--r--roverlay/ebuild/depres.py5
-rw-r--r--roverlay/ebuild/evars.py5
-rw-r--r--roverlay/overlay/root.py42
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