From d94496f2e7894be8ac04352121de6c31cf8b3baf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Sat, 29 Oct 2005 18:11:07 +0000 Subject: [PATCH] * patch for rebuilddb command from Faik Uygur --- pisi/api.py | 45 +++++++++++++++++++++++++++++++++++++++++++- pisi/cli/commands.py | 35 ++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/pisi/api.py b/pisi/api.py index f099e96d..28924b16 100644 --- a/pisi/api.py +++ b/pisi/api.py @@ -16,6 +16,8 @@ import os import sys +from os.path import join, exists + ver = sys.version_info if ver[0] <= 2 and ver[1] < 4: from sets import Set as set @@ -39,6 +41,8 @@ import pisi.sourcedb from pisi.index import Index import pisi.cli from pisi.operations import install, remove, upgrade +from pisi.metadata import MetaData +from pisi.files import Files class Error(pisi.Error): pass @@ -178,7 +182,6 @@ def configure_pending(): ctx.installdb.clear_pending(x) except ImportError: raise Error(_("COMAR: comard not fully installed")) - def info(package): if package.endswith(ctx.const.package_suffix): @@ -331,3 +334,43 @@ def delete_cache(): util.clean_dir(ctx.config.packages_dir()) util.clean_dir(ctx.config.archives_dir()) util.clean_dir(ctx.config.tmp_dir()) + +def resurrect_package(package_fn): + """Resurrect the package in the PiSi databases""" + + metadata_xml = join(ctx.config.lib_dir(), package_fn, ctx.const.metadata_xml) + if not exists(metadata_xml): + return + + metadata = MetaData() + metadata.read(metadata_xml) + + errs = metadata.has_errors() + if errs: + util.Checks.print_errors(errs) + raise Error, _("MetaData format wrong") + + files_xml = join(ctx.config.lib_dir(), package_fn, ctx.const.files_xml) + if not exists(files_xml): + return + + files = Files() + files.read(files_xml) + + if files.has_errors(): + raise Error, _("Invalid %s") % ctx.const.files_xml + + pkginfo = metadata.package + + # installdb + ctx.installdb.install(metadata.package.name, + metadata.package.version, + metadata.package.release, + metadata.package.build, + metadata.package.distribution) + + # filesdb + ctx.filesdb.add_files(metadata.package.name, files) + + # installed packages + packagedb.inst_packagedb.add_package(pkginfo) diff --git a/pisi/cli/commands.py b/pisi/cli/commands.py index 817dfb44..58cc77af 100644 --- a/pisi/cli/commands.py +++ b/pisi/cli/commands.py @@ -581,6 +581,41 @@ Usage: list-installed ctx.ui.info('%15s - %s ' % (package.name, package.summary)) self.finalize() +class RebuildDb(Command): + """Rebuild Databases + +Usage: rebuilddb + +Rebuilds the PiSi databases +""" + __metaclass__ = autocommand + + def __init__(self): + super(RebuildDb, self).__init__() + + name = ("rebuilddb", "rd") + + def run(self): + self.init() + + #FIXME: Confirm icin init, unlink icin finalize, rebuild_db icin init lazim :) + if ctx.ui.confirm(_('Rebuild PISI databases? ')): + self.finalize() + import os + for db in os.listdir(ctx.config.db_dir()): + os.unlink(os.path.join(ctx.config.db_dir(), db)) + + self.init() + self.rebuild_db() + + self.finalize() + + def rebuild_db(self): + import os + for root, dirs, files in os.walk(ctx.config.lib_dir()): + for package_fn in dirs: + ctx.ui.debug(package_fn) + pisi.api.resurrect_package(package_fn) class UpdateRepo(Command): """Update repository databases