Beispiel #1
0
    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)
Beispiel #2
0
 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)
Beispiel #3
0
 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)
Beispiel #4
0
 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()
Beispiel #5
0
 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)
Beispiel #6
0
 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)
Beispiel #7
0
 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()
Beispiel #8
0
    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