From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 5B0F61393F1 for ; Thu, 17 Sep 2015 04:51:50 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 1E32C21C05E; Thu, 17 Sep 2015 04:51:44 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 99FDE21C03F for ; Thu, 17 Sep 2015 04:51:42 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id A6958340C02 for ; Thu, 17 Sep 2015 04:51:41 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 5A3F3206 for ; Thu, 17 Sep 2015 04:51:38 +0000 (UTC) From: "Brian Dolbec" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Brian Dolbec" Message-ID: <1442464885.33eb07b788baef1e063c4157d903cb14762a7518.dolsen@gentoo> Subject: [gentoo-commits] proj/portage:repoman commit in: pym/repoman/, pym/repoman/checks/ebuilds/ X-VCS-Repository: proj/portage X-VCS-Files: pym/repoman/_xml.py pym/repoman/checks/ebuilds/pkgmetadata.py X-VCS-Directories: pym/repoman/checks/ebuilds/ pym/repoman/ X-VCS-Committer: dolsen X-VCS-Committer-Name: Brian Dolbec X-VCS-Revision: 33eb07b788baef1e063c4157d903cb14762a7518 X-VCS-Branch: repoman Date: Thu, 17 Sep 2015 04:51:38 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: cd8d40cd-1343-4391-be8e-e45b38603991 X-Archives-Hash: 30eb36afd9275166a17daf29e900cb3e commit: 33eb07b788baef1e063c4157d903cb14762a7518 Author: Brian Dolbec gentoo org> AuthorDate: Tue Jun 3 19:20:43 2014 +0000 Commit: Brian Dolbec gentoo org> CommitDate: Thu Sep 17 04:41:25 2015 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=33eb07b7 Repoman: Refactor PkgMetadata and XmlLint classes for variable data passed in Move all non-consistent data to be passed in via the check functions. Initialize XmlLint once in the PkgMetadata class __init__(). pym/repoman/_xml.py | 33 ++++++++++++++++++++++--------- pym/repoman/checks/ebuilds/pkgmetadata.py | 12 +++++------ 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/pym/repoman/_xml.py b/pym/repoman/_xml.py index b97c027..d5b5a5e 100644 --- a/pym/repoman/_xml.py +++ b/pym/repoman/_xml.py @@ -14,6 +14,8 @@ from repoman._subprocess import repoman_getstatusoutput class _XMLParser(xml.etree.ElementTree.XMLParser): + + def __init__(self, data, **kwargs): xml.etree.ElementTree.XMLParser.__init__(self, **kwargs) self._portage_data = data @@ -25,11 +27,13 @@ class _XMLParser(xml.etree.ElementTree.XMLParser): self.parser.StartDoctypeDeclHandler = \ self._portage_StartDoctypeDeclHandler + def _portage_XmlDeclHandler(self, version, encoding, standalone): if self._base_XmlDeclHandler is not None: self._base_XmlDeclHandler(version, encoding, standalone) self._portage_data["XML_DECLARATION"] = (version, encoding, standalone) + def _portage_StartDoctypeDeclHandler( self, doctypeName, systemId, publicId, has_internal_subset): if self._base_StartDoctypeDeclHandler is not None: @@ -49,33 +53,44 @@ class _MetadataTreeBuilder(xml.etree.ElementTree.TreeBuilder): class XmlLint(object): - def __init__(self, options, repolevel, repoman_settings): + def __init__(self, options, repoman_settings): self.metadata_dtd = os.path.join(repoman_settings["DISTDIR"], 'metadata.dtd') + self.options = options + self.repoman_settings = repoman_settings self._is_capable = False self.binary = None - self._check_capable(options, repolevel, repoman_settings) + self._check_capable() + - def _check_capable(self, options, repolevel, repoman_settings): - if options.mode == "manifest": + def _check_capable(self): + if self.options.mode == "manifest": return self.binary = find_binary('xmllint') if not self.binary: print(red("!!! xmllint not found. Can't check metadata.xml.\n")) - if options.xml_parse or repolevel == 3: - print("%s sorry, xmllint is needed. failing\n" % red("!!!")) - sys.exit(1) else: - if not fetch_metadata_dtd(self.metadata_dtd, repoman_settings): + if not fetch_metadata_dtd(self.metadata_dtd, self.repoman_settings): sys.exit(1) # this can be problematic if xmllint changes their output self._is_capable = True + @property def capable(self): return self._is_capable - def check(self, checkdir): + + def check(self, checkdir, repolevel): + '''Runs checks on the package metadata.xml file + + @param checkdir: string, path + @param repolevel: integer + @return boolean, False == bad metadata + ''' if not self.capable: + if self.options.xml_parse or repolevel == 3: + print("%s sorry, xmllint is needed. failing\n" % red("!!!")) + sys.exit(1) return True # xmlint can produce garbage output even on success, so only dump # the ouput when it fails. diff --git a/pym/repoman/checks/ebuilds/pkgmetadata.py b/pym/repoman/checks/ebuilds/pkgmetadata.py index 0778696..674d32f 100644 --- a/pym/repoman/checks/ebuilds/pkgmetadata.py +++ b/pym/repoman/checks/ebuilds/pkgmetadata.py @@ -38,27 +38,28 @@ from repoman._xml import _XMLParser, _MetadataTreeBuilder, XmlLint class PkgMetadata(object): '''Package metadata.xml checks''' - def __init__(self, options, qatracker, repolevel, repoman_settings): + def __init__(self, options, qatracker, repoman_settings): '''PkgMetadata init function @param options: ArgumentParser.parse_known_args(argv[1:]) options @param qatracker: QATracker instance - @param repolevel: integer @param repoman_settings: settings instance ''' self.options = options self.qatracker = qatracker - self.repolevel = repolevel self.repoman_settings = repoman_settings self.musedict = {} + self.xmllint = XmlLint(self.options, self.repoman_settings) + - def check(self, xpkg, checkdir, checkdirlist): + def check(self, xpkg, checkdir, checkdirlist, repolevel): '''Performs the checks on the metadata.xml for the package @param xpkg: the pacakge being checked @param checkdir: string, directory path @param checkdirlist: list of checkdir's + @param repolevel: integer ''' self.musedict = {} @@ -165,8 +166,7 @@ class PkgMetadata(object): # Only carry out if in package directory or check forced if not metadata_bad: - xmllint = XmlLint(self.options, self.repolevel, self.repoman_settings) - if not xmllint.check(checkdir): + if not self.xmllint.check(checkdir, repolevel): self.qatracker.add_error("metadata.bad", xpkg + "/metadata.xml") del metadata_bad return