From: Michael Tremer Date: Sun, 6 Feb 2011 10:56:49 +0000 (+0100) Subject: Make option to disable repositories on command line. X-Git-Tag: 0.9.3~211 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f781b1ab90a1fbb8483a0fdb47131783089f58a2;p=pakfire.git Make option to disable repositories on command line. To not confuse the user, we check if there is at least one enabled repository. --- diff --git a/pakfire/__init__.py b/pakfire/__init__.py index 951c8604d..811435203 100644 --- a/pakfire/__init__.py +++ b/pakfire/__init__.py @@ -17,14 +17,15 @@ import repository import transaction from constants import * -from errors import BuildError +from errors import BuildError, PakfireError from i18n import _ __version__ = 0.1 class Pakfire(object): - def __init__(self, path="/tmp/pakfire", builder=False, configs=[]): + def __init__(self, path="/tmp/pakfire", builder=False, configs=[], + disable_repos=None): # The path where we are operating in self.path = path @@ -59,7 +60,18 @@ class Pakfire(object): # Run plugins that implement an initialization method. self.plugins.run("init") - # XXX disable repositories if passed on command line + # Disable repositories if passed on command line + if disable_repos: + for repo in disable_repos: + self.repos.disable_repo(repo) + + # Check if there is at least one enabled repository. + if len(self.repos) < 2: + raise PakfireError, "No repositories were configured." + + # Update all indexes of the repositories (not force) so that we will + # always work with valid data. + self.repos.update_indexes() def check_build_mode(self): """ diff --git a/pakfire/cli.py b/pakfire/cli.py index ddce0f980..ab7f14351 100644 --- a/pakfire/cli.py +++ b/pakfire/cli.py @@ -57,6 +57,7 @@ class Cli(object): self.pakfire = Pakfire( self.args.instroot, configs = [self.args.config], + disable_repos = self.args.disable_repo, ) self.action2func = { @@ -73,6 +74,9 @@ class Cli(object): self.parser.add_argument("-c", "--config", nargs="?", help=_("Path to a configuration file to load.")) + self.parser.add_argument("--disable-repo", nargs="*", metavar="REPO", + help=_("Disable a repository temporarily.")) + def parse_command_install(self): # Implement the "install" command. sub_install = self.sub_commands.add_parser("install", @@ -163,6 +167,7 @@ class CliBuilder(Cli): self.pakfire = Pakfire( builder = True, configs = [self.args.config], + disable_repos = self.args.disable_repo, ) self.action2func = { diff --git a/pakfire/errors.py b/pakfire/errors.py index f5e9143bb..fa9f55c6c 100644 --- a/pakfire/errors.py +++ b/pakfire/errors.py @@ -15,3 +15,6 @@ class ConfigError(Error): class DownloadError(Error): pass +class PakfireError(Error): + pass + diff --git a/pakfire/repository.py b/pakfire/repository.py index 664167f26..02d1286aa 100644 --- a/pakfire/repository.py +++ b/pakfire/repository.py @@ -39,7 +39,15 @@ class Repositories(object): for repo_name, repo_args in self.config.get_repos(): self._parse(repo_name, repo_args) - self.update_indexes() + def __len__(self): + """ + Return the count of enabled repositories. + """ + i = 0 + for repo in self.enabled: + i += 1 + + return i def _parse(self, name, args): # XXX need to make variable expansion @@ -67,6 +75,13 @@ class Repositories(object): yield repo + def disable_repo(self, name): + for repo in self.enabled: + if repo.name == name: + logging.debug("Disabled repository '%s'" % repo.name) + repo.enabled = False + continue + def update_indexes(self, force=False): logging.debug("Updating all repository indexes (force=%s)" % force) @@ -112,6 +127,9 @@ class RepositoryFactory(object): self.name, self.description = name, description + # All repositories are enabled by default + self.enabled = True + # Add link to distro object self.distro = pakfire.distro #distro.Distribution() @@ -183,8 +201,6 @@ class RepositoryFactory(object): class LocalRepository(RepositoryFactory): - enabled = True - def __init__(self, pakfire): RepositoryFactory.__init__(self, pakfire, "installed", "Installed packages")