diff options
author | Erik Troan <ewt@redhat.com> | 2000-11-22 17:12:09 +0000 |
---|---|---|
committer | Erik Troan <ewt@redhat.com> | 2000-11-22 17:12:09 +0000 |
commit | 5eff87d0e98aa39d3a901b1249f68ded5cb14375 (patch) | |
tree | 56d7d2d5a9ccc4154b41bd8f89c0b4215db1351c /scripts | |
parent | 9024562267ca4674ed108b07cd5f4a80c07befd4 (diff) | |
download | anaconda-5eff87d0e98aa39d3a901b1249f68ded5cb14375.tar.gz anaconda-5eff87d0e98aa39d3a901b1249f68ded5cb14375.tar.xz anaconda-5eff87d0e98aa39d3a901b1249f68ded5cb14375.zip |
*** empty log message ***
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/pkgorder | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/scripts/pkgorder b/scripts/pkgorder new file mode 100755 index 000000000..9359766fe --- /dev/null +++ b/scripts/pkgorder @@ -0,0 +1,115 @@ +#!/usr/bin/python + +import sys +import os +import os.path +import rpm +import string + +sys.path.append("/home/ewt/redhat/anaconda") +sys.path.append("/home/ewt/redhat/anaconda/isys") +rpmFD = None +fns = {} + +import comps + +def cmpHeaderByName(h1, h2): + n1 = h1['name'] + n2 = h2['name'] + + if n1 < n2: + return -1 + elif n1 == n2: + return 0; + + return 1 + +def transCB(what, amount, total, h, intf): + if (what == rpm.RPMCALLBACK_INST_OPEN_FILE): + global rpmFD + global distDir + global pkgOrder + global fns + name = h[1000000] + + # we need the real header for later + rpmFD = os.open(distDir + '/RedHat/RPMS/' + name, os.O_RDONLY) + fd = os.open(distDir + '/RedHat/RPMS/' + name, os.O_RDONLY) + (newH, isSource) = rpm.headerFromPackage(fd) + os.close(fd) + pkgOrder.append(newH) + fns[newH] = name + return rpmFD + elif (what == rpm.RPMCALLBACK_INST_CLOSE_FILE): + global rpmFD + os.close (rpmFD) + +if len(sys.argv) != 3: + print "splitdistro <toppath> <arch>" + sys.exit(1) + +arch = sys.argv[2] +distDir = os.path.normpath(sys.argv[1] + "/" + arch) +srcDir = os.path.normpath(sys.argv[1] + "/SRPMS") + +if not os.path.isdir(distDir): + print "error: %s is not a directory" % distDir + sys.exit(1) + +if not os.path.isdir(srcDir): + print "error: %s is not a directory" % srcDir + sys.exit(1) + + +disc1Dir = distDir + "-disc1" +disc1SrcDir = distDir + "-srpms" +disc2Dir = distDir + "-disc2" + +hdlist = comps.HeaderListFromFile(distDir + "/RedHat/base/hdlist", noscore = 1) +comps = comps.ComponentSet(distDir + "/RedHat/base/comps", hdlist, + arch = arch, matchAllLang = 1) + +for comp in comps: + if comp.name != 'Everything': + comp.select(1) + +for package in hdlist.keys(): + if len(package) >= 7 and package[:7] == "kernel-": + hdlist[package].selected = 1 + +# work out the order we'd like to install everything in +pkgOrder = [] + +list = [] +for p in hdlist.selected(): + list.append(p.h) +list.sort(cmpHeaderByName) + +for item in list: + pkgOrder.append(item) + +list = [] +for p in hdlist.packages.values(): + if not p.selected: + list.append(p.h) + +list.sort(cmpHeaderByName) +for item in list: + pkgOrder.append(item) + +testpath = '/tmp/splitdistro-' + str (os.getpid ()) +os.system ("mkdir -p " + testpath + "/var/lib/rpm") + +db = rpm.opendb(1, testpath) + +ts = rpm.TransactionSet(testpath, db) +for h in pkgOrder: + ts.add(h, h, 'i') +pkgOrder = [] + +ts.order() + +problems = ts.run(rpm.RPMTRANS_FLAG_TEST, ~0, transCB, None) + +for p in pkgOrder: + print fns[p] |