From: <ror...@us...> - 2007-07-05 23:29:43
|
Revision: 83 http://roreditor.svn.sourceforge.net/roreditor/?rev=83&view=rev Author: rorthomas Date: 2007-07-05 16:29:38 -0700 (Thu, 05 Jul 2007) Log Message: ----------- * updated dependency-checker Modified Paths: -------------- trunk/lib/ror/repoclient.py Added Paths: ----------- trunk/lib/ror/depchecker/ trunk/lib/ror/depchecker/ror_bmp.py trunk/lib/ror/depchecker/ror_dds.py trunk/lib/ror/depchecker/ror_jpg.py trunk/lib/ror/depchecker/ror_load.py trunk/lib/ror/depchecker/ror_material.py trunk/lib/ror/depchecker/ror_mesh.py trunk/lib/ror/depchecker/ror_overlay.py trunk/lib/ror/depchecker/ror_png.py trunk/lib/ror/depchecker/ror_truck.py trunk/lib/ror/depchecker.py Added: trunk/lib/ror/depchecker/ror_bmp.py =================================================================== --- trunk/lib/ror/depchecker/ror_bmp.py (rev 0) +++ trunk/lib/ror/depchecker/ror_bmp.py 2007-07-05 23:29:38 UTC (rev 83) @@ -0,0 +1,9 @@ +import os, os.path, re +import subprocess + +def getDependencies(filename): + return { + "provide":{ + "file":[os.path.basename(filename)] + } + } Added: trunk/lib/ror/depchecker/ror_dds.py =================================================================== --- trunk/lib/ror/depchecker/ror_dds.py (rev 0) +++ trunk/lib/ror/depchecker/ror_dds.py 2007-07-05 23:29:38 UTC (rev 83) @@ -0,0 +1,9 @@ +import os, os.path, re +import subprocess + +def getDependencies(filename): + return { + "provide":{ + "file":[os.path.basename(filename)] + } + } Added: trunk/lib/ror/depchecker/ror_jpg.py =================================================================== --- trunk/lib/ror/depchecker/ror_jpg.py (rev 0) +++ trunk/lib/ror/depchecker/ror_jpg.py 2007-07-05 23:29:38 UTC (rev 83) @@ -0,0 +1,9 @@ +import os, os.path, re +import subprocess + +def getDependencies(filename): + return { + "provide":{ + "file":[os.path.basename(filename)] + } + } Added: trunk/lib/ror/depchecker/ror_load.py =================================================================== --- trunk/lib/ror/depchecker/ror_load.py (rev 0) +++ trunk/lib/ror/depchecker/ror_load.py 2007-07-05 23:29:38 UTC (rev 83) @@ -0,0 +1,5 @@ +import os, os.path +import ror_truck + +def getDependencies(filename): + return ror_truck.getDependencies(filename) Added: trunk/lib/ror/depchecker/ror_material.py =================================================================== --- trunk/lib/ror/depchecker/ror_material.py (rev 0) +++ trunk/lib/ror/depchecker/ror_material.py 2007-07-05 23:29:38 UTC (rev 83) @@ -0,0 +1,39 @@ +import os, os.path, re +import subprocess + +RE1 = r"^\s*texture.?([a-zA-Z0-9_\-]*\.[a-zA-Z0-9]*)\s?.*" +RE2 = r"\s?material\s?([a-zA-Z0-9_/\-\\]*).?" + +def readFile(filename): + f=open(filename, 'r') + content = f.readlines() + f.close() + return content + +def parseRE(content, r): + vals = [] + for line in content: + m = re.match(r, line) + if not m is None and len(m.groups()) > 0: + valname = m.groups()[0] + if not valname in vals: + vals.append(valname) + return vals + +def getDependencies(filename): + content = readFile(filename) + dep = parseRE(content, RE1) + prov = parseRE(content, RE2) + if len(dep) == 0: + print "no texture found in material file " + filename + if len(prov) == 0: + print "no material found in material file " + filename + else: + return { + "depends":{ + "file":dep + }, + "provide":{ + "materials":prov + } + } Added: trunk/lib/ror/depchecker/ror_mesh.py =================================================================== --- trunk/lib/ror/depchecker/ror_mesh.py (rev 0) +++ trunk/lib/ror/depchecker/ror_mesh.py 2007-07-05 23:29:38 UTC (rev 83) @@ -0,0 +1,48 @@ +import os, os.path, re +import subprocess + +CONVERTERBIN = "C:\\OgreCommandLineTools\\OgreXmlConverter.exe" +REs = [r".*material\s?=[\"\']([a-zA-Z0-9_/\-\\]*)[\"\'].*"] + +def readFile(filename): + f=open(filename, 'r') + content = f.readlines() + f.close() + return content + +def convertToXML(filename): + # try to convert to .msh.xml first! + cmd = CONVERTERBIN + " " + filename + p = subprocess.Popen(cmd, shell = False, cwd = os.path.dirname(CONVERTERBIN), stderr = subprocess.PIPE, stdout = subprocess.PIPE) + p.wait() + print "mesh converted: " + filename + +def parseRE(content): + deps = [] + for line in content: + for r in REs: + m = re.match(r, line) + if not m is None and len(m.groups()) > 0: + depname = m.groups()[0] + if not depname in deps: + deps.append(depname) + return deps + + +def getDependencies(filename): + xmlfilename = os.path.join(os.path.dirname(filename), os.path.basename(filename)+".xml") + if not os.path.isfile(xmlfilename): + convertToXML(filename) + try: + content = readFile(xmlfilename) + except Exception, e: + print e + dep = parseRE(content) + if len(dep) == 0: + print "no material found for file " + filename + else: + return { + "depends":{ + "materials":dep + } + } Added: trunk/lib/ror/depchecker/ror_overlay.py =================================================================== --- trunk/lib/ror/depchecker/ror_overlay.py (rev 0) +++ trunk/lib/ror/depchecker/ror_overlay.py 2007-07-05 23:29:38 UTC (rev 83) @@ -0,0 +1,5 @@ +import os, os.path, re +import subprocess + +def getDependencies(filename): + pass Added: trunk/lib/ror/depchecker/ror_png.py =================================================================== --- trunk/lib/ror/depchecker/ror_png.py (rev 0) +++ trunk/lib/ror/depchecker/ror_png.py 2007-07-05 23:29:38 UTC (rev 83) @@ -0,0 +1,9 @@ +import os, os.path, re +import subprocess + +def getDependencies(filename): + return { + "provide":{ + "file":[os.path.basename(filename)] + } + } Added: trunk/lib/ror/depchecker/ror_truck.py =================================================================== --- trunk/lib/ror/depchecker/ror_truck.py (rev 0) +++ trunk/lib/ror/depchecker/ror_truck.py 2007-07-05 23:29:38 UTC (rev 83) @@ -0,0 +1,21 @@ +import os, os.path +from truckparser import * + +def getDependencies(filename): + p = rorparser() + p.parse(filename) + if not 'globals' in p.tree.keys(): + print "truck parsing error on file " + filename + truckfilename = os.path.basename(filename) + truckname, ext = os.path.splitext(truckfilename) + matname = p.tree['globals'][0]['data'][2] + print truckname + return { + "depends":{ + "materials":[matname], + #"file":[truckname+'-mini.png'] + }, + "provide":{ + "file":[truckfilename] + } + } Added: trunk/lib/ror/depchecker.py =================================================================== --- trunk/lib/ror/depchecker.py (rev 0) +++ trunk/lib/ror/depchecker.py 2007-07-05 23:29:38 UTC (rev 83) @@ -0,0 +1,117 @@ +#Thomas Fischer 31/05/2007, th...@th... +import sys, os, os.path + +#DIR = "C:\\games\\RoR-0.31a\\data" +DEPCHECKPATH = "depchecker" + +class RoRDepChecker: + def __init__(self, path): + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), DEPCHECKPATH)) + self.deptree = {'materials':{},'file':{}} + self.dir = path + self.getfiles() + self.createDepGraph() + self.viewDepGraph("all") + self.viewDepGraph("unused") + self.viewDepGraph("missing") + + + def getDependencies(self, extension, filename): + try: + mod = __import__("ror_" + extension.lstrip(".")) + except ImportError, e: + return + pass + + return mod.getDependencies(filename) + + + def getfiles(self): + fl = {} + for root, dirs, files in os.walk(self.dir): + for f in files: + if f in fl.keys(): + print "double file found: %s!" % (f) + continue + fl[f] = {} + fl[f]['filename'] = os.path.join(root, f) + #for fk in fl.keys(): + # print "%30s: %s" % (fk, fl[fk]['filename']) + print "found %d files!" % (len(fl.keys())) + self.files = fl + + + def viewDepGraph(self, mode = "all"): + displayedfiles = 0 + str = "" + str += "-------------------------------------------------------------\n" + if mode == "all": + str += "--- Dependency tree for %s \n" % (self.dir) + elif mode == "unused": + str += "--- Unused resources for %s \n" % (self.dir) + elif mode == "missing": + str += "--- Missing requirements for %s \n" % (self.dir) + str += "-------------------------------------------------------------\n" + for fk in self.deptree.keys(): + str += "--------- Category: %-20s -------------------\n" % fk + for k in self.deptree[fk].keys(): + req = self.deptree[fk][k]['depends'] + if len(req) > 0: + reqstr = ", ".join(req) + else: + reqstr = "None" + found = self.deptree[fk][k]['provide'] + if len(found) > 0: + foundstr = ", ".join(found) + else: + foundstr = "None" + display = False + if mode == "all": + display = True + elif mode == "unused": + display = (len(found) > 0 and len(req) == 0) + elif mode == "missing": + display = (len(req) > 0 and len(found) == 0) + if display: + displayedfiles += 1 + str += "%40s: %16s%-10s\n%41s %16s%-10s\n" % (k, "required by: ", reqstr, "", "provided by: ", foundstr) + if displayedfiles > 0: + print str + elif displayedfiles == 0: + if mode == "all": + print "No resources found at all!" + elif mode == "unused": + print "No resources unused!" + elif mode == "missing": + print "No resources missing!" + + + + def createDepGraph(self): + #extlist = [] + for fk in self.files.keys(): + fn, ext = os.path.splitext(fk) + filename = self.files[fk]['filename'] + dep = self.getDependencies(ext, filename) + keywords = ['provide', 'depends'] + if not dep is None: + for kw in keywords: + if kw in dep.keys(): + for pk in dep[kw].keys(): + for p in dep[kw][pk]: + #print kw, pk, p + if not p in self.deptree[pk].keys(): + self.deptree[pk][p] = {keywords[0]:[], keywords[1]:[]} + self.deptree[pk][p][kw].append(fk) + + + #if not ext in extlist: + # extlist.append(ext) + #print extlist + + +def main(): + RoRDepChecker(sys.argv[1]) + +if __name__ == "__main__": + main() Modified: trunk/lib/ror/repoclient.py =================================================================== --- trunk/lib/ror/repoclient.py 2007-07-04 13:31:18 UTC (rev 82) +++ trunk/lib/ror/repoclient.py 2007-07-05 23:29:38 UTC (rev 83) @@ -1,8 +1,11 @@ import xmlrpclib -s = xmlrpclib.Server('http://repository.rigsofrods.com:8000') -package = s.getInfo() -for item in package['data']: - print item +def getFiles(category): + s = xmlrpclib.Server('http://repository.rigsofrods.com:8000') + package = s.getInfo(category) + return package -print s.system.listMethods() \ No newline at end of file + +#for item in package['data']: +# print item +#print s.system.listMethods() \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |