diff options
author | André Erdmann <dywi@mailerd.de> | 2013-07-06 21:59:23 +0200 |
---|---|---|
committer | André Erdmann <dywi@mailerd.de> | 2013-07-06 23:05:12 +0200 |
commit | 5cd86e7e45b6787f73c736f5c5c2cf58289b1223 (patch) | |
tree | 52268648c19605cbd136f7eeb0fca6949091ecc6 /roverlay/packageinfo.py | |
parent | files/hooks/create-metadata-cache.sh: --cache-dir (diff) | |
download | R_overlay-5cd86e7e45b6787f73c736f5c5c2cf58289b1223.tar.gz R_overlay-5cd86e7e45b6787f73c736f5c5c2cf58289b1223.tar.bz2 R_overlay-5cd86e7e45b6787f73c736f5c5c2cf58289b1223.zip |
overlay creation: interruptible ebuild jobs
This commit adds support for (un-)pausing ebuild creation.
EbuildCreation jobs are now able to stop themselves when certain conditions
are not met and resume later.
This is necessary for performing selfdep reduction at overlay creation time
and not after creating all ebuilds.
Additionally (and the main motivation for implementing this), it allows to
handle optional/mandatory selfdeps individually. Optional and unsatisfiable
are simply removed from the ebuild, while mandatory ones cause ebuild creation
to fail for a given package.
This commit also fixes some exception-handling related issues in the overlay
worker module (roverlay/overlay/worker.py->OverlayWorker).
Diffstat (limited to 'roverlay/packageinfo.py')
-rw-r--r-- | roverlay/packageinfo.py | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/roverlay/packageinfo.py b/roverlay/packageinfo.py index 1bcf495..0224d6c 100644 --- a/roverlay/packageinfo.py +++ b/roverlay/packageinfo.py @@ -131,6 +131,7 @@ class PackageInfo ( object ): self._info = dict() self.readonly = False self.logger = LOGGER + # self.selfdeps is a list of _mandatory_ selfdeps self.selfdeps = None #self.selfdeps_valid = UNDEF @@ -142,28 +143,46 @@ class PackageInfo ( object ): self.update ( **initial_info ) # --- end of __init__ (...) --- - def init_selfdep_validate ( self ): + def init_selfdep_validate ( self, selfdeps ): """Tells this packageinfo to initialize selfdep validation. Returns True on success (=has selfdeps), else False. """ - self.selfdeps_valid = True - if self.selfdeps: - for selfdep in self.selfdeps: - selfdep.prepare_selfdep_reduction() + if selfdeps: + self.selfdeps_valid = True + self.selfdeps = selfdeps return True else: + self.selfdeps = None return False # --- end of init_selfdep_validate (...) --- + def is_valid ( self ): + return bool ( getattr ( self, 'selfdeps_valid', True ) ) + # --- end of is_valid (...) --- + + def end_selfdep_validate ( self ): + v = self.has_valid_selfdeps() + self.selfdeps = None + return v + # --- end of end_selfdep_validate (...) --- + + def has_selfdeps ( self ): + return bool ( self.selfdeps ) + # --- end of has_selfdeps (...) --- + def has_valid_selfdeps ( self ): """Returns True if all selfdeps of this package are valid.""" - v = self.selfdeps_valid - if v is True and self.selfdeps is not None and not all ( - map ( lambda d: d.deps_satisfiable(), self.selfdeps ) - ): - self.selfdeps_valid = False - return False - return v + if self.selfdeps is None: + return True + else: + v = self.selfdeps_valid + if v is True and not all ( + map ( lambda d: d.deps_satisfiable(), self.selfdeps ) + ): + self.selfdeps_valid = False + return False + + return v # --- end of has_valid_selfdeps (...) --- def attach_lazy_action ( self, lazy_action ): |