#!/usr/bin/python # -*- coding: utf-8 -*- import os import sys import getopt import gzip import errno import simplejson os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' import patchtracker.models import patchtracker.Conf as Conf from patchtracker.SourceArchive import Archive from patchtracker.PtsIndex import PtsIndexFile if __name__ == '__main__': opts,args = getopt.getopt(sys.argv[1:], "ais:p:") suites = None packages = None update_archive = False gen_pts_index = False for o,v in opts: if o == "-s": suites = v.split(',') elif o == "-p": packages = v.split(',') elif o == "-a": update_archive = True elif o == "-i": gen_pts_index = True if update_archive: os.system("env PYTHONPATH=%s reprepro -b %s --confdir ./reprepro/conf update"% (os.path.dirname(os.path.realpath(sys.argv[0])), Conf.archive_root,)) a = Archive(Conf.archive_root, suitefilter=suites, pkgfilter=packages) pts_idx = PtsIndexFile() print a for s in a.suites(filter=suites): print "suite: ",s try: suite = patchtracker.models.RepositorySuite.objects.get(name=s) except patchtracker.models.RepositorySuite.DoesNotExist: suite = patchtracker.models.RepositorySuite.objects.create(name=s) suite.save() for c in a.components(s): print "\tcomponent:",c try: component = patchtracker.models.RepositoryComponent.objects.get(name=c) except patchtracker.models.RepositoryComponent.DoesNotExist: component = patchtracker.models.RepositoryComponent.objects.create(name=c) component.save() for p in a.sourcepackages(s, c, filter=packages): print "\t\tpackage:",p try: pkg = patchtracker.models.SourcePackage.objects.get(name=p.name, version=p.version) except patchtracker.models.SourcePackage.DoesNotExist: p.save() pkg = p try: m = patchtracker.models.SourcePackageMapping.objects.get(suite=suite, component=component, package=pkg) except patchtracker.models.SourcePackageMapping.DoesNotExist: m = patchtracker.models.SourcePackageMapping.objects.create(suite=suite, component=component, package=pkg) m.save() if gen_pts_index: pts_idx.add(pkg) if gen_pts_index: pts_fh = gzip.GzipFile(Conf.pts_index_file, mode="wb") simplejson.dump(pts_idx, pts_fh) pts_fh.close()