commit:     b6818e7a118a8e82a71b394ae2a5ee79576a1e4e
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Thu Jan 21 18:29:07 2016 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sat Jan 30 07:50:21 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=b6818e7a

repoman: Fix a traceback due to xmlint not being installed for a manifest 
generation

Mike helped find teh fact that self.binary was None, causing the misleading 
traceback.
Tighten up the logic in XmlLint.
Bypass the PkgMetadata check for manifest mode.

floppym@naomi btrfs-progs % repoman manifest
>>> Creating Manifest for /home/floppym/repos/gentoo/sys-fs/btrfs-progs
Traceback (most recent call last):
  File "/home/floppym/bin/repoman", line 37, in <module>
    repoman_main(sys.argv[1:])
  File "/home/floppym/src/portage/pym/repoman/main.py", line 111, in 
repoman_main
    can_force = scanner.scan_pkgs(can_force)
  File "/home/floppym/src/portage/pym/repoman/scanner.py", line 242, in 
scan_pkgs
    rdata = func(**dynamic_data)
  File 
"/home/floppym/src/portage/pym/repoman/modules/scan/metadata/pkgmetadata.py", 
line 180, in check
    if not self.xmllint.check(checkdir, repolevel):
  File "/home/floppym/src/portage/pym/repoman/_xml.py", line 98, in check
    os.path.join(checkdir, "metadata.xml"))))
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

 pym/repoman/_xml.py                              | 2 +-
 pym/repoman/modules/scan/metadata/pkgmetadata.py | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/pym/repoman/_xml.py b/pym/repoman/_xml.py
index 2661f14..f7ff9fb 100644
--- a/pym/repoman/_xml.py
+++ b/pym/repoman/_xml.py
@@ -60,6 +60,7 @@ class XmlLint(object):
                self.repoman_settings = repoman_settings
                self._is_capable = metadata_dtd is not None
                self.binary = None
+               self._is_capable = False
                self._check_capable()
 
        def _check_capable(self):
@@ -68,7 +69,6 @@ class XmlLint(object):
                self.binary = find_binary('xmllint')
                if not self.binary:
                        print(red("!!! xmllint not found. Can't check 
metadata.xml.\n"))
-                       self._is_capable = False
                elif not self._is_capable:
                        if not fetch_metadata_dtd(self.metadata_dtd, 
self.repoman_settings):
                                sys.exit(1)

diff --git a/pym/repoman/modules/scan/metadata/pkgmetadata.py 
b/pym/repoman/modules/scan/metadata/pkgmetadata.py
index 220fd23..8e93457 100644
--- a/pym/repoman/modules/scan/metadata/pkgmetadata.py
+++ b/pym/repoman/modules/scan/metadata/pkgmetadata.py
@@ -71,6 +71,9 @@ class PkgMetadata(ScanBase):
                repolevel = kwargs.get('repolevel')
 
                self.musedict = {}
+               if self.options.mode in ['manifest']:
+                       return {'continue': False, 'muselist': 
frozenset(self.musedict)}
+
                # metadata.xml file check
                if "metadata.xml" not in checkdirlist:
                        self.qatracker.add_error("metadata.missing", xpkg + 
"/metadata.xml")

Reply via email to