]> git.ipfire.org Git - pakfire.git/commitdiff
Add --offline flag on CLI.
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 31 Mar 2011 18:54:53 +0000 (20:54 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 31 Mar 2011 18:54:53 +0000 (20:54 +0200)
pakfire/__init__.py
pakfire/cli.py
pakfire/repository/__init__.py
pakfire/repository/base.py
pakfire/repository/index.py
pakfire/repository/remote.py

index a049c457f529019cc73742f3f48b4ba64b88939a..08d2d7beef21eb64f4c1d5597d076003ce18fd8f 100644 (file)
@@ -24,7 +24,7 @@ __version__ = PAKFIRE_VERSION
 
 class Pakfire(object):
        def __init__(self, path="/", builder=False, configs=[],
-                       disable_repos=None):
+                       disable_repos=None, offline=False):
                # Check if we are operating as the root user.
                self.check_root_user()
 
@@ -73,7 +73,7 @@ class Pakfire(object):
 
                # Update all indexes of the repositories (not force) so that we will
                # always work with valid data.
-               self.repos.update()
+               self.repos.update(offline=offline)
 
        def check_root_user(self):
                if not os.getuid() == 0 or not os.getgid() == 0:
index 2241fcc3dee7ef46e51d59b48e1551218391ada3..e607430885e7a979ef5b7b383fb4ac27ffc7d53d 100644 (file)
@@ -63,6 +63,7 @@ class Cli(object):
                        self.args.instroot,
                        configs = [self.args.config],
                        disable_repos = self.args.disable_repo,
+                       offline = self.args.offline,
                )
 
                self.action2func = {
@@ -87,6 +88,9 @@ class Cli(object):
                self.parser.add_argument("--disable-repo", nargs="*", metavar="REPO",
                        help=_("Disable a repository temporarily."))
 
+               self.parser.add_argument("--offline", action="store_true",
+                       help=_("Run in offline mode."))
+
        def parse_command_install(self):
                # Implement the "install" command.
                sub_install = self.sub_commands.add_parser("install",
@@ -267,6 +271,7 @@ class CliBuilder(Cli):
                        builder = True,
                        configs = [self.args.config],
                        disable_repos = self.args.disable_repo,
+                       offline = self.args.offline,
                )
 
                self.action2func = {
@@ -409,6 +414,7 @@ class CliServer(Cli):
                        builder = True,
                        configs = [self.args.config],
                        disable_repos = self.args.disable_repo,
+                       offline = self.args.offline,
                )
 
                self.action2func = {
index ce943e440f3791859610bcc03e2f8fc41827cd22..7bd25962c317e1b5c6f4b91a9ab3020fb09d1e69 100644 (file)
@@ -86,12 +86,12 @@ class Repositories(object):
                                repo.enabled = False
                                continue
 
-       def update(self, force=False):
+       def update(self, force=False, offline=False):
                logging.debug("Updating all repository indexes (force=%s)" % force)
 
                # XXX update all indexes if necessary or forced
                for repo in self.enabled:
-                       repo.update(force=force)
+                       repo.update(force=force, offline=offline)
 
        #def get_all(self):
        #       for repo in self.enabled:
index e6d4e9afefca3650475f5ebac0b71dd8a4783948..bf8ce54ec36c70c24e836543a4c5f936360bc2d2 100644 (file)
@@ -39,13 +39,13 @@ class RepositoryFactory(object):
                """
                return False
 
-       def update(self, force=False):
+       def update(self, force=False, offline=False):
                """
                        A function that is called to update the local data of
                        the repository.
                """
                if hasattr(self, "index"):
-                       self.index.update(force)
+                       self.index.update(force, offline=offline)
 
        def get_all(self):
                """
index f18c97d950b88beea1e5c6b2c27cc24a5edce1e8..776cf29b400411a97bf9ce12e821aa3f388cc908 100644 (file)
@@ -64,7 +64,7 @@ class Index(object):
                for pkg in self._packages:
                        yield pkg
 
-       def update(self, force=False):
+       def update(self, force=False, offline=False):
                pass
 
        def add_package(self, pkg):
@@ -82,7 +82,7 @@ class DirectoryIndex(Index):
                # Always update this because it will otherwise contain no data
                self.update(force=True)
 
-       def update(self, force=False):
+       def update(self, force=False, offline=False):
                logging.debug("Updating repository index '%s' (force=%s)" % (self.path, force))
 
                # Do nothing if the update is not forced but populate the database
@@ -241,16 +241,16 @@ class LocalIndex(DatabaseIndexFactory):
 
 class RemoteIndex(DatabaseIndexFactory):
        def open_database(self):
-               self.update(force=False)
+               self.update(force=False, offline=True)
 
-       def _update_metadata(self, force):
+       def _update_metadata(self, force, offline):
                # Shortcut to repository cache.
                cache = self.repo.cache
 
                filename = os.path.join(METADATA_DOWNLOAD_PATH, METADATA_DOWNLOAD_FILE)
 
                # Marker if we need to do the download.
-               download = True
+               download = not offline
 
                # Marker for the current metadata.
                old_metadata = None
@@ -292,7 +292,7 @@ class RemoteIndex(DatabaseIndexFactory):
                self.metadata = metadata.Metadata(self.pakfire, self,
                        cache.abspath(filename))
 
-       def _update_database(self, force):
+       def _update_database(self, force, offline):
                # Shortcut to repository cache.
                cache = self.repo.cache
 
@@ -300,6 +300,9 @@ class RemoteIndex(DatabaseIndexFactory):
                filename = os.path.join(METADATA_DOWNLOAD_PATH, self.metadata.database)
 
                if not cache.exists(filename):
+                       if offline:
+                               raise Exception, "No database. Cannot download one in offline mode..."
+
                        # Initialize a grabber for download.
                        grabber = downloader.DatabaseDownloader(
                                text = _("%s: package database") % self.repo.name,
@@ -333,7 +336,7 @@ class RemoteIndex(DatabaseIndexFactory):
                self.db = database.RemotePackageDatabase(self.pakfire,
                        cache.abspath(filename))
 
-       def update(self, force=False):
+       def update(self, force=False, offline=False):
                """
                        Download the repository metadata and the package database.
                """
@@ -343,10 +346,10 @@ class RemoteIndex(DatabaseIndexFactory):
                        return
 
                # At first, update the metadata.
-               self._update_metadata(force)
+               self._update_metadata(force, offline)
 
                # Then, we download the database eventually.
-               self._update_database(force)
+               self._update_database(force, offline)
 
                # XXX this code needs lots of work:
                # XXX   * check the metadata content
index c2ffcff1afa542e1a71d543e49a87d636f1b587c..1b57d1027d7ed27bf12909632823dace57fc7627 100644 (file)
@@ -76,9 +76,9 @@ class RemoteRepository(RepositoryFactory):
 
                return priority
 
-       def update(self, force=False):
+       def update(self, force=False, offline=False):
                if self.index:
-                       self.index.update(force=force)
+                       self.index.update(force=force, offline=offline)
 
        def _replace_from_cache(self, pkg):
                for _pkg in self.cache.packages: