diff options
author | André Erdmann <dywi@mailerd.de> | 2013-01-28 22:19:12 +0100 |
---|---|---|
committer | André Erdmann <dywi@mailerd.de> | 2013-01-29 00:37:04 +0100 |
commit | 1853a1c2a3f7371c9920f0c744992aac4d501944 (patch) | |
tree | 30db767aa117a5cc5f7753c3ce391be0a23a5cea /roverlay/packageinfo.py | |
parent | roverlay/strutil.py: split_whitespace() function (diff) | |
download | R_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.py | 26 |
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 } |