Remove lots of unnecessary list generation via dict.keys().
authorZac Medico <zmedico@gentoo.org>
Thu, 21 Jun 2007 10:57:55 +0000 (10:57 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 21 Jun 2007 10:57:55 +0000 (10:57 -0000)
svn path=/main/trunk/; revision=6911

bin/fix-db.py
bin/md5check.py
bin/portageq
bin/repoman
pym/emerge/__init__.py
pym/portage/__init__.py

index 19eb3142588e0319d3c358604f6cb635561c6ae3..d17347efb7458bdf73ab741bcab3a0e51a83407a 100755 (executable)
@@ -136,7 +136,7 @@ for cat in os.listdir(vardbdir):
 
 actions = {}
 writemsg("\n\n")
-for catpkg in bad.keys():
+for catpkg in bad:
        bad[catpkg].sort()
 
        mystr = ""
@@ -155,7 +155,7 @@ for catpkg in bad.keys():
 
 if (len(sys.argv) > 1) and (sys.argv[1] == "--fix"):
        writemsg("These are only directions, at the moment.")
-       for catpkg in actions.keys():
+       for catpkg in actions:
                action = actions[catpkg]
                writemsg("We will now '%s' '%s'..." % (action, catpkg))
                #if action == 
index 3525ea11166214265098af78398a95b2823b78ad..c625fad17ffc04df67f30a470dd5d54f3a18667f 100755 (executable)
@@ -68,10 +68,10 @@ for mycpv in hugelist:
                else:
                        continue
                
-               if mybn not in md5sums.keys():
+               if mybn not in md5sums:
                        portage.util.writemsg("Missing md5sum: %s in %s\n" % (mybn, mycpv))
                else:
-                       if mybn in md5_list.keys():
+                       if mybn in md5_list:
                                if (md5_list[mybn]["MD5"]  != md5sums[mybn]["MD5"]) or \
                                   (md5_list[mybn]["size"] != md5sums[mybn]["size"]):
 
@@ -89,12 +89,12 @@ for mycpv in hugelist:
                        del md5sums[mybn]
                
        #portage.writemsg(str(bn_list)+"\n")
-       for x in md5sums.keys():
+       for x in md5sums:
                if x not in bn_list:
                        portage.writemsg("Extra md5sum: %s in %s\n" % (x, mycpv))
 
 
 print col_list
 print
-print str(len(md5_list.keys()))+" unique distfile md5s."
+print str(len(md5_list))+" unique distfile md5s."
 print str(len(bn_list))+" unique distfile names."
index b9260fed574610df9f210365a450ccb85e8e7af7..11ac316eb42e49b8e4e987f2f04dcc30550b28a8 100755 (executable)
@@ -305,7 +305,7 @@ def list_preserved_libs(argv):
                sys.exit(2)
        mylibs = portage.db[argv[0]]["vartree"].dbapi.plib_registry.getPreservedLibs()
        rValue = 0
-       for cpv in mylibs.keys():
+       for cpv in mylibs:
                for path in mylibs[cpv]:
                        print "%s: %s" % (cpv, path)
                        rValue = 1
@@ -328,7 +328,7 @@ def usage(argv):
        # Show our commands -- we do this by scanning the functions in this
        # file, and formatting each functions documentation.
        #
-       commands = [x for x in globals().keys() if x not in \
+       commands = [x for x in globals() if x not in \
                                ("usage", "__doc__", "__name__", "main", "os", "portage", \
                                "sys", "__builtins__", "types", "string","exithandler")]
        commands.sort()
index 6fcc2a1afa19d52e8284b4f30e4b475224cc7c7c..483eff4e55bec8318729180b337558202754616b 100755 (executable)
@@ -351,9 +351,9 @@ myoptions=[]
 if len(sys.argv)>1:
        x=1
        while x < len(sys.argv):
-               if sys.argv[x] in shortmodes.keys():
+               if sys.argv[x] in shortmodes:
                        sys.argv[x]=shortmodes[sys.argv[x]]
-               elif sys.argv[x] in repoman_shortoptions.keys():
+               elif sys.argv[x] in repoman_shortoptions:
                        sys.argv[x] = repoman_shortoptions[sys.argv[x]]
                if sys.argv[x] in modes:
                        if mymode is None:
@@ -1479,7 +1479,7 @@ def grouplist(mylist,seperator="/"):
                xs=x.split(seperator)
                if xs[0]==".":
                        xs=xs[1:]
-               if xs[0] not in mygroups.keys():
+               if xs[0] not in mygroups:
                        mygroups[xs[0]]=[seperator.join(xs[1:])]
                else:
                        mygroups[xs[0]]+=[seperator.join(xs[1:])]
index 031691be62e3e99b750536ab82946280b93105d4..e62611e8e943f5d6e7007a6577b4ab537ce9592b 100644 (file)
@@ -441,7 +441,7 @@ class search(object):
                                if self.searchre.search(full_desc):
                                        self.matches["desc"].append([full_package,masked])
                self.mlen=0
-               for mtype in self.matches.keys():
+               for mtype in self.matches:
                        self.matches[mtype].sort()
                        self.mlen += len(self.matches[mtype])
 
@@ -450,7 +450,7 @@ class search(object):
                print "\b\b  \n[ Results for search key : "+white(self.searchkey)+" ]"
                print "[ Applications found : "+white(str(self.mlen))+" ]"
                print " "
-               for mtype in self.matches.keys():
+               for mtype in self.matches:
                        for match,masked in self.matches[mtype]:
                                if mtype=="pkg":
                                        catpack=match
@@ -2214,7 +2214,7 @@ class depgraph(object):
                        mylist = getlist(self.settings, "system")
                        worlddict=genericdict(worldlist)
 
-                       for x in worlddict.keys():
+                       for x in worlddict:
                                if not portage.isvalidatom(x):
                                        world_problems = True
                                        continue
@@ -2697,7 +2697,7 @@ class depgraph(object):
                                                if myfilesdict is None:
                                                        myfilesdict="[empty/missing/bad digest]"
                                                else:
-                                                       for myfetchfile in myfilesdict.keys():
+                                                       for myfetchfile in myfilesdict:
                                                                if myfetchfile not in myfetchlist:
                                                                        mysize+=myfilesdict[myfetchfile]
                                                                        myfetchlist.append(myfetchfile)
@@ -3612,7 +3612,7 @@ def unmerge(settings, myopts, vartree, unmerge_action, unmerge_files,
                                        if not slotmap.has_key(myslot):
                                                slotmap[myslot]={}
                                        slotmap[myslot][localtree.dbapi.cpv_counter(mypkg)]=mypkg
-                               for myslot in slotmap.keys():
+                               for myslot in slotmap:
                                        counterkeys=slotmap[myslot].keys()
                                        counterkeys.sort()
                                        if not counterkeys:
@@ -3639,7 +3639,7 @@ def unmerge(settings, myopts, vartree, unmerge_action, unmerge_files,
        finally:
                if vdb_lock:
                        portage.locks.unlockdir(vdb_lock)
-       for x in pkgmap.keys():
+       for x in pkgmap:
                for y in localtree.dep_match(x):
                        if y not in pkgmap[x]["omitted"] and \
                           y not in pkgmap[x]["selected"] and \
@@ -3695,7 +3695,7 @@ def unmerge(settings, myopts, vartree, unmerge_action, unmerge_files,
        if not autoclean:
                countdown(int(settings["CLEAN_DELAY"]), ">>> Unmerging")
 
-       for x in pkgmap.keys():
+       for x in pkgmap:
                for y in pkgmap[x]["selected"]:
                        print ">>> Unmerging "+y+"..."
                        emergelog(xterm_titles, "=== Unmerging... ("+y+")")
@@ -3879,7 +3879,7 @@ def post_emerge(trees, mtimedb, retval):
        if vardbapi.plib_registry.hasEntries():
                print colorize("WARN", "!!!") + " existing preserved libs:"
                plibdata = vardbapi.plib_registry.getPreservedLibs()
-               for cpv in plibdata.keys():
+               for cpv in plibdata:
                        print colorize("WARN", ">>>") + " package: %s" % cpv
                        for f in plibdata[cpv]:
                                print colorize("WARN", " * ") + " - %s" % f
index d80a72d516ddd5749032493f856bdf70c957e786..6e2d3878116f9b9872743fa246a2462a6ad461b7 100644 (file)
@@ -1644,9 +1644,8 @@ class config(object):
 
        def load_infodir(self,infodir):
                self.modifying()
-               if self.configdict.has_key("pkg"):
-                       for x in self.configdict["pkg"].keys():
-                               del self.configdict["pkg"][x]
+               if "pkg" in self.configdict:
+                       self.configdict["pkg"].clear()
                else:
                        writemsg("No pkg setup for settings instance?\n",
                                noiselevel=-1)
@@ -2105,8 +2104,7 @@ class config(object):
                        return self.virts_p
                virts = self.getvirtuals(myroot)
                if virts:
-                       myvkeys = virts.keys()
-                       for x in myvkeys:
+                       for x in virts:
                                vkeysplit = x.split("/")
                                if not self.virts_p.has_key(vkeysplit[1]):
                                        self.virts_p[vkeysplit[1]] = virts[x]
@@ -2227,7 +2225,16 @@ class config(object):
                        return x
 
        def keys(self):
-               return unique_array(flatten([x.keys() for x in self.lookuplist]))
+               return list(self)
+
+       def __iter__(self):
+               keys = set()
+               for d in self.lookuplist:
+                       for k in d:
+                               if k in keys:
+                                       continue
+                               keys.add(k)
+                               yield k
 
        def __setitem__(self,mykey,myvalue):
                "set a value; will be thrown away at reset() time"
@@ -2240,7 +2247,7 @@ class config(object):
        def environ(self):
                "return our locally-maintained environment"
                mydict={}
-               for x in self.keys():
+               for x in self:
                        myvalue = self[x]
                        if not isinstance(myvalue, basestring):
                                writemsg("!!! Non-string value in config: %s=%s\n" % \
@@ -2639,7 +2646,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
                                        noiselevel=-1)
                                return 0
                        del distlocks_subdir
-       for myfile in filedict.keys():
+       for myfile in filedict:
                """
                fetched  status
                0        nonexistent
@@ -2870,7 +2877,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
                                                                else:
                                                                        eout = portage.output.EOutput()
                                                                        eout.quiet = mysettings.get("PORTAGE_QUIET", None) == "1"
-                                                                       for x_key in mydigests[myfile].keys():
+                                                                       for x_key in mydigests[myfile]:
                                                                                eout.ebegin("%s %s ;-)" % (myfile, x_key))
                                                                                eout.eend(0)
                                                                        fetched=2
@@ -3126,7 +3133,7 @@ def digestcheck(myfiles, mysettings, strict=0, justmanifest=0):
 def spawnebuild(mydo,actionmap,mysettings,debug,alwaysdep=0,logfile=None):
        if alwaysdep or "noauto" not in mysettings.features:
                # process dependency first
-               if "dep" in actionmap[mydo].keys():
+               if "dep" in actionmap[mydo]:
                        retval=spawnebuild(actionmap[mydo]["dep"],actionmap,mysettings,debug,alwaysdep=alwaysdep,logfile=logfile)
                        if retval:
                                return retval
@@ -3932,11 +3939,11 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0,
 
                # merge the deps in so we have again a 'full' actionmap
                # be glad when this can die.
-               for x in actionmap.keys():
+               for x in actionmap:
                        if len(actionmap_deps.get(x, [])):
                                actionmap[x]["dep"] = ' '.join(actionmap_deps[x])
 
-               if mydo in actionmap.keys():
+               if mydo in actionmap:
                        retval = spawnebuild(mydo,
                                actionmap, mysettings, debug, logfile=logfile)
                elif mydo=="qmerge":
@@ -4942,9 +4949,11 @@ class FetchlistDict(UserDict.DictMixin):
                """Returns the complete fetch list for a given package."""
                return self.portdb.getfetchlist(pkg_key, mysettings=self.settings,
                        all=True, mytree=self.mytree)[1]
+       def __contains__(self):
+               return pkg_key in self.keys()
        def has_key(self, pkg_key):
                """Returns true if the given package exists within pkgdir."""
-               return pkg_key in self.keys()
+               return pkg_key in self
        def keys(self):
                """Returns keys for all packages within pkgdir"""
                return self.portdb.cp_list(self.cp, mytree=self.mytree)