Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 4330 Details for
Bug 8087
SLOTs changing unnecessarily
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
dups2.py
dups2.py (text/plain), 5.91 KB, created by
CJ Kucera
on 2002-09-30 08:34:49 UTC
(
hide
)
Description:
dups2.py
Filename:
MIME Type:
Creator:
CJ Kucera
Created:
2002-09-30 08:34:49 UTC
Size:
5.91 KB
patch
obsolete
>#!/usr/bin/env python > >import os,sys,portage,string > ># ># This function should be smart enough to figure out what's going ># to be deleted if we unmerge a package. This duplicates a lot ># of things that are going on inside portage.py, and should probably ># be contained there, but I'm not feeling up to hacking it right ># now. ># >def checkdeletions(packageVersion): > > # We should really just use portage.dblink, but for now I'm just > # going to do this instead. > fileName = "/var/db/pkg/" + packageVersion + "/CONTENTS" > try: > df = open(fileName, "r") > fileinfo = df.readlines() > df.close() > except IOError: > print "That package doesn't exist." > sys.exit() > > #packageArray = string.split(packageVersion, "/") > #mydblink = portage.dblink(packageArray[0], packageArray[1], "/") > #pkgfiles=mydblink.getcontents() > #mykeys=pkgfiles.keys() > #mykeys.sort() > #mykeys.reverse() > #print str(mykeys) > #return > > deletedfiles=[] > dirs=[] > > # Make a list of files that would get deleted, and a list of all the dirs. > for line in fileinfo: > line = line[:-1] > lineinfo = string.split(line, " ") > if (lineinfo[0] == "dir"): > if (os.path.isdir(lineinfo[1])): > dirs.append(lineinfo[1]) > elif (lineinfo[0] == "obj"): > if (os.path.exists(lineinfo[1])): > try: > statInfo = os.stat(lineinfo[1]) > except OSError: > print "Something's wrong with file " + lineinfo[1] > continue > if (str(statInfo.st_mtime) == lineinfo[3]): > md5stream = os.popen("/usr/bin/md5sum " + lineinfo[1] + " 2>/dev/null", "r") > md5line = md5stream.readline() > md5stream.close() > md5val = string.split(md5line, " ")[0] > if (md5val == lineinfo[2]): > print "File " + lineinfo[1] + " will get hosed." > deletedfiles.append(lineinfo[1]) > elif (lineinfo[0] == "sym"): > if (os.path.islink(lineinfo[1])): > if (os.readlink(lineinfo[1]) == lineinfo[3]): > try: > statInfo = os.lstat(lineinfo[1]) > except OSError: > print "Something's wrong with symlink " + lineinfo[1] > continue > if (str(statInfo.st_mtime) == lineinfo[4]): > print "Symlink " + lineinfo[1] + " will get hosed." > deletedfiles.append(lineinfo[1]) > else: > print "Unsupported type: " + lineinfo[0] > > # We should probably display directories here, too. > > ># Now the meat of everything >installcache = portage.db["/"]["vartree"] >for package in installcache.getallnodes(): > versions = installcache.getnode(package) > if (len(versions) > 1): > versions.sort() > totalversions=[] > totalblank=0 > counter=0 > for version in versions: > counter = counter + 1 > slot = installcache.getslot(version[0]) > version.append(slot) > version.append(counter) > if (slot == ""): > totalblank = totalblank + 1 > print "------------------------" > print > print "Package " + package + " has multiple versions installed:" > print > donewithloop = 0 > unmergelist = [] > while (not donewithloop): > for version in versions: > print " " + str(version[3]) + ") " + version[0] + " has a SLOT of '" + version[2] + "'" > print > for version in versions: > if (version[2] == ""): > unmergelist.append(version) > if (len(unmergelist) > 0): > print "Here's what we'd like to unmerge:" > print > for unmerge in unmergelist: > print " * " + unmerge[0] > print > else: > print "Currently nothing is marked for unmerging." > print > sys.stdout.write("Do the unmerge [(N)o/(y)es/(m)odify/(d)ependencies/(f)iles/(q)uit]? ") > dounmerge = sys.stdin.readline() > response = dounmerge[0].lower() > print > if (response == "m"): > numlist = " " > for unmerge in unmergelist: > numlist = numlist + str(unmerge[3]) + " " > numlist = numlist[1:-1] > print "Type the numbers of the versions you want to unmerge, seperated" > sys.stdout.write("by spaces: [" + numlist + "]: ") > newnumlist = sys.stdin.readline() > newnumlist = newnumlist[:-1] > if (len(newnumlist) > 0): > newnums = string.split(newnumlist) > unmergelist = [] > for version in versions: > if (str(version[3]) in newnums): > unmergelist.append(version) > print > elif (response == "y"): > if (len(unmergelist) == 0): > print "First select some versions to unmerge, by pressing 'm'" > print > else: > print "First we'll check emerge --pretend to make sure things are kosher . . ." > print > tounmerge = "" > for unmerge in unmergelist: > tounmerge = tounmerge + unmerge[0] + " " > os.system("emerge --pretend unmerge " + tounmerge) > print > sys.stdout.write("Still do the unmerge [N/y/q]? ") > dounmerge = sys.stdin.readline() > print > if (dounmerge[0].lower() == "y"): > print "Okay, here we go." > os.system("emerge unmerge " + tounmerge) > donewithloop = 1 > elif (dounmerge[0].lower() == "q"): > sys.exit() > else: > print "Maybe next time, then." > elif (response == "d"): > if (len(unmergelist) == 0): > print "First select some versions to unmerge, by pressing 'm'" > print > else: > for unmerge in unmergelist: > os.system("qpkg -q " + unmerge[0]) > print > elif (response == "f"): > if (len(unmergelist) == 0): > print "First select some versions to unmerge, by pressing 'm'" > print > else: > for unmerge in unmergelist: > print "Package " + unmerge[0] + ":" > checkdeletions(unmerge[0]) > print > elif (response == "q"): > sys.exit() > else: > print "We'll skip that one for now, then." > donewithloop = 1 > print > ># The End
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 8087
:
4005
| 4330