[Yum-devel] [PATCH] run _repos.doSetup() at least once. BZ 885159

Zdenek Pavlas zpavlas at redhat.com
Tue Dec 11 10:25:42 UTC 2012


>  My guess is that we'll have to move the basename checking into
> _repos.doSetup().

Can't use the existing "for repo in repos" loop,
as someone might doSetup() repos one by one..

commit d8d16de03e3853554352a9a36d1814bad8b83145
Author: Zdeněk Pavlas <zpavlas at redhat.com>
Date:   Tue Dec 11 11:07:32 2012 +0100

    move the basename checking into _repos.doSetup(). BZ 885159

diff --git a/yum/__init__.py b/yum/__init__.py
index 63053af..62bb402 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -701,24 +701,6 @@ class YumBase(depsolve.Depsolve):
 
 
         if doSetup:
-            if (hasattr(urlgrabber, 'grabber') and
-                hasattr(urlgrabber.grabber, 'pycurl')):
-                # Must do basename checking, on cert. files...
-                cert_basenames = {}
-                for repo in self._repos.listEnabled():
-                    if not repo.sslclientcert:
-                        continue
-                    bn = os.path.basename(repo.sslclientcert)
-                    if bn not in cert_basenames:
-                        cert_basenames[bn] = repo
-                        continue
-                    if repo.sslclientcert == cert_basenames[bn].sslclientcert:
-                        # Exactly the same path is fine too
-                        continue
-
-                    msg = 'sslclientcert basename shared between %s and %s'
-                    raise Errors.ConfigError, msg % (repo, cert_basenames[bn])
-
             repo_st = time.time()        
             self._repos.doSetup(thisrepo)
             self.verbose_logger.debug('repo time: %0.3f' % (time.time() - repo_st))        
diff --git a/yum/repos.py b/yum/repos.py
index de5da1e..3522512 100644
--- a/yum/repos.py
+++ b/yum/repos.py
@@ -19,6 +19,7 @@ import fnmatch
 import types
 import logging
 import misc
+import os
 
 import Errors
 from packageSack import MetaSack
@@ -121,6 +122,17 @@ class RepoStorage:
         if len(repos) < 1:
             self.logger.debug('No Repositories Available to Set Up')
 
+        if hasattr(urlgrabber.grabber, 'pycurl'):
+            # Must do basename checking, on cert. files...
+            cert_basenames = {}
+            for repo in self.listEnabled():
+                if repo.sslclientcert:
+                    bn = os.path.basename(repo.sslclientcert)
+                    other = cert_basenames.setdefault(bn, repo)
+                    if repo.sslclientcert != other.sslclientcert:
+                        msg = 'sslclientcert basename shared between %s and %s'
+                        raise Errors.ConfigError, msg % (repo, other)
+
         for repo in repos:
             repo.setup(self.ayum.conf.cache, self.ayum.mediagrabber,
                    gpg_import_func = self.gpg_import_func, confirm_func=self.confirm_func,


More information about the Yum-devel mailing list