aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Erdmann <dywi@mailerd.de>2013-07-06 21:59:23 +0200
committerAndré Erdmann <dywi@mailerd.de>2013-07-06 23:05:12 +0200
commit5cd86e7e45b6787f73c736f5c5c2cf58289b1223 (patch)
tree52268648c19605cbd136f7eeb0fca6949091ecc6 /roverlay/packageinfo.py
parentfiles/hooks/create-metadata-cache.sh: --cache-dir (diff)
downloadR_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.py43
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 ):