]> git.ipfire.org Git - pakfire.git/commitdiff
Automatically initialize any locally configured repositories
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 12 Dec 2016 23:23:19 +0000 (00:23 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 12 Dec 2016 23:23:19 +0000 (00:23 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/base.py
src/pakfire/repository/__init__.py
src/pakfire/repository/base.py
src/pakfire/repository/metadata.py

index 4b307f42b17a4813c28f906b04131d8419f668d7..ec8e3ba315a8def58c8294ed51cdf5ef3365756e 100644 (file)
@@ -72,6 +72,21 @@ class Pakfire(object):
                self.pool = satsolver.Pool(self.arch.name)
                self.repos = repository.Repositories(self)
 
+               # Load default repository configuration
+               repos_dir = self.make_path(CONFIG_REPOS_DIR)
+               if repos_dir:
+                       self.repos.load_configuration(repos_dir)
+
+       def make_path(self, path):
+               """
+                       Returns path relative to the (base)path
+                       of this Pakfire instance.
+               """
+               while path.startswith("/"):
+                       path = path[1:]
+
+               return os.path.join(self.path, path)
+
        def __enter__(self):
                """
                        Called to initialize this Pakfire instance when
index b0c1a653fbefd99f0f39b7683005f31f5e5a200f..b5df46a86f8d06e5208492b048de3493c9b3b579 100644 (file)
 #                                                                             #
 ###############################################################################
 
+import glob
+import os
 import re
 
 import logging
 log = logging.getLogger("pakfire")
 
+from .. import config
 from .. import packages
 
 from .base import RepositoryDummy
@@ -59,10 +62,6 @@ class Repositories(object):
                        self.local_build = RepositoryBuild(self.pakfire)
                        self.add_repo(self.local_build)
 
-               # Fetch all repository from the configuration files.
-               for repo_name, repo_args in self.config.get_repos():
-                       self._parse(repo_name, repo_args)
-
        def __iter__(self):
                repositories = list(self.__repos.values())
                repositories.sort()
@@ -105,10 +104,6 @@ class Repositories(object):
                for repo in self:
                        repo.close()
 
-       @property
-       def config(self):
-               return self.pakfire.config
-
        @property
        def distro(self):
                return self.pakfire.distro
@@ -117,6 +112,23 @@ class Repositories(object):
        def pool(self):
                return self.pakfire.pool
 
+       def load_configuration(self, *paths):
+               c = config.Config()
+
+               for path in paths:
+                       # Read directories
+                       if os.path.isdir(path):
+                               for file in glob.glob("%s/*.repo" % path):
+                                       c.read(file)
+
+                       # Read files
+                       else:
+                               c.read(path)
+
+               # Add all repositories that have been found
+               for name, settings in c.get_repos():
+                       self._parse(name, settings)
+
        def _parse(self, name, args):
                _args = {
                        "name" : name,
@@ -129,7 +141,7 @@ class Repositories(object):
                # Handle variable expansion.
                replaces = {
                        "name" : name,
-                       "arch" : self.distro.arch,
+                       "arch" : self.pakfire.arch.name,
                }
 
                for k, v in list(_args.items()):
index 53a2b928fbf1566b49914775e44638ddb5020155..cc807520b18fe66b44ccc2592ca0254497325a62 100644 (file)
@@ -51,9 +51,8 @@ class RepositoryFactory(object):
        def __repr__(self):
                return "<%s %s>" % (self.__class__.__name__, self.name)
 
-       def __cmp__(self, other):
-               return cmp(self.priority * -1, other.priority * -1) or \
-                       cmp(self.name, other.name)
+       def __lt__(self, other):
+               return self.priority < other.priority
 
        def __len__(self):
                return self.solver_repo.size()
index cd86d51109b67c2d4a680b66651881f0099fee87..9fabce0770b1317e536550cf9435210e81909742 100644 (file)
@@ -45,11 +45,11 @@ class Metadata(object):
                elif metadata:
                        self.parse(metadata)
 
-       def __cmp__(self, other):
+       def __lt__(self, other):
                """
                        Compare two sets of metadata by their revision.
                """
-               return cmp(self.revision, other.revision)
+               return self.revision < other.revision
 
        def parse(self, metadata):
                try: