public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-portage-dev] [PATCH] repoman: use metadata.dtd from rsync tree if available (bug 567746)
@ 2015-12-16  6:46 Zac Medico
  2015-12-16 13:45 ` Alexander Berntsen
  0 siblings, 1 reply; 2+ messages in thread
From: Zac Medico @ 2015-12-16  6:46 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Zac Medico

Search for metadata.dtd in current repository and masters, and if that
fails then fetch is as usual.

X-Gentoo-Bug: 567746
X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=567746
---
 pym/repoman/_xml.py                       |  9 +++++----
 pym/repoman/checks/ebuilds/pkgmetadata.py |  6 ++++--
 pym/repoman/scanner.py                    | 10 +++++++++-
 3 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/pym/repoman/_xml.py b/pym/repoman/_xml.py
index 0acda28..4ca6a0a 100644
--- a/pym/repoman/_xml.py
+++ b/pym/repoman/_xml.py
@@ -51,11 +51,12 @@ class _MetadataTreeBuilder(xml.etree.ElementTree.TreeBuilder):
 
 class XmlLint(object):
 
-	def __init__(self, options, repoman_settings):
-		self.metadata_dtd = os.path.join(repoman_settings["DISTDIR"], 'metadata.dtd')
+	def __init__(self, options, repoman_settings, metadata_dtd=None):
+		self.metadata_dtd = (metadata_dtd or
+			os.path.join(repoman_settings["DISTDIR"], 'metadata.dtd'))
 		self.options = options
 		self.repoman_settings = repoman_settings
-		self._is_capable = False
+		self._is_capable = metadata_dtd is not None
 		self.binary = None
 		self._check_capable()
 
@@ -65,7 +66,7 @@ class XmlLint(object):
 		self.binary = find_binary('xmllint')
 		if not self.binary:
 			print(red("!!! xmllint not found. Can't check metadata.xml.\n"))
-		else:
+		elif not self._is_capable:
 			if not fetch_metadata_dtd(self.metadata_dtd, self.repoman_settings):
 				sys.exit(1)
 			# this can be problematic if xmllint changes their output
diff --git a/pym/repoman/checks/ebuilds/pkgmetadata.py b/pym/repoman/checks/ebuilds/pkgmetadata.py
index f22ef19..74fec69 100644
--- a/pym/repoman/checks/ebuilds/pkgmetadata.py
+++ b/pym/repoman/checks/ebuilds/pkgmetadata.py
@@ -40,18 +40,20 @@ from repoman._xml import _XMLParser, _MetadataTreeBuilder, XmlLint
 class PkgMetadata(object):
 	'''Package metadata.xml checks'''
 
-	def __init__(self, options, qatracker, repoman_settings):
+	def __init__(self, options, qatracker, repoman_settings, metadata_dtd=None):
 		'''PkgMetadata init function
 
 		@param options: ArgumentParser.parse_known_args(argv[1:]) options
 		@param qatracker: QATracker instance
 		@param repoman_settings: settings instance
+		@param metadata_dtd: path of metadata.dtd
 		'''
 		self.options = options
 		self.qatracker = qatracker
 		self.repoman_settings = repoman_settings
 		self.musedict = {}
-		self.xmllint = XmlLint(self.options, self.repoman_settings)
+		self.xmllint = XmlLint(self.options, self.repoman_settings,
+			metadata_dtd=metadata_dtd)
 
 	def check(self, xpkg, checkdir, checkdirlist, repolevel):
 		'''Performs the checks on the metadata.xml for the package
diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index 9e5a313..9a87f65 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -82,6 +82,13 @@ class Scanner(object):
 			portage.util.stack_lists([self.categories], incremental=1))
 		self.categories = self.repo_settings.repoman_settings.categories
 
+		metadata_dtd = None
+		for path in reversed(self.repo_settings.repo_config.eclass_db.porttrees):
+			path = os.path.join(path, 'metadata/dtd/metadata.dtd')
+			if os.path.exists(path):
+				metadata_dtd = path
+				break
+
 		self.portdb = repo_settings.portdb
 		self.portdb.settings = self.repo_settings.repoman_settings
 		# We really only need to cache the metadata that's necessary for visibility
@@ -201,7 +208,8 @@ class Scanner(object):
 		self.status_check = VCSStatus(self.vcs_settings, self.qatracker)
 		self.fetchcheck = FetchChecks(
 			self.qatracker, self.repo_settings, self.portdb, self.vcs_settings)
-		self.pkgmeta = PkgMetadata(self.options, self.qatracker, self.repo_settings.repoman_settings)
+		self.pkgmeta = PkgMetadata(self.options, self.qatracker,
+			self.repo_settings.repoman_settings, metadata_dtd=metadata_dtd)
 		self.thirdparty = ThirdPartyMirrors(self.repo_settings.repoman_settings, self.qatracker)
 		self.use_flag_checks = USEFlagChecks(self.qatracker, uselist)
 		self.keywordcheck = KeywordChecks(self.qatracker, self.options)
-- 
2.4.10



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [gentoo-portage-dev] [PATCH] repoman: use metadata.dtd from rsync tree if available (bug 567746)
  2015-12-16  6:46 [gentoo-portage-dev] [PATCH] repoman: use metadata.dtd from rsync tree if available (bug 567746) Zac Medico
@ 2015-12-16 13:45 ` Alexander Berntsen
  0 siblings, 0 replies; 2+ messages in thread
From: Alexander Berntsen @ 2015-12-16 13:45 UTC (permalink / raw
  To: gentoo-portage-dev

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

LGTM.
- -- 
Alexander
bernalex@gentoo.org
https://secure.plaimi.net/~alexander
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQIcBAEBCgAGBQJWcWrfAAoJENQqWdRUGk8BmAsQALl6yvoA9QJBn9TcmxENI8L4
DYWzX4FoZ6Gc69Dh7lejuDCkoziE5rZWckqgyLuDsDiYOQLFJAjpgj7lpUxrh0Wx
ZExjt1NL3svT1hGDh8j7NNM2oKy9PGBOU/oVe/35pRRTjy1rsPXjzT3AbxrwcQNA
S48qylxqou4EcCUSGT2rFleZhnUVIV+mOXeS8zAZOtdH3H9xNyn+rHcbkqogUh4p
gv5iwbDFpLkkAe8zx42kKYJTsBVy29l6dalxV3zn3nnCEJArIraTQ3zErNalvY0X
E2cXsNN4h633jRDyJCSAOBHkqBRsizGfyxwaDl5EPGQg1HinmleIwmpHuEH7gKcY
f9/zji9NCLpQ4uPLpfDnwez8eXmW5tx5nkwL5nNj2XiK90PV02aN3kgDwwh4hzJB
JFqLDS6jeVgAn+I6XmsaJOhnddD29XlmKvmamaqbvRllJsG0mDsCiPDUJXDlbkAw
dmYfkckItz3L/gtxrrZ0VfNmr7PN6aOTfoivTbHrjMaUnUjX5p55R/eamhzEhbQF
d9yQFYD9xhXMw3LqlcEqcQAgYyvTfQcxb/VgRxJK9BqawtSpDEUbl/ifnqdCMkSA
M5ZgIhvYvR2cm7cQC5OIEETfDlCu+AIsid+9bJETvUakCrwA+zPBiX33swT6oaV7
XdiFfzAXi+kPk67VxdoS
=juvW
-----END PGP SIGNATURE-----


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-12-16 13:45 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-16  6:46 [gentoo-portage-dev] [PATCH] repoman: use metadata.dtd from rsync tree if available (bug 567746) Zac Medico
2015-12-16 13:45 ` Alexander Berntsen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox