for input_path in input_paths:
repo._collect_packages(input_path)
+ repo.index.tag_db()
import logging
import os
+import random
+import shutil
import database
import packages
import repository
+import util
from constants import *
def add_package(self, pkg):
raise NotImplementedError
+ def tag_db(self):
+ raise NotImplementedError
+
class DirectoryIndex(Index):
def __init__(self, pakfire, repo, path):
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
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):
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)
# 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.
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")