aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Erdmann <dywi@mailerd.de>2013-01-28 22:19:12 +0100
committerAndré Erdmann <dywi@mailerd.de>2013-01-29 00:37:04 +0100
commit1853a1c2a3f7371c9920f0c744992aac4d501944 (patch)
tree30db767aa117a5cc5f7753c3ce391be0a23a5cea /roverlay/packageinfo.py
parentroverlay/strutil.py: split_whitespace() function (diff)
downloadR_overlay-1853a1c2a3f7371c9920f0c744992aac4d501944.tar.gz
R_overlay-1853a1c2a3f7371c9920f0c744992aac4d501944.tar.bz2
R_overlay-1853a1c2a3f7371c9920f0c744992aac4d501944.zip
roverlay/packageinfo: ebuild_filename, remove_auto
* new key: ebuild_filename * update(): call _remove_auto() after processing all other keywords
Diffstat (limited to 'roverlay/packageinfo.py')
-rw-r--r--roverlay/packageinfo.py26
1 files changed, 22 insertions, 4 deletions
diff --git a/roverlay/packageinfo.py b/roverlay/packageinfo.py
index fb1a570..f4b7c9e 100644
--- a/roverlay/packageinfo.py
+++ b/roverlay/packageinfo.py
@@ -60,6 +60,10 @@ class PackageInfo ( object ):
no keys have been stored)
* _UPDATE_KEYS_FILTER_NONE -- like _UPDATE_KEYS_SIMPLE, but stores
key's value only if it is not None
+ * _REMOVE_KEYS_KEEP_EBUILD -- a set of keys that will be kept when
+ _remove_auto ( 'ebuild_written' ) is
+ called.
+ These keys must exist at this point!
"""
EBUILDVER_REGEX = re.compile ( '[-]{1,}' )
@@ -83,6 +87,11 @@ class PackageInfo ( object ):
'distdir',
))
+ _REMOVE_KEYS_KEEP_EBUILD = frozenset ((
+ 'distdir', 'desc_data', 'ebuild_file', 'version',
+ 'ebuild_filename', 'package_name', 'package_filename',
+ ))
+
def __init__ ( self, **initial_info ):
"""Initializes a PackageInfo.
@@ -281,6 +290,11 @@ class PackageInfo ( object ):
if ebuild_file is not None:
return os.path.dirname ( ebuild_file )
+ elif key_low == 'ebuild_filename':
+ ebuild_file = self._info ['ebuild_file']
+ if ebuild_file is not None:
+ return os.path.basename ( ebuild_file )
+
# end if <key matches ...>
@@ -357,6 +371,9 @@ class PackageInfo ( object ):
initial = len ( self._info ) == 0
+ # remove_auto has to be the last action (keyword order is not "stable")
+ remove_auto = info.pop ( 'remove_auto', None )
+
self._writelock_acquire()
for key, value in info.items():
@@ -393,9 +410,6 @@ class PackageInfo ( object ):
except KeyError:
pass
- elif key == 'remove_auto':
- self._remove_auto ( value )
-
elif key == 'make_desc_data':
if value:
self.get_desc_data()
@@ -404,6 +418,10 @@ class PackageInfo ( object ):
self.logger.error (
"in update(): unknown info key {}!".format ( key )
)
+ # -- end for;
+
+ if remove_auto:
+ self._remove_auto ( remove_auto )
self._update_lock.release()
# --- end of update (**kw) ---
@@ -481,7 +499,7 @@ class PackageInfo ( object ):
if ebuild_status == 'ebuild_written':
# selectively copying required keys to a new info dict
- to_keep = ( 'distdir', 'desc_data', 'ebuild_file', 'version' )
+ to_keep = self.__class__._REMOVE_KEYS_KEEP_EBUILD
# needs python >= 2.7
info_new = { k : self.get ( k ) for k in to_keep }