diff --git a/pisi/packagedb.py b/pisi/packagedb.py index df3792ba..c1fbc597 100644 --- a/pisi/packagedb.py +++ b/pisi/packagedb.py @@ -74,8 +74,9 @@ class PackageDB(object): self.d.put(name, package_info, txn) for dep in package_info.runtimeDependencies(): dep_name = str(dep.package) - if self.dr.has_key(dep_name, txn): + if not self.dr.has_key(dep_name, txn): revdep = self.dr.get(dep_name, txn) + revdep = revdep.filter(lambda (n,d):n!=name, revdep) revdep.append( (name, dep) ) self.dr.put(dep_name, revdep, txn) else: diff --git a/tools/repo-dep-resolver.py b/tools/repo-dep-resolver.py deleted file mode 100644 index 86e2d752..00000000 --- a/tools/repo-dep-resolver.py +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# basic dependency solver.. -# -# example usage: -# ./repo-dep-resolver.py pardus-devel/desktop/kde/ - - -import xml.dom.minidom as mdom -import sys -import os - -Get = lambda j, w: \ - [x for x in j.childNodes \ - if x.nodeType == x.ELEMENT_NODE \ - if x.tagName == w] - - -def getBuildDependencies(pspec): - dom = mdom.parse(pspec) - try: - return [bdep.firstChild.wholeText for bdep in Get(Get(Get(dom.documentElement, "Source")[0], "BuildDependencies")[0], 'Dependency')] - except: - return [''] - -def getRuntimeDependencies(pspec): - rdeps = [] - dom = mdom.parse(pspec) - try: - for p in Get(dom.documentElement, "Package"): - rdeps += [bdep.firstChild.wholeText for bdep in Get(Get(p, "RuntimeDependencies")[0], 'Dependency')] - except: - pass - - #remove duplicated entries.. - for d in rdeps: - for i in range(0, rdeps.count(d)-1): - rdeps.remove(d) - - return rdeps - -def getPackageNames(pspec): - packages = [] - dom = mdom.parse(pspec) - pspecdata = dom.documentElement - for p in Get(pspecdata, "Package"): - packages.append(Get(p, "Name")[0].firstChild.wholeText) - return packages - -def findPspecs(): - pspeclist = [] - for root, dirs, files in os.walk(sys.argv[1]): - if "pspec.xml" in files: - pspeclist.append(root + '/pspec.xml') - return pspeclist - -def buildDepResolver(pspeclist): - """arranges the order of the pspec's in the pspeclist to satisfy build deps""" - clean = True - for i in range(0, pspeccount): - pspec = pspeclist[i] - for p in bdepmap.get(pspec): - for j in range(i+1, pspeccount): - if p in namemap.get(pspeclist[j]): - pspeclist.insert(j+1, pspeclist.pop(i)) - clean = False - return clean - -def runtimeDepResolver(pspeclist): - """arranges the order of the pspec's in the pspeclist to satisfy runtime deps""" - clean = True - for i in range(0, pspeccount): - pspec = pspeclist[i] - for p in rdepmap.get(pspec): - for j in range(i+1, pspeccount): - if p in namemap.get(pspeclist[j]): - pspeclist.insert(j+1, pspeclist.pop(i)) - clean = False - return clean - - -pspeclist = findPspecs() - -bdepmap, rdepmap, namemap, pspeccount = {}, {}, {}, len(pspeclist) - -for pspec in pspeclist: bdepmap[pspec] = getBuildDependencies(pspec) -for pspec in pspeclist: rdepmap[pspec] = getRuntimeDependencies(pspec) -for pspec in pspeclist: namemap[pspec] = getPackageNames(pspec) - -#poor man's brute force.. -while (not buildDepResolver(pspeclist)) and (not runtimeDepResolver(pspeclist)): pass - -print pspeclist