def analyze(self, pkginfo, tar): filenames = set(s.name for s in tar) depfilenames = set() for d in pkginfo['depends']: p = load_from_db(d) if not p: continue depfilenames |= set(name for name, _, _ in p['files']) filenames |= depfilenames for i in tar: if i.issym(): self.infos.append( ("symlink-found %s points to %s", (i.name, i.linkname))) linktarget = i.linkname linklead = os.path.dirname(i.name) # os.path.join drops the 1st arg if the 2nd one is absolute linkdest = os.path.join(linklead, linktarget) linkdest = os.path.normpath(linkdest).lstrip('/') if linkdest not in filenames: self.errors.append(("dangling-symlink %s points to %s", (i.name, i.linkname))) if i.islnk(): self.infos.append( ("hardlink-found %s points to %s", (i.name, i.linkname))) if i.linkname not in filenames: self.errors.append(("dangling-hardlink %s points to %s", (i.name, i.linkname)))
def getprovides(depends, provides): for i in depends: pac = package.load_from_db(i) if pac != None and "provides" in pac and pac["provides"] != None and len(pac["provides"]) > 0: provides[i] = pac["provides"] else: provides[i] = []
def getprovides(depends): provides = {} for i in depends: provides[i] = set() if i in implicit_provides: provides[i].update(implicit_provides[i]) pac = package.load_from_db(i) if pac is None: continue if not pac["provides"]: continue provides[i].update(pac["provides"]) return provides
def single_covered(depend): "Returns full coverage tree of one package, with loops broken" covered = set() todo = set([depend]) while todo: i = todo.pop() covered.add(i) pac = package.load_from_db(i) if pac is None: continue todo |= set(pac["depends"]) - covered return covered - set([depend])
def getcovered(dependlist, covereddepend = None): """ Fills covereddepend with the full dependency tree of dependlist (iterable of package names) """ if covereddepend is None: covereddepend = set() for i in dependlist: pac = package.load_from_db(i) if pac != None and "depends" in pac: newdeps = [j for j in pac["depends"] if j != None and j not in covereddepend] covereddepend.update(newdeps) getcovered(newdeps, covereddepend) return covereddepend