]> git.ipfire.org Git - pakfire.git/commitdiff
Add tagging of database when creating a repository.
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 20 Feb 2011 09:54:43 +0000 (10:54 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 20 Feb 2011 09:54:43 +0000 (10:54 +0100)
pakfire/__init__.py
pakfire/index.py
pakfire/repository.py
pakfire/util.py

index 57f9b78f9f54b308b3a722e37527696ecef6ddf5..f8378dcd96267640f14cdb6b70e99acb79110b85 100644 (file)
@@ -202,3 +202,4 @@ class Pakfire(object):
                for input_path in input_paths:
                        repo._collect_packages(input_path)
 
+               repo.index.tag_db()
index 63f698ac1816e6029d990b7880eceea37e24f70a..87532f1ea7f11307b4ff52ab639a6c25f110fc7f 100644 (file)
@@ -2,10 +2,13 @@
 
 import logging
 import os
+import random
+import shutil
 
 import database
 import packages
 import repository
+import util
 
 from constants import *
 
@@ -59,6 +62,9 @@ class Index(object):
        def add_package(self, pkg):
                raise NotImplementedError
 
+       def tag_db(self):
+               raise NotImplementedError
+
 
 class DirectoryIndex(Index):
        def __init__(self, pakfire, repo, path):
@@ -124,7 +130,7 @@ class DatabaseIndex(Index):
 
                else:
                        # Generate path to database file.
-                       filename = os.path.join(repo.path, "XXX-to-be-renamed.db")
+                       filename = os.path.join(repo.path, ".index.db.%s" % random.randint(0, 1024))
                        self.db = database.RemotePackageDatabase(self.pakfire, filename)
 
        @property
@@ -169,6 +175,19 @@ class DatabaseIndex(Index):
        def add_package(self, pkg, reason=None):
                return self.db.add_package(pkg, reason)
 
+       def tag_db(self):
+               self.db.close()
+
+               # Calculate a filename that is based on the hash of the file
+               # (just to trick proxies, etc.)
+               filename = util.calc_hash1(self.db.filename) + "-packages.db"
+
+               # Copy the database to the right place.
+               shutil.copy2(self.db.filename, os.path.join(self.repo.path, filename))
+
+               # Reopen the database.
+               self.db = database.RemotePackageDatabase(self.pakfire, self.db.filename)
+
 
 # XXX maybe this can be removed later?
 class InstalledIndex(DatabaseIndex):
index 23688a758b44d3310062a0b1d887193d5bdd3ef7..fea2a6801c2869212898ef248886d471d77f7d2d 100644 (file)
@@ -281,6 +281,9 @@ class LocalRepository(RepositoryFactory):
 
                repo_filename = os.path.join(self.path, pkg.arch, os.path.basename(pkg.filename))
 
+               # Do we need to copy the package files?
+               copy = True
+
                pkg_exists = None
                if os.path.exists(repo_filename):
                        pkg_exists = packages.BinaryPackage(self.pakfire, self, repo_filename)
@@ -289,14 +292,15 @@ class LocalRepository(RepositoryFactory):
                        # skip any further processing.
                        if pkg == pkg_exists:
                                logging.debug("The package does already exist in this repo: %s" % pkg.friendly_name)
-                               return
+                               copy = False
 
-               logging.debug("Copying package '%s' to repository." % pkg.friendly_name)
-               repo_dirname = os.path.dirname(repo_filename)
-               if not os.path.exists(repo_dirname):
-                       os.makedirs(repo_dirname)
+               if copy:
+                       logging.debug("Copying package '%s' to repository." % pkg.friendly_name)
+                       repo_dirname = os.path.dirname(repo_filename)
+                       if not os.path.exists(repo_dirname):
+                               os.makedirs(repo_dirname)
 
-               os.link(pkg.filename, repo_filename)
+                       os.link(pkg.filename, repo_filename)
 
                # Create new package object, that is connected to this repository
                # and so we can do stuff.
index 48d67f1cc8d26a19875698561028ce894d10099c..1e03ad9ee00f266ed3925dbfcaae4c2bd1f1fd96 100644 (file)
@@ -12,7 +12,7 @@ import sys
 import time
 
 from errors import Error
-from packages.util import format_size
+from packages.util import calc_hash1, format_size
 
 _libc = ctypes.cdll.LoadLibrary(None)
 _errno = ctypes.c_int.in_dll(_libc, "errno")