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
{"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