[Pisi] [PATCH 2/2] pisi rebuilddb
Faik Uygur
faikuygur at gmail.com
29 Eki 2005 Cmt 01:54:44 EEST
Merhaba,
pisi rebuilddb.
Saygılar,
Index: pisi/api.py
===================================================================
--- pisi/api.py (revision 4021)
+++ pisi/api.py (working copy)
@@ -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 @@
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 @@
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 @@
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)
Index: pisi/cli/commands.py
===================================================================
--- pisi/cli/commands.py (revision 4021)
+++ pisi/cli/commands.py (working copy)
@@ -581,7 +581,42 @@
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
Pisi mesaj listesiyle ilgili
daha fazla bilgi