diff --git a/pisi-index b/pisi-index index d30535a8..72bb54ce 100755 --- a/pisi-index +++ b/pisi-index @@ -6,7 +6,7 @@ import sys from optparse import OptionParser #sys.path.append("./lib") -import pisi.install +from pisi.index import Index import pisi.util from pisi.ui import ui @@ -38,5 +38,9 @@ def main(): ui.info('* Building index of PISI files under ' + repo_dir + '\n') + index = Index() + index.index(repo_dir) + index.write('pisi-index.xml') + if __name__ == "__main__": main() diff --git a/pisi/index.py b/pisi/index.py new file mode 100644 index 00000000..c9df931d --- /dev/null +++ b/pisi/index.py @@ -0,0 +1,45 @@ + +from package import Package +from xmlfile import XmlFile +import metadata +from ui import ui +import util +from config import config + +class Index(XmlFile): + + def __init__(self): + XmlFile.__init__(self,"PISI") + self.sources = [] + self.packages = [] + + def write(self, filename): + """Write index file""" + self.newDOM() + for pkg in self.packages: + self.addChild(pkg.elt(self)) + self.writexml(filename) + + def index(self, repo_dir): + + import os + from os.path import join, getsize + for root, dirs, files in os.walk(repo_dir): + for fn in files: + if fn.endswith('.pisi'): + ui.info('Adding ' + fn + ' to package index\n') + self.add_package(join(root, fn)) + + def add_package(self, path): + package = Package(path, 'r') + # extract control files + util.clean_dir(config.install_dir()) + package.extract_PISI_files(config.install_dir()) + + md = metadata.MetaData() + md.read(config.install_dir() + '/metadata.xml') + # check package semantics + if md.verify(): + self.packages.append(md.package) + else: + ui.error('Package ' + fn + ' metadata corrupt\n')