]> git.ipfire.org Git - pakfire.git/commitdiff
Make option to disable repositories on command line.
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 6 Feb 2011 10:56:49 +0000 (11:56 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 6 Feb 2011 10:56:49 +0000 (11:56 +0100)
To not confuse the user, we check if there is at least one
enabled repository.

pakfire/__init__.py
pakfire/cli.py
pakfire/errors.py
pakfire/repository.py

index 951c8604d8e26529ee2e90d387a465e11544d4ef..81143520322130c245d092c5e280746e8f7e8de3 100644 (file)
@@ -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):
                """
index ddce0f98028c7a2b49ac2b008a74bbcc1fdc90a1..ab7f14351812e44f3a644be165676923f23f86ed 100644 (file)
@@ -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 = {
index f5e9143bbded01b1a76cceeae903dc2b573f348b..fa9f55c6c126330152f2e22fe7068b67922aad9a 100644 (file)
@@ -15,3 +15,6 @@ class ConfigError(Error):
 class DownloadError(Error):
        pass
 
+class PakfireError(Error):
+       pass
+
index 664167f262e9e5e7b96fbce709d85d68c2988f41..02d1286aaf692ca0d1cdb874ed4789a52d889370 100644 (file)
@@ -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")