From d65c4de4d42dda5b5c46ab502fa716c006e7c392 Mon Sep 17 00:00:00 2001 From: Marius Mauch Date: Wed, 30 Nov 2005 07:07:15 +0000 Subject: add an option to grab* so that if they're given a directory they'll recursively find all files in it and treat them like one big file. Also make use of this option for most of the config files. svn path=/main/trunk/; revision=2324 --- pym/portage_util.py | 51 ++++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 25 deletions(-) (limited to 'pym/portage_util.py') diff --git a/pym/portage_util.py b/pym/portage_util.py index 6a0c10155..9c521ab8a 100644 --- a/pym/portage_util.py +++ b/pym/portage_util.py @@ -13,16 +13,11 @@ def writemsg(mystr,noiselevel=0): sys.stderr.write(mystr) sys.stderr.flush() -def grabfile(myfilename, compat_level=0): +def grabfile(myfilename, compat_level=0, recursive=0): """This function grabs the lines in a file, normalizes whitespace and returns lines in a list; if a line begins with a #, it is ignored, as are empty lines""" - try: - myfile=open(myfilename,"r") - except IOError: - return [] - mylines=myfile.readlines() - myfile.close() + mylines=grablines(myfilename, recursive) newlines=[] for x in mylines: #the split/join thing removes leading and trailing whitespace, and converts any whitespace in the line @@ -130,15 +125,10 @@ def grab_multiple(basename, locations, handler, all_must_exist=0): mylist.append(handler(x+"/"+basename)) return mylist -def grabdict(myfilename,juststrings=0,empty=0): +def grabdict(myfilename,juststrings=0,empty=0,recursive=0): """This function grabs the lines in a file, normalizes whitespace and returns lines in a dictionary""" newdict={} - try: - myfile=open(myfilename,"r") - except IOError,e: - return newdict - mylines=myfile.readlines() - myfile.close() + mylines=grablines(myfilename,recursive) for x in mylines: #the split/join thing removes leading and trailing whitespace, and converts any whitespace in the line #into single spaces. @@ -155,16 +145,16 @@ def grabdict(myfilename,juststrings=0,empty=0): newdict[myline[0]]=myline[1:] return newdict -def grabdict_package(myfilename,juststrings=0): - pkgs=grabdict(myfilename, juststrings, empty=1) +def grabdict_package(myfilename,juststrings=0,recursive=0): + pkgs=grabdict(myfilename, juststrings, empty=1, recursive=recursive) for x in pkgs.keys(): if not isvalidatom(x): del(pkgs[x]) writemsg("--- Invalid atom in %s: %s\n" % (myfilename, x)) return pkgs -def grabfile_package(myfilename,compatlevel=0): - pkgs=grabfile(myfilename,compatlevel) +def grabfile_package(myfilename,compatlevel=0,recursive=0): + pkgs=grabfile(myfilename,compatlevel,recursive=recursive) for x in range(len(pkgs)-1,-1,-1): pkg = pkgs[x] if pkg[0] == "-": @@ -176,14 +166,9 @@ def grabfile_package(myfilename,compatlevel=0): del(pkgs[x]) return pkgs -def grabints(myfilename): +def grabints(myfilename,recursive=0): newdict={} - try: - myfile=open(myfilename,"r") - except IOError: - return newdict - mylines=myfile.readlines() - myfile.close() + mylines=grablines(myfilename,recursive) for x in mylines: #the split/join thing removes leading and trailing whitespace, and converts any whitespace in the line #into single spaces. @@ -193,6 +178,22 @@ def grabints(myfilename): newdict[myline[0]]=string.atoi(myline[1]) return newdict +def grablines(myfilename,recursive=0): + mylines=[] + if recursive and os.path.isdir(myfilename): + myfiles = [myfilename+os.path.sep+x for x in os.listdir(myfilename)] + myfiles.sort() + for f in myfiles: + mylines.extend(grablines(f, recursive)) + else: + try: + myfile = open(myfilename, "r") + mylines = myfile.readlines() + myfile.close() + except IOError: + pass + return mylines + def writeints(mydict,myfilename): try: myfile=open(myfilename,"w") -- cgit v1.2.3-1-g7c22