[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