diff options
Diffstat (limited to 'pym')
-rw-r--r-- | pym/portage_contents.py | 161 |
1 files changed, 0 insertions, 161 deletions
diff --git a/pym/portage_contents.py b/pym/portage_contents.py deleted file mode 100644 index edafc2ff2..000000000 --- a/pym/portage_contents.py +++ /dev/null @@ -1,161 +0,0 @@ -# portage_contents.py -- (Persistent) Contents File Management -# Copyright 1998-2004 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Id: /var/cvsroot/gentoo-src/portage/pym/portage_contents.py,v 1.3.2.1 2005/01/16 02:35:33 carpaski Exp $ - - -import os,string,types,sys,copy -import portage_exception -import portage_const - -#import gettext -#gettext_t = gettext.translation('portage.contents', portage_const.LOCALE_DATA_PATH) -#_ = gettext_t.ugettext -def _(mystr): - return mystr - - -FILES_KEY = "\0FILES\0" -OWNER_KEY = "\0OWNER\0" - - -def ContentsHandler(filename): - infile = open(filename) - myfiles = [] - mydirs = [] - - mylines = infile.readlines() - infile.close() - for line in mylines: - if line[-1] == '\n': - line = line[:-1] - parts = string.split(line) - - mytype = parts[0] - mytarget = None - - if mytype in ["dir","dev","fif"]: - mypath = string.join(parts[1:]) - elif mytype == "obj": - mypath = string.join(parts[1:-2]) - elif mytype == "sym": - sl = string.join(parts[1:-1]) - sl = string.split(sl, " -> ") - - mypath = sl[0] - mytarget = sl[1] - else: - print _("Unknown type:"),mytype - - if mytype in ["dir"]: - mydirs.append(mypath) - else: - myfiles.append(mypath) - - mydirs.sort() - myfiles.sort() - return myfiles,mydirs - -class PathLookupTable: - """Creates a temporary lookup table for paths from files.""" - def __init__(self,dbname): - #if not self.validLocation(dbname): - # raise portage_exception.InvalidLocation, dbname - #self.base = copy.deepcopy(dbname) - - self.files = [] - self.pathtree = {} - - def addFromFile(self, filename, handler): - if type(handler) != types.FunctionType: - raise portage_exception.IncorrectParameter, _("Handler of type '%(type)s' not 'function'") % {"type": type(handler)} - - filelist,dirlist = handler(filename) - filestat = os.stat(filename) - - if type(filelist) != types.ListType: - raise portage_exception.InvalidDataType, _("%(handler)s returned an invalid file list") % {"handler": handler.__name__} - if type(dirlist) != types.ListType: - raise portage_exception.InvalidDataType, _("%(handler)s returned an invalid directory list") % {"handler": handler.__name__} - - for x in filelist: - if not x: - continue - x = os.path.normpath(x) - if len(x) > 1: - if x[:2] == "//": - x = x[1:] - if type(x) != types.StringType: - raise portage_exception.InvalidDataType, _("%(handler)s returned an invalid subelement in dataset") % {"handler": handler.__name__} - xs = string.split(x, "/") - self.addFilePath(xs,filename) - - for x in dirlist: - if not x: - continue - x = os.path.normpath(x) - if len(x) > 1: - if x[:2] == "//": - x = x[1:] - if type(x) != types.StringType: - raise portage_exception.InvalidDataType, _("%(handler)s returned an invalid subelement in dataset") % {"handler": handler.__name__} - xs = string.split(x, "/") - self.addDirectoryPath(xs,filename) - - def addDirectoryPath(self,split_path, owner): - pt = self.pathtree - for x in split_path: - if x not in pt.keys(): - pt[x] = {FILES_KEY:{},OWNER_KEY:[]} - if owner not in pt[x][OWNER_KEY]: - pt[x][OWNER_KEY].append(owner[:]) - pt = pt[x] - return pt - - def addFilePath(self,split_path, owner): - pt = self.addDirectoryPath(split_path[:-1], owner) - if split_path[-1] not in pt[FILES_KEY]: - pt[FILES_KEY][split_path[-1][:]] = [] - if owner not in pt[FILES_KEY][split_path[-1][:]]: - pt[FILES_KEY][split_path[-1][:]].append(owner[:]) - - def whoProvides(self,path): - if type(path) != types.StringType: - raise portage_exception.InvalidData, _("Path passed is not a string: %(path)s") % {"path": path} - x = os.path.normpath(path) - if x[0:2] == '//': - x = x[1:] - - xs = x.split("/") - pt = self.pathtree - final_dir = xs.pop(-1) - for subpath in xs: - if subpath in pt.keys(): - pt = pt[subpath] - - owners = [] - if final_dir in pt[FILES_KEY]: - for x in pt[FILES_KEY][final_dir]: - if x not in owners: - owners.append(x[:]) - if final_dir in pt: - for x in pt[final_dir][OWNER_KEY]: - if x not in owners: - owners.append(x[:]) - - return owners - - - -def test(): - import os - plt = PathLookupTable("spork") - for x in os.listdir("/var/db/pkg"): - for y in os.listdir("/var/db/pkg/"+x): - c_path = "/var/db/pkg/"+x+"/"+y+"/CONTENTS" - if os.path.exists(c_path): - plt.addFromFile(c_path, ContentsHandler) - print "/bin/bash:", plt.whoProvides("/bin/bash") - print "/var/spool:", plt.whoProvides("/var/spool") - print "/etc/init.d", plt.whoProvides("/etc/init.d") - return plt |