* [gentoo-commits] proj/R_overlay:master commit in: /, roverlay/config/, roverlay/, roverlay/overlay/
@ 2013-01-09 19:15 André Erdmann
0 siblings, 0 replies; only message in thread
From: André Erdmann @ 2013-01-09 19:15 UTC (permalink / raw
To: gentoo-commits
commit: c21ba468360abafe892920d675c4c4731bc40b7f
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Thu Nov 29 19:53:33 2012 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Thu Nov 29 21:19:16 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=c21ba468
misc changes
* roverlay.py,
-> renamed "overlay" variable to "overlay_creator"
-> some action if-branches replaced by elif-branches
* roverlay/__init__.py,
-> replaced "config.<sth>" and "roverlay.config.<sth>" with
"roverlay_config.<sth>" in load_config_file(...)
* roverlay/overlay/,
-> the default overlay is now created in ./root.py (new_configured())
instead of ./creator.py
-> fix Overlay.list_packages()
* roverlay/packageinfo.py
-> make update key sets class-wide
Bump version to 0.2.1
---
roverlay.py | 78 ++++++++++++++++++++++---------------------
roverlay/__init__.py | 21 +++++++-----
roverlay/config/static.py | 13 +++----
roverlay/overlay/creator.py | 8 +---
roverlay/overlay/root.py | 50 ++++++++++++++++++++++-----
roverlay/packageinfo.py | 66 ++++++++++++++++++++++++++++--------
roverlay/util.py | 3 +-
7 files changed, 153 insertions(+), 86 deletions(-)
diff --git a/roverlay.py b/roverlay.py
index 3a0232a..51dfeec 100755
--- a/roverlay.py
+++ b/roverlay.py
@@ -56,8 +56,6 @@ def roverlay_main():
return call ( *args, **kw )
# --- end of optionally (...) ---
- #repo_list = None
- #overlay = None
def run_sync():
if "sync" in actions_done: return
try:
@@ -97,21 +95,22 @@ def roverlay_main():
if "create" in actions_done: return
#run_sync()
try:
- global overlay
- overlay = OverlayCreator (
+ global overlay_creator
+ overlay_creator = OverlayCreator (
skip_manifest = OPTION ( 'skip_manifest' ),
incremental = OPTION ( 'incremental' ),
allow_write = OPTION ( 'write_overlay' ),
immediate_ebuild_writes = OPTION ( 'immediate_ebuild_writes' ),
)
- repo_list.add_packages ( overlay.add_package )
+ repo_list.add_packages ( overlay_creator.add_package )
- overlay.run ( close_when_done=True )
+ overlay_creator.run ( close_when_done=True )
- optionally ( overlay.write_overlay, 'write_overlay' )
- optionally ( overlay.show_overlay, 'show_overlay' )
- if OPTION ( 'print_stats' ): print ( "\n" + overlay.stats_str() )
+ optionally ( overlay_creator.write_overlay, 'write_overlay' )
+ optionally ( overlay_creator.show_overlay, 'show_overlay' )
+ if OPTION ( 'print_stats' ):
+ print ( "\n" + overlay_creator.stats_str() )
set_action_done ( "create" )
@@ -123,11 +122,11 @@ def roverlay_main():
else:
raise
finally:
- if 'overlay' in locals() and not overlay.closed:
+ if 'overlay_creator' in locals() and not overlay_creator.closed:
# This is important 'cause it unblocks remaining ebuild creation
# jobs/threads, specifically waiting EbuildJobChannels in depres.
# It also writes the deps_unresolved file
- overlay.close()
+ overlay_creator.close()
# --- end of run_overlay_create() ---
# get args
@@ -235,11 +234,11 @@ def roverlay_main():
if 'EXIT_AFTER_CONFIG' in locals() and EXIT_AFTER_CONFIG:
- sys.exit ( os.EX_OK )
-
+ pass
+ #sys.exit ( os.EX_OK )
# switch to depres console
- if 'depres_console' in actions or 'depres' in actions:
+ elif 'depres_console' in actions or 'depres' in actions:
if len ( actions ) != 1:
die ( "depres_console cannot be run with other commands!", DIE.USAGE )
@@ -259,38 +258,41 @@ def roverlay_main():
else:
raise
+ else:
+ # sync/create
+ # -- import roverlay modules
+ try:
+ from roverlay.remote import RepoList
+ from roverlay.overlay.creator import OverlayCreator
+ except ImportError:
+ if HIDE_EXCEPTIONS:
+ die ( "Cannot import roverlay modules!", DIE.IMPORT )
+ else:
+ raise
- # -- import roverlay modules
-
- try:
- from roverlay.remote import RepoList
- from roverlay.overlay.creator import OverlayCreator
- except ImportError:
- if HIDE_EXCEPTIONS:
- die ( "Cannot import roverlay modules!", DIE.IMPORT )
- else:
- raise
+ # -- run methods (and some vars)
+ # imports: nothing
- # -- run methods (and some vars)
- # imports: nothing
+ #repo_list = None
+ #overlay_creator = None
- actions_done = set()
- set_action_done = actions_done.add
+ actions_done = set()
+ set_action_done = actions_done.add
- # -- run
+ # -- run
- # always run sync 'cause commands = {create,sync}
- # and create implies (no)sync
- run_sync()
+ # always run sync 'cause commands = {create,sync}
+ # and create implies (no)sync
+ run_sync()
- if 'create' in actions: run_overlay_create()
+ if 'create' in actions: run_overlay_create()
- if len ( actions ) > len ( actions_done ):
- die (
- "Some actions (out of {!r}) could not be performed!".format (
- actions ), DIE.CMD_LEFTOVER
- )
+ if len ( actions ) > len ( actions_done ):
+ die (
+ "Some actions (out of {!r}) could not be performed!".format (
+ actions ), DIE.CMD_LEFTOVER
+ )
# --- end of main() ---
if __name__ == '__main__':
diff --git a/roverlay/__init__.py b/roverlay/__init__.py
index ba8c032..f39c3a5 100644
--- a/roverlay/__init__.py
+++ b/roverlay/__init__.py
@@ -13,9 +13,9 @@ load_config_file) and some information vars (__version__, name, ...).
__all__ = [ 'setup_initial_logger', 'load_config_file', ]
name = "R_overlay"
-version = ( 0, 2 )
-__version__ = "0.2"
-#__version__ = '.'.join ( str ( i ) for i in version )
+version = ( 0, 2, 1 )
+#__version__ = "0.2.1"
+__version__ = '.'.join ( str ( i ) for i in version )
description_str = "R overlay creation (roverlay) " + __version__
license_str=(
@@ -43,15 +43,18 @@ def load_config_file ( cfile, extraconf=None ):
* extraconf -- a dict with additional config entries that will override
entries read from cfile
"""
+ roverlay_config = roverlay.config.access()
+
if cfile:
- roverlay.config.get_loader().load_config ( cfile )
+ roverlay_config.get_loader().load_config ( cfile )
if extraconf is not None:
- roverlay.config.access().merge_with ( extraconf )
+ roverlay_config.merge_with ( extraconf )
- roverlay.recipe.easylogger.setup ( roverlay.config.access() )
+ roverlay.recipe.easylogger.setup ( roverlay_config )
- fdef_f = config.get_or_fail ( "DESCRIPTION.field_definition_file" )
- roverlay.config.get_loader().load_field_definition ( fdef_f )
+ roverlay_config.get_loader().load_field_definition (
+ roverlay_config.get_or_fail ( "DESCRIPTION.field_definition_file" )
+ )
- return config.access()
+ return roverlay_config
diff --git a/roverlay/config/static.py b/roverlay/config/static.py
index dda6b58..e4c789e 100644
--- a/roverlay/config/static.py
+++ b/roverlay/config/static.py
@@ -37,14 +37,11 @@ def get ( key, fallback_value=None, fail_if_unset=False ):
* fallback_value --
* fail_if_unset --
"""
- if not fallback_value is None:
- return access().get (
- key, fallback_value=fallback_value, fail_if_unset=fail_if_unset
- )
- else:
- return access().get (
- key, fallback_value=None, fail_if_unset=fail_if_unset
- )
+ return access().get (
+ key,
+ fallback_value = fallback_value,
+ fail_if_unset = fail_if_unset
+ )
# --- end of get (...) ---
def get_or_fail ( key ):
diff --git a/roverlay/overlay/creator.py b/roverlay/overlay/creator.py
index 4b500df..1e1c3cb 100644
--- a/roverlay/overlay/creator.py
+++ b/roverlay/overlay/creator.py
@@ -50,6 +50,7 @@ class PseudoAtomicCounter ( object ):
if step > 0:
self._value += step
ret = ( self._value, old_val )
+ #elif step < 0: raise...
else:
ret = old_val
finally:
@@ -93,13 +94,8 @@ class OverlayCreator ( object ):
self._err_queue = errorqueue.ErrorQueue()
# init overlay using config values
- self.overlay = Overlay (
- name = config.get_or_fail ( 'OVERLAY.name' ),
+ self.overlay = Overlay.new_configured (
logger = self.logger,
- directory = config.get_or_fail ( 'OVERLAY.dir' ),
- default_category = config.get_or_fail ( 'OVERLAY.category' ),
- eclass_files = config.get ( 'OVERLAY.eclass_files', None ),
- ebuild_header = config.get ( 'EBUILD.default_header', None ),
incremental = incremental,
write_allowed = allow_write,
skip_manifest = skip_manifest,
diff --git a/roverlay/overlay/root.py b/roverlay/overlay/root.py
index 99c0850..ae707ef 100644
--- a/roverlay/overlay/root.py
+++ b/roverlay/overlay/root.py
@@ -27,13 +27,45 @@ from roverlay import config, util
from roverlay.overlay.category import Category
from roverlay.overlay.header import EbuildHeader
-DEFAULT_USE_DESC = '\n'.join ( [
- 'byte-compile - enable byte compiling',
- 'R_suggests - install recommended packages'
-] )
-
-
class Overlay ( object ):
+ DEFAULT_USE_DESC = '\n'.join ( (
+ 'byte-compile - enable byte compiling',
+ 'R_suggests - install recommended packages'
+ ) )
+
+ @classmethod
+ def new_configured ( cls,
+ logger, incremental, write_allowed, skip_manifest,
+ runtime_incremental=False
+ ):
+ """
+ Returns a new Overlay instance that uses the roverlay configuration where
+ possible.
+
+ arguments:
+ * logger --
+ * incremental --
+ * write_allowed --
+ * skip_manifest --
+ * runtime_incremental --
+ * readonly -- see Overlay.__init__
+ """
+ name = config.get_or_fail ( 'OVERLAY.name' )
+ return cls (
+ name = name,
+ logger = (
+ logger or logging.getLogger ( 'Overlay:' + name )
+ ),
+ directory = config.get_or_fail ( 'OVERLAY.dir' ),
+ default_category = config.get_or_fail ( 'OVERLAY.category' ),
+ eclass_files = config.get ( 'OVERLAY.eclass_files', None ),
+ ebuild_header = config.get ( 'EBUILD.default_header', None ),
+ incremental = incremental,
+ write_allowed = write_allowed,
+ skip_manifest = skip_manifest,
+ runtime_incremental = runtime_incremental,
+ )
+ # --- end of new_configured (...) ---
def __init__ (
self,
@@ -46,7 +78,7 @@ class Overlay ( object ):
write_allowed,
incremental,
skip_manifest,
- runtime_incremental=False
+ runtime_incremental=False,
):
"""Initializes an overlay.
@@ -234,7 +266,7 @@ class Overlay ( object ):
# profiles/use.desc
use_desc = config.get (
'OVERLAY.use_desc',
- fallback_value=DEFAULT_USE_DESC
+ fallback_value=self.__class__.DEFAULT_USE_DESC
)
if use_desc:
write_profiles_file ( 'use.desc', use_desc + '\n' )
@@ -277,7 +309,7 @@ class Overlay ( object ):
def list_packages ( self, for_deprules=True ):
for cat in self._categories.values():
- for package in cat.list_packages ( for_deprules=True ):
+ for package in cat.list_packages ( for_deprules=for_deprules ):
yield package
# --- end of list_packages (...) ---
diff --git a/roverlay/packageinfo.py b/roverlay/packageinfo.py
index 244dbb7..fb1a570 100644
--- a/roverlay/packageinfo.py
+++ b/roverlay/packageinfo.py
@@ -52,6 +52,14 @@ class PackageInfo ( object ):
loaded before import this module)
* ALWAYS_FALLBACK -- a set of keys for which get() always returns a
fallback value (None)
+
+ * _UPDATE_KEYS_SIMPLE -- a set of keys that can be added
+ without further checks
+ * _UPDATE_KEYS_SIMPLE_INITIAL -- like _UPDATE_KEYS_SIMPLE, but only used
+ on the first update() call (as long as
+ no keys have been stored)
+ * _UPDATE_KEYS_FILTER_NONE -- like _UPDATE_KEYS_SIMPLE, but stores
+ key's value only if it is not None
"""
EBUILDVER_REGEX = re.compile ( '[-]{1,}' )
@@ -60,6 +68,21 @@ class PackageInfo ( object ):
)
ALWAYS_FALLBACK = frozenset ( ( 'ebuild', 'ebuild_file' ) )
+ _UPDATE_KEYS_SIMPLE = frozenset ((
+ 'origin',
+ 'ebuild',
+ 'ebuild_file',
+ 'physical_only',
+ 'src_uri',
+ ))
+ _UPDATE_KEYS_SIMPLE_INITIAL = frozenset ((
+ 'package_filename',
+ ))
+ _UPDATE_KEYS_FILTER_NONE = frozenset ((
+ 'src_uri_base',
+ 'distdir',
+ ))
+
def __init__ ( self, **initial_info ):
"""Initializes a PackageInfo.
@@ -155,6 +178,22 @@ class PackageInfo ( object ):
has = has_key
+ def has_key_or ( self, *keys ):
+ """Returns True if at least one key out of keys is accessible.
+
+ arguments:
+ * *keys -- keys to check
+ """
+ for k in keys:
+ if k in self._info:
+ return True
+ elif self.get ( k, do_fallback=True ) is not None:
+ return True
+ return False
+ # --- end of has_key_or (...) ---
+
+ has_or = has_key_or
+
def compare_version ( self, other_package ):
"""Compares the version of two PackageInfo objects.
Returns 1 if self's version is higher, -1 if lower and 0 if equal.
@@ -237,6 +276,13 @@ class PackageInfo ( object ):
return "http://localhost/R-packages/" + \
self._info ['package_filename']
+ elif key_low == 'ebuild_dir':
+ ebuild_file = self._info ['ebuild_file']
+ if ebuild_file is not None:
+ return os.path.dirname ( ebuild_file )
+
+ # end if <key matches ...>
+
# fallback
if do_fallback or fallback_value is not None:
@@ -309,27 +355,19 @@ class PackageInfo ( object ):
# nothing to do
return
- simple_keys = frozenset ((
- 'origin',
- 'ebuild',
- 'ebuild_file',
- 'physical_only',
- 'src_uri',
- ))
-
- simple_keys_filter_none = frozenset ((
- 'src_uri_base',
- 'distdir',
- ))
+ initial = len ( self._info ) == 0
self._writelock_acquire()
for key, value in info.items():
- if key in simple_keys:
+ if key in self.__class__._UPDATE_KEYS_SIMPLE:
+ self [key] = value
+
+ elif initial and key in self.__class__._UPDATE_KEYS_SIMPLE_INITIAL:
self [key] = value
- elif key in simple_keys_filter_none:
+ elif key in self.__class__._UPDATE_KEYS_FILTER_NONE:
if value is not None:
self [key] = value
diff --git a/roverlay/util.py b/roverlay/util.py
index c3fe348..be2cd33 100644
--- a/roverlay/util.py
+++ b/roverlay/util.py
@@ -33,8 +33,7 @@ def keepenv ( *to_keep ):
myenv = dict()
for item in to_keep:
- if isinstance ( item, tuple ) and len ( item ) == 2:
-
+ if ( not isinstance ( item, str ) ) and hasattr ( item, '__iter__' ):
var = item [0]
fallback = item [1]
else:
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2013-01-09 19:16 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-09 19:15 [gentoo-commits] proj/R_overlay:master commit in: /, roverlay/config/, roverlay/, roverlay/overlay/ André Erdmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox