#!/usr/bin/python # Copyright 1999-2006 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id: /var/cvsroot/gentoo-src/portage/bin/pkgmerge,v 1.8 2004/10/04 13:56:50 vapier Exp $ import sys,os,string sys.path = ["/usr/lib/portage/pym"]+sys.path import portage,xpak #build our package digraph def digraph_create(digraph,mykey,myprovides=None): mytbz2=xpak.tbz2(bintree.getname(mykey)) mydep=mytbz2.getelements("RDEPEND") digraph.addnode(mykey,myprovides) mycheck=roottree.depcheck(string.join(mydep," ")) if mycheck[0]==0: print "!!! Error: RDEPEND string formatted incorrectly:",mydep return None for x in mycheck[1]: mymatch=bintree.dep_bestmatch(x) if mymatch=="": print "!!! Error: can't resolve dependency --",x return None if not digraph_create(digraph,mymatch,mykey): return None return 1 #main program loop myvirtuals=portage.getvirtuals(portage.root) roottree=portage.vartree(portage.root,myvirtuals) bintree=portage.binarytree("/",myvirtuals) pretend=0 if len(sys.argv)>=2: if sys.argv[1]=="--pretend": print "These are the packages that I would merge, in order:" pretend=1 del sys.argv[1] elif sys.argv[1]=="--help": print "Usage: pkgmerge [--pretend] pkg1.tbz2 [pkg2.tbz2]..." sys.exit(1) for mypkg in sys.argv[1:]: digraph=portage.digraph() mytbz2=xpak.tbz2(mypkg) mykey=mytbz2.getelements("CATEGORY")[0]+"/"+os.path.basename(mypkg)[:-5] digraph_create(digraph,mykey) while not digraph.empty(): mykey=digraph.firstzero() if not mykey: print "!!! Error: circular dependencies" sys.exit(1) mytbz2=bintree.getname(mykey) if pretend: print mytbz2 else: portage.pkgmerge(mytbz2,portage.settings["ROOT"]) digraph.delnode(mykey)