Пример #1
0
def read_manifests(names, lint_logger):
        """Read a list of filenames, return a list of Manifest objects."""

        manifests = []
        for filename in names:
                data = None
                # borrowed code from publish.py
                lines = []      # giant string of all input lines
                linecnts = []   # tuples of starting line no., ending line no
                linecounter = 0 # running total
                try:
                        f = codecs.open(filename, "rb", "utf-8")
                        data = f.read()
                except UnicodeDecodeError as e:
                        lint_logger.critical(_("Invalid file {file}: "
                            "manifest not encoded in UTF-8: {err}").format(
                            file=filename, err=e),
                            msgid="lint.manifest002")
                        continue
                except IOError as e:
                        lint_logger.critical(_("Unable to read manifest file "
                            "{file}: {err}").format(file=filename, err=e),
                            msgid="lint.manifest001")
                        continue
                lines.append(data)
                linecnt = len(data.splitlines())
                linecnts.append((linecounter, linecounter + linecnt))
                linecounter += linecnt

                manifest = pkg.manifest.Manifest()
                try:
                        manifest.set_content(content="\n".join(lines))
                except pkg.actions.ActionError as e:
                        lineno = e.lineno
                        for i, tup in enumerate(linecnts):
                                if lineno > tup[0] and lineno <= tup[1]:
                                        lineno -= tup[0]
                                        break
                        else:
                                lineno = "???"

                        lint_logger.critical(
                            _("Error in {file} line: {ln}: {err} ").format(
                            file=filename,
                            ln=lineno,
                            err=str(e)), "lint.manifest002")
                        manifest = None
                except InvalidPackageErrors as e:
                        lint_logger.critical(
                            _("Error in file {file}: {err}").format(
                            file=filename,
                            err=str(e)), "lint.manifest002")
                        manifest = None

                if manifest and "pkg.fmri" in manifest:
                        try:
                                manifest.fmri = \
                                    pkg.fmri.PkgFmri(manifest["pkg.fmri"])
                        except fmri.IllegalFmri as e:
                                lint_logger.critical(
                                    _("Error in file {file}: "
                                    "{err}").format(
                                    file=filename, err=e),
                                    "lint.manifest002")
                        if manifest.fmri:
                                if not manifest.fmri.version:
                                        lint_logger.critical(
                                            _("Error in file {0}: "
                                            "pkg.fmri does not include a "
                                            "version string").format(filename),
                                            "lint.manifest003")
                                else:
                                        manifests.append(manifest)

                elif manifest:
                        lint_logger.critical(
                            _("Manifest {0} does not declare fmri.").format(filename),
                            "lint.manifest003")
                else:
                        manifests.append(None)
        return manifests
Пример #2
0
                            {"file": filename, "err": e},
                            msgid="lint.manifest002")
                        continue
                except IOError, e:
                        lint_logger.critical(_("Unable to read manifest file "
                            "%(file)s: %(err)s") % {"file": filename, "err": e},
                            msgid="lint.manifest001")
                        continue
                lines.append(data)
                linecnt = len(data.splitlines())
                linecnts.append((linecounter, linecounter + linecnt))
                linecounter += linecnt

                manifest = pkg.manifest.Manifest()
                try:
                        manifest.set_content(content="\n".join(lines))
                except pkg.actions.ActionError, e:
                        lineno = e.lineno
                        for i, tup in enumerate(linecnts):
                                if lineno > tup[0] and lineno <= tup[1]:
                                        lineno -= tup[0]
                                        break
                        else:
                                lineno = "???"

                        lint_logger.critical(
                            _("Error in %(file)s line: %(ln)s: %(err)s ") %
                            {"file": filename,
                             "ln": lineno,
                             "err": str(e)}, "lint.manifest002")
                        manifest = None