def _add(self, port, field, typ): """Add a port to our dependency list.""" self._loading -= 1 if not isinstance(port, str): status = port.dependent.status if port not in self._dependencies[typ]: self._dependencies[typ].append(port) port.dependent.add(field, self.port, typ) if status != Dependent.RESOLV: self._count += 1 else: log.error("Dependency._add()", "Port '%s': failed to load dependency '%s'" % (self.port.origin, port)) self._bad += 1 if isinstance(port, str) or status == Dependent.FAILURE: if not self.failed and not self.port.dependent.failed: self.failed = True self.port.dependent.status_changed() else: self.failed = True if self._loading == 0: self._update_priority() self.loaded.emit(not self._bad)
def __post_pkg_remove(self, pkg_remove): """Process the results from pkg.remove.""" self.pid = None if pkg_remove.wait() == make.SUCCESS: self._do_stage() else: log.error("Deinstall.__post_pkg_remove()", "Port '%s': failed to deinstall for stage %s" % (self.port.origin, self.name)) self._finalise(False)
def __post_pkg_remove(self, pkg_remove): """Process the results from pkg.remove.""" self.pid = None if pkg_remove.wait() == make.SUCCESS: self._do_stage() else: log.error( "Deinstall.__post_pkg_remove()", "Port '%s': failed to deinstall for stage %s" % (self.port.origin, self.name)) self._finalise(False)
def _finalise(self, status): """Finalise the stage.""" if not status: log.error("Stage._finalise()", "Port '%s': failed stage %s" % (self.port.origin, self.name)) if self.stack.name == "common": for stack in self.port.stacks.values(): stack.failed = self.__class__ else: self.stack.failed = self.__class__ self.failed = True else: log.debug("Stage._finalise()", "Port '%s': finished stage %s" % (self.port.origin, self.name)) self.stack.working = False self.port.stages.add(self.__class__) self.done()
def _post_pkg_add(self, pkg_add): """Process the results of pkg.add().""" self.pid = None if pkg_add.wait() == make.SUCCESS: log.debug("PackageInstaller._post_pkg_add()", "Port '%s': finished stage %s" % (self.port.origin, self.name)) if "explicit" not in self.port.flags: pkg_change = self.pid = pkg.change(self.port, "explicit", False) if pkg_change: self.pid = pkg_change.connect(self._post_pkg_change).pid return self._finalise(True) else: log.error("PackageInstaller._port_pkg_add()", "Port '%s': failed stage %s" % (self.port.origin, self.name)) self._finalise(False)
def _post_pkg_add(self, pkg_add): """Process the results of pkg.add().""" self.pid = None if pkg_add.wait() == make.SUCCESS: log.debug( "PackageInstaller._post_pkg_add()", "Port '%s': finished stage %s" % (self.port.origin, self.name)) if "explicit" not in self.port.flags: pkg_change = self.pid = pkg.change(self.port, "explicit", False) if pkg_change: self.pid = pkg_change.connect(self._post_pkg_change).pid return self._finalise(True) else: log.error( "PackageInstaller._port_pkg_add()", "Port '%s': failed stage %s" % (self.port.origin, self.name)) self._finalise(False)
def _finalise(self, status): """Finalise the stage.""" if not status: log.error( "Stage._finalise()", "Port '%s': failed stage %s" % (self.port.origin, self.name)) if self.stack.name == "common": for stack in self.port.stacks.values(): stack.failed = self.__class__ else: self.stack.failed = self.__class__ self.failed = True else: log.debug( "Stage._finalise()", "Port '%s': finished stage %s" % (self.port.origin, self.name)) self.stack.working = False self.port.stages.add(self.__class__) self.done()
def parse_attr(self, pmake): """Parse the attributes from a port and call the requested function.""" # TODO: if pmake.wait() != make.SUCCESS if pmake.wait() != 0: log.error("Attr.parse_attr()", "Failed to get port %s attributes (err=%s)\n%s" % (self.origin, pmake.returncode, "".join(pmake.stderr.readlines()))) self.emit(self.origin, None) return errs = pmake.stderr.readlines() if len(errs): log.error("Attr.parse_attr()", "Non-fatal errors in port %s attributes\n%s" % (self.origin, "".join(errs))) attr_map = {} for name, value in ports_attr.iteritems(): if value[1] is str: # Get the string (stripped) attr_map[name] = pmake.stdout.readline().strip() else: # Pass the string through a special processor (like list/tuple) attr_map[name] = value[1](pmake.stdout.readline().split()) # Apply all filters for the attribute for i in value[2:]: try: attr_map[name] = i(attr_map[name]) except BaseException, e: log.error("Attr.parse_attr()", "Failed to process port %s attributes: %s" % (self.origin, str(e))) self.emit(self.origin, None) return