From: Michael Tremer Date: Mon, 12 Dec 2016 23:23:19 +0000 (+0100) Subject: Automatically initialize any locally configured repositories X-Git-Tag: 0.9.28~1285^2~1367 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=debbc1683ca26eb01b885e791b85bab6564bdb46;p=pakfire.git Automatically initialize any locally configured repositories Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/base.py b/src/pakfire/base.py index 4b307f42b..ec8e3ba31 100644 --- a/src/pakfire/base.py +++ b/src/pakfire/base.py @@ -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 diff --git a/src/pakfire/repository/__init__.py b/src/pakfire/repository/__init__.py index b0c1a653f..b5df46a86 100644 --- a/src/pakfire/repository/__init__.py +++ b/src/pakfire/repository/__init__.py @@ -19,11 +19,14 @@ # # ############################################################################### +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()): diff --git a/src/pakfire/repository/base.py b/src/pakfire/repository/base.py index 53a2b928f..cc807520b 100644 --- a/src/pakfire/repository/base.py +++ b/src/pakfire/repository/base.py @@ -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() diff --git a/src/pakfire/repository/metadata.py b/src/pakfire/repository/metadata.py index cd86d5110..9fabce077 100644 --- a/src/pakfire/repository/metadata.py +++ b/src/pakfire/repository/metadata.py @@ -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: