ajack 2004/03/09 11:57:07 Modified: python/gump/model project.py depend.py module.py object.py python/gump/utils work.py tools.py sync.py python/gump/document forrest.py text.py python/gump gumprun.py engine.py integrate.py python/gump/gui view.py Added: python profileView.py Log: 1) Created DependSet/Dependable to clean up dependency/dependee counts
2) Migrated to Sync/Copy (from rsync) Ready to test... Revision Changes Path 1.62 +15 -144 gump/python/gump/model/project.py Index: project.py =================================================================== RCS file: /home/cvs/gump/python/gump/model/project.py,v retrieving revision 1.61 retrieving revision 1.62 diff -u -r1.61 -r1.62 --- project.py 7 Mar 2004 22:22:35 -0000 1.61 +++ project.py 9 Mar 2004 19:57:06 -0000 1.62 @@ -180,13 +180,14 @@ return os.pathsep.join(self.getSimpleClasspathList()) -class Project(NamedModelObject, Statable, Resultable): +class Project(NamedModelObject, Statable, Resultable, Dependable): """A single project""" def __init__(self,xml,workspace): NamedModelObject.__init__(self,xml.getName(),xml,workspace) Statable.__init__(self) Resultable.__init__(self) + Dependable.__init__(self) # Navigation self.module=None # Module has to claim ownership @@ -197,21 +198,7 @@ self.license=None - ############################################################# - # Dependency Trees - # - - # Those which we rely upon... - self.depends=[] - - # Those which rely upon us... - self.dependees=[] - - # - # Fully expanded - # - self.fullDepends=[] - self.fullDependees=[] + self.affected=0 ############################################################# # @@ -317,60 +304,6 @@ def getReports(self): return self.reports - - def getDependencies(self): - return self.depends - - def getDependencyCount(self): - """ Count the direct depenencies """ - return len(self.depends) - - def getDependees(self): - return self.dependees - - def getDependeeCount(self): - """ Count the direct dependees """ - return len(self.dependees) - - def getFullDependencies(self): - # - # Build a set of dependencies (once only) - # - if self.fullDepends: - return self.fullDepends - - for dependency in self.depends: - if not dependency in self.fullDepends: - self.fullDepends.append(dependency) - for subdepend in dependency.getProject().getFullDependencies(): - if not subdepend in self.fullDepends: - self.fullDepends.append(subdepend) - self.fullDepends.sort() - - # Return stored - return self.fullDepends - - def getFullDependencyCount(self): - return len(self.getFullDependencies()) - - def getFullDependees(self): - if self.fullDependees: return self.fullDependees - - for dependee in self.dependees: - if not dependee in self.fullDependees: - # We have a new dependee - self.fullDependees.append(dependee) - for subdependee in dependee.getOwnerProject().getFullDependees(): - if not subdependee in self.fullDependees: - self.fullDependees.append(subdependee) - self.fullDependees.sort() - - # Store once - return self.fullDependees - - def getFullDependeeCount(self): - return len(self.getFullDependees()) - def getFOGFactor(self): return self.getStats().getFOGFactor() @@ -379,13 +312,10 @@ return self.getModule().getStats().getLastUpdated() def determineAffected(self): - affected=0 - - # Get all dependenees (optional/otherwise) - fullDependees=self.getFullDependees() + if self.affected: return self.affected # Look through all dependees - for dependee in fullDependees: + for dependee in self.getFullDependees(): project=dependee.getOwnerProject() cause=project.getCause() @@ -397,9 +327,9 @@ # The something was this module or one of it's projects # if cause == self: - affected += 1 + self.affected += 1 - return affected + return self.affected def propagateErrorStateChange(self,state,reason,cause,message): @@ -407,7 +337,7 @@ # Mark depend*ee*s as failed for this cause... # Warn option*ee*s # - for dependee in self.getDependees(): + for dependee in self.getDirectDependees(): # This is a backwards link, so use the owner dependeeProject=dependee.getOwnerProject() @@ -567,7 +497,7 @@ if not packaged: # Complete dependencies so properties can reference the, # completed metadata within a dependent project - for dependency in self.getDependencies(): + for dependency in self.getDirectDependencies(): dependency.getProject().complete(workspace) self.buildDependenciesMap(workspace) @@ -670,66 +600,6 @@ return (badDepends, badOptions) - def buildDependenciesMap(self,workspace): - - # - # Provide backwards links [Note: ant|maven might have added some - # dependencies, so this is done here * not just with the direct - # xml depend/option elements] - # - for dependency in self.getDependencies(): - dependProject=dependency.getProject() - # Add us as a dependee on them - dependProject.addDependee(dependency) - - - def addDependency(self,dependency): - # - # TODO check this against any matching dependency - # not equal? - # - if not dependency in self.depends: - if not dependency.getProject()==self: - self.depends.append(dependency) - #else: - # print 'Not Adding : ' + dependency - - def addDependee(self,dependency): - # - # TODO check this against any matching dependency - # not equal? - # - if not dependency in self.dependees: - if not dependency.getOwnerProject()==self: - self.dependees.append(dependency) - #else: - # print 'Not Adding : ' + dependency - - # - def hasFullDependencyOnNamedProject(self,name): - for dependency in self.depends: - if dependency.getProject().getName()==name: - return 1 - -# :TODO: -# and not dependency.noclasspath: return 1 -#:TODO: noclasspath???? - - return 0 - - # determine if this project is a prereq of any project on the todo list - def hasDirectDependencyOn(self,project): - for dependency in self.depends: - if dependency.getProject()==project: return 1 - - def hasDirectDependee(self,project): - for dependee in self.dependees: - if dependee.getOwnerProject()==project: return 1 - - def hasDependee(self,project): - for dependee in self.getFullDependees(): - if dependee.getOwnerProject()==project: return 1 - def hasBaseDirectory(self): if hasattr(self,'basedir') and self.basedir: return 1 return 0 @@ -1213,7 +1083,7 @@ visited=[] # Does it have any depends? Process all of them... - for dependency in self.getDependencies(): + for dependency in self.getDirectDependencies(): (subcp, subbcp) = self.getDependOutputList(dependency,visited,1,debug) self.importClasspaths(classpath,bootclasspath,subcp,subbcp) @@ -1322,7 +1192,7 @@ + "] for dependency on [" + project.getName() + "]") # Append sub-projects outputs, if inherited - for subdependency in project.getDependencies(): + for subdependency in project.getDirectDependencies(): # If the dependency is set to 'all' (or 'hard') we inherit all dependencies # If the dependency is set to 'runtime' we inherit all runtime dependencies # If the dependent project inherited stuff, we inherit that... @@ -1346,6 +1216,7 @@ classpath.importClasspath(cp) if bcp: bootclasspath.importClasspath(bcp) + class ProjectStatistics(Statistics): """Statistics Holder""" 1.9 +164 -4 gump/python/gump/model/depend.py Index: depend.py =================================================================== RCS file: /home/cvs/gump/python/gump/model/depend.py,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- depend.py 5 Feb 2004 14:50:07 -0000 1.8 +++ depend.py 9 Mar 2004 19:57:06 -0000 1.9 @@ -218,4 +218,164 @@ return result - \ No newline at end of file + +class DependSet: + + """ A dependency set contains dependencies between projects """ + def __init__(self, dependees=0): + + # A list of all dependencies + self.depends=[] + + # A map by project -> dependencies list + self.projectMap={} + + # Which direction (to or from?) + self.dependees=dependees + + def addDepend(self, depend): + + # + # Add to total list + # + self.depends.append(depend) + + # + # Store depend by project key + # + dependProject=None + if self.dependees: + dependPRoejct = depend.getOwnerProject() + else: + dependProject = depend.getProject() + if not self.projectMap.has_key(dependProject): + self.projectMap[dependProject] = [] + self.projectMap[dependProject] = depend + + def containsDepend(self, depend): + return (depend in self.depends) + + def getDepends(self): + return self.depends + + def getUniqueProjectDependCount(self): + return len(self.projectMap) + +class Dependable: + + """ Direct and Full Dependencies """ + def __init__(self): + + # Direct & Full Dependencies + self.directDependencies=DependSet() + self.fullDependencies=None + + # Direct & Full Dependees + self.directDependees=DependSet() + self.fullDependees=None + + # + # Dependencies + # + def addDependency(self,depend): + self.directDependencies.addDepend(depend) + + def getDirectDependencies(self): + return self.directDependencies.getDepends() + + def getFullDependencies(self): + if self.fullDependencies: return self.fullDependencies.getDepends() + + # + # Build (once) upon demand + # + self.fullDependencies=DependSet() + for depend in self.directDependencies.getDepends(): + if not self.fullDependencies.containsDepend(depend): + self.fullDependencies.addDepend(depend) + # Get Sub Dependencies + for subdepend in depend.getProject().getFullDependencies(): + if not self.fullDependencies.containsDepend(subdepend): + self.fullDependencies.addDepend(depend) + + return self.fullDependencies.getDepends() + + def getDependencyCount(self): + return self.directDependencies.getUniqueProjectDependCount() + + def getFullDependencyCount(self): + return self.fullDependencies.getUniqueProjectDependCount() + + # + # Dependees + # + def addDependee(self,depend): + self.directDependees.addDepend(depend) + + def getDirectDependees(self): + return self.directDependees.getDepends() + + def getFullDependees(self): + if self.fullDependees: return self.fullDependees.getDepends() + + # + # Build (once) upon demand + # + self.fullDependees=DependSet() + for depend in self.directDependees.getDepends(): + if not self.fullDependees.containsDepend(depend): + self.fullDependees.addDepend(depend) + # Get Sub Dependees + for subdepend in depend.getProject().getFullDependees(): + if not self.fullDependees.containsDepend(subdepend): + self.fullDependees.addDepend(depend) + + return self.fullDependees.getDepends() + + def getDependeeCount(self): + return self.directDependees.getUniqueProjectDependCount() + + def getFullDependeeCount(self): + return self.fullDependees.getUniqueProjectDependCount() + + + def buildDependenciesMap(self,workspace): + + # + # Provide backwards links [Note: ant|maven might have added some + # dependencies, so this is done here * not just with the direct + # xml depend/option elements] + # + for dependency in self.getDirectDependencies(): + dependProject=dependency.getProject() + # Add us as a dependee on them + dependProject.addDependee(dependency) + + # + def hasFullDependencyOnNamedProject(self,name): + for dependency in self.getDirectDependencies(): + if dependency.getProject().getName()==name: + return 1 + +# :TODO: +# and not dependency.noclasspath: return 1 +#:TODO: noclasspath???? + + return 0 + + # determine if this project is a prereq of any project on the todo list + def hasDirectDependencyOn(self,project): + for dependency in self.dependencies: + if dependency.getProject()==project: return 1 + + def hasDirectDependee(self,project): + for dependee in self.dependees: + if dependee.getOwnerProject()==project: return 1 + + def hasDependee(self,project): + for dependee in self.getFullDependees(): + if dependee.getOwnerProject()==project: return 1 + + + + \ No newline at end of file 1.37 +9 -9 gump/python/gump/model/module.py Index: module.py =================================================================== RCS file: /home/cvs/gump/python/gump/model/module.py,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- module.py 5 Mar 2004 23:42:22 -0000 1.36 +++ module.py 9 Mar 2004 19:57:06 -0000 1.37 @@ -222,6 +222,8 @@ self.packaged = 0 self.updated = 0 + + self.affected = 0 # Extract settings self.tag = xml.tag @@ -480,13 +482,11 @@ return summary def determineAffected(self): - affected=0 - # Get all dependenees (optional/otherwise) - dependees=self.getFullDependees() + if self.affected: return self.affected # Look through all dependees - for project in dependees: + for project in self.getFullDependees(): cause=project.getCause() # # Something caused this some grief @@ -496,9 +496,9 @@ # The something was this module or one of it's projects # if cause == self or cause in self.getProjects(): - affected += 1 + self.affected += 1 - return affected + return self.affected def getProjectStatistics(self,db=None): if not hasattr(self,'stats'): 1.21 +7 -4 gump/python/gump/model/object.py Index: object.py =================================================================== RCS file: /home/cvs/gump/python/gump/model/object.py,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- object.py 7 Mar 2004 22:22:35 -0000 1.20 +++ object.py 9 Mar 2004 19:57:06 -0000 1.21 @@ -189,7 +189,10 @@ self.verbose=verbose def isVerbose(self): - return self.verbose or self.xml.verbose + return self.verbose or self.xml.verbose + + def isVerboseOrDebug(self): + return self.isVerbose() or self.isDebug() def dump(self, indent=0, output=sys.stdout): """ Display the contents of this object """ 1.10 +7 -9 gump/python/gump/utils/work.py Index: work.py =================================================================== RCS file: /home/cvs/gump/python/gump/utils/work.py,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- work.py 17 Feb 2004 21:54:21 -0000 1.9 +++ work.py 9 Mar 2004 19:57:06 -0000 1.10 @@ -73,16 +73,14 @@ WORK_TYPE_CHECK=1 WORK_TYPE_CONFIG=2 WORK_TYPE_UPDATE=3 -WORK_TYPE_SYNC=4 -WORK_TYPE_PREBUILD=5 -WORK_TYPE_BUILD=6 -WORK_TYPE_POSTBUILD=7 -WORK_TYPE_DOCUMENT=8 +WORK_TYPE_PREBUILD=4 +WORK_TYPE_BUILD=5 +WORK_TYPE_POSTBUILD=6 +WORK_TYPE_DOCUMENT=7 workTypeDescriptions = { WORK_TYPE_CHECK : "CheckEnvironment", WORK_TYPE_CONFIG : "Config", WORK_TYPE_UPDATE : "Update", - WORK_TYPE_SYNC : "Synchronize", WORK_TYPE_PREBUILD : "PreBuild", WORK_TYPE_BUILD : "Build", WORK_TYPE_POSTBUILD : "PostBuild", 1.16 +19 -34 gump/python/gump/utils/tools.py Index: tools.py =================================================================== RCS file: /home/cvs/gump/python/gump/utils/tools.py,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- tools.py 7 Mar 2004 22:22:35 -0000 1.15 +++ tools.py 9 Mar 2004 19:57:06 -0000 1.16 @@ -69,6 +69,7 @@ from gump.utils.note import * from gump.utils.work import * from gump.utils.file import * +from gump.utils.sync import * from gump.utils.launcher import * def listDirectoryAsWork(workable,directory,name=None): @@ -190,36 +191,21 @@ return reference.exists() and reference.isNotDirectory() -def syncDirectories(noRSync,type,cwddir,tmpdir,sourcedir,destdir,name=None): - # :TODO: Make this configurable (once again) - #if not workspace.sync: - # workspace.sync = default.syncCommand - - if noRSync: - cmd=Cmd('cp','sync_'+name,cwddir) - cmd.addParameter('-Rfv') - cmd.addParameter(sourcedir) - cmd.addParameter(destdir) - else: - cmd=Cmd('rsync','rsync_'+name,cwddir) - cmd.addParameter('-r') - cmd.addParameter('-a') - # Keep it quiet... - # cmd.addParameter('-v') - # cmd.addParameter('-v') - # cmd.addParameter('--stats') - cmd.addParameter('--delete') - cmd.addParameter(sourcedir) - cmd.addParameter(destdir) - - log.debug(' ------ Sync\'ing : '+ name) - - # Perform the Sync - cmdResult=execute(cmd,tmpdir) - - work=CommandWorkItem(type,cmd,cmdResult) +def copyDirectories(sourcedir,destdir,annotatable=None): + try: + copy=Copy(sourcedir,destdir) + copy.execute() + finally: + if annotatable: + transferAnnotations(copy, annotatable) - return work +def syncDirectories(sourcedir,destdir,annotatable=None): + try: + sync=Sync(sourcedir,destdir) + sync.execute() + finally: + if annotatable: + transferAnnotations(sync, annotatable) def tailFile(file,lines): """ Return the last N lines of a file as a list """ @@ -264,5 +250,4 @@ # dump(log) if len(sys.argv) > 0: - print tailFileToString(sys.argv[1], 5 ) - + print tailFileToString(sys.argv[1], 5 ) \ No newline at end of file 1.3 +17 -8 gump/python/gump/utils/sync.py Index: sync.py =================================================================== RCS file: /home/cvs/gump/python/gump/utils/sync.py,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- sync.py 9 Mar 2004 14:14:32 -0000 1.2 +++ sync.py 9 Mar 2004 19:57:06 -0000 1.3 @@ -71,6 +71,7 @@ from gump.utils.file import * from gump.utils.launcher import * from gump.utils.note import * + class Sync(Annotatable): """ this class can be used to sync two directories @@ -86,6 +87,7 @@ self.sourcedir = sourcedir self.targetdir = targetdir self.copyflag = copyflag + def execute(self): if self.copyflag: action = 'copy' @@ -122,9 +124,9 @@ if not result: os.makedirs(dst) if result: - names2 = os.listdir(dst) - self.removenonmatching(src, dst, names, names2) + names2 = os.listdir(dst) if not self.copyflag: + self.removenonmatching(src, dst, names, names2) self.epurate(src, dst, names, names2) for name in names: srcname = os.path.join(src, name) @@ -141,6 +143,7 @@ message = "Can't copy [%s] to [%s]: [%s]" % (`srcname`, `dstname`, str(why)) log.exception(message) raise IOError, message + def epurate(self, sourcedir, destdir, acceptablefiles, existingfiles): """ this routine will delete from a set of existing files @@ -216,7 +219,13 @@ okcopy = 1 if okcopy: log.debug("Attempting copy from [%s] to [%s]" %(`srcname`, `dstname`)) - shutil.copy2(srcname, dstname) - - + shutil.copy2(srcname, dstname) + +class Copy(Sync): + """ + A Sync without the epurate + """ + def __init__(self, sourcedir, targetdir): + Sync.__init__(self, sourcedir, targetdir, 1) + 1.97 +44 -64 gump/python/gump/document/forrest.py Index: forrest.py =================================================================== RCS file: /home/cvs/gump/python/gump/document/forrest.py,v retrieving revision 1.96 retrieving revision 1.97 diff -u -r1.96 -r1.97 --- forrest.py 8 Mar 2004 22:28:08 -0000 1.96 +++ forrest.py 9 Mar 2004 19:57:06 -0000 1.97 @@ -78,6 +78,7 @@ from gump.document.resolver import * from gump.utils import * from gump.utils.xmlutils import xmlize +from gump.utils.tools import syncDirectories,copyDirectories from gump.model import * from gump.model.stats import * from gump.model.project import AnnotatedPath, ProjectStatistics @@ -138,49 +139,24 @@ return fdir def seedForrest(self,workspace): + """ - forrestParentDir=self.getForrestParentDirectory(workspace) + Copy the main template (perhaps with site tweaks) to seed - # :TODO: This gave an ugly tree (src/doc/cont../xdocs..) - # with sub-directories. It is a nice idea, but not - # quite there for us now, do a plain old template - # copy instead. - - # First .. seed the project - #forrestSeed=Cmd('forrest','forrest_seed',forrest) - #forrestSeed.addPrefixedParameter('-D','java.awt.headless','true','=') - #forrestSeed.addParameter('seed') - #forrestSeedResult=execute(forrestSeed) - # Consider adding, but a second seed might fail, need to ignore that... - #work=CommandWorkItem(WORK_TYPE_DOCUMENT,forrest,forrestSeedResult) - #workspace.performedWork(work) - - # Consider syncDirectories (to start with) - # cp -Rf doesn't seem to be doing a nice job of overwritting :( - # rsynch would disallow default/site though :( + """ # Copy in the defaults - forrestTemplate=self.getForrestTemplateDirectory() - - forrestSeed=Cmd('cp','forrest_seed',forrestParentDir) - forrestSeed.addParameter('-Rfv') - forrestSeed.addParameter(forrestTemplate) - forrestSeed.addParameter(os.path.abspath(workspace.getBaseDirectory())) - forrestSeedResult=execute(forrestSeed) - work=CommandWorkItem(WORK_TYPE_DOCUMENT,forrestSeed,forrestSeedResult) - workspace.performedWork(work) - + forrestTemplate=self.getForrestTemplateDirectory() + syncDirectories( forrestTemplate, \ + self.getForrestDirectory(workspace), \ + workspace) + # Copy over the local site defaults (if any) forrestSiteTemplate=self.getForrestSiteTemplateDirectory() if os.path.exists(forrestSiteTemplate): - forrestSiteSeed=Cmd('cp','forrest_site_seed',forrestParentDir) - forrestSiteSeed.addParameter('-Rfv') - forrestSiteSeed.addParameter(forrestSiteTemplate) - forrestSiteSeed.addParameter(workspace.getBaseDirectory()) - forrestSiteSeedResult=execute(forrestSiteSeed) - work=CommandWorkItem(WORK_TYPE_DOCUMENT,forrestSiteSeed,forrestSiteSeedResult) - workspace.performedWork(work) - + copyDirectories(forrestSiteTemplate, \ + self.getForrestDirectory(workspace), \ + workspace) def executeForrest(self,workspace): # The project tree @@ -1119,31 +1095,33 @@ self.documentServerLinks(document,project,workspace) + # Project Details (main ones) detailsSection=document.createSection('Details') - detailsList=detailsSection.createList() - self.insertLink(project.getModule(),project,detailsList.createEntry('Containing Module: ')) + self.insertLink(project.getModule(),project, \ + detailsList.createEntry('Containing Module: ')) - if project.hasHomeDirectory(): + if project.hasHomeDirectory() and project.isVerboseOrDebug(): detailsList.createEntry('Home Directory: ', project.getHomeDirectory()) - if project.hasBaseDirectory(): + if project.hasBaseDirectory() and project.isVerboseOrDebug(): detailsList.createEntry('Base Directory: ', project.getBaseDirectory()) if project.hasCause() and not project==project.getCause(): self.insertTypedLink(project.getCause(),project,detailsList.createEntry('Root Cause: ')) e = secsToElapsedString(project.getElapsedSecs()) - if e: detailsList.createEntry("Elapsed: ", e) + if e and project.isVerboseOrDebug(): detailsList.createEntry("Elapsed: ", e) # Display nag information if project.xml.nag: - for nagEntry in project.xml.nag: - toaddr=getattr(nagEntry,'to') or workspace.mailinglist - fromaddr=getStringFromUnicode(getattr(nagEntry,'from') or workspace.email) - detailsList.createEntry('Nag To: ').createFork('mailto:'+toaddr,toaddr) - detailsList.createEntry('Nag From: ').createFork('mailto:'+fromaddr,fromaddr) + if project.isVerboseOrDebug(): + for nagEntry in project.xml.nag: + toaddr=getattr(nagEntry,'to') or workspace.mailinglist + fromaddr=getStringFromUnicode(getattr(nagEntry,'from') or workspace.email) + detailsList.createEntry('Nag To: ').createFork('mailto:'+toaddr,toaddr) + detailsList.createEntry('Nag From: ').createFork('mailto:'+fromaddr,fromaddr) elif not project.isPackaged() and project.hasBuildCommand(): document.createWarning('This project does not utilize Gump nagging.') @@ -1185,8 +1163,7 @@ addnSection=document.createSection('Additional Details') addnPara=addnSection.createParagraph() addnPara.createLink(gumpSafeName(project.getName()) + '_details.html', \ - 'More project details ...') - + 'More project details ...') document.serialize() document=XDocDocument('Project Details : ' + project.getName(), \ @@ -1235,10 +1212,10 @@ depees = 0 depens += self.documentDependenciesList(dependencySection, "Project Dependencies", \ - project.getDependencies(), 0, project) + project.getDirectDependencies(), 0, project) depees += self.documentDependenciesList(dependencySection, "Project Dependees", \ - project.getDependees(), 1, project) + project.getDirectDependees(), 1, project) depens += self.documentDependenciesList(dependencySection, "Full Project Dependencies", \ project.getFullDependencies(), 0, project) @@ -1318,7 +1295,7 @@ if dependencies: dependencySection=xdocNode.createSection(title) - dependencyTable=dependencySection.createTable(['Name','Type','Inheritence','Ids','State','Notes']) + dependencyTable=dependencySection.createTable(['Name','Type','Inheritence','Ids','State','Contributor','Notes']) for depend in dependencies: totalDeps += 1 @@ -1352,6 +1329,13 @@ # State Icon self.insertStateIcon(project,referencingObject,dependencyRow.createData()) + # Contributor + if not dependees: + contributor=depend.getOwnerProject() + else: + contributor=depend.getProject() + self.insertLink( contributor, referencingObject, dependencyRow.createData()) + # Dependency Annotations noteData=dependencyRow.createData() if depend.getAnnotations(): @@ -1409,22 +1393,18 @@ if results: statePair=results.getStatePair() - # If we can resolve this object to a URL, then do - dataNode=serverRow.createData() - xdocNode=None - + # If we can resolve this object to a URL, then do if server.hasResolver(): + dataNode=serverRow.createData() + xdocNode=dataNode.createFork( \ server.getResolver().getUrl(linkable)) - else: - # Else just link to the server. - if server.hasUrl(): - xdocNode=dataNode.createFork( \ - server.getUrl()) - if xdocNode: xdocNode.createText('On ' + server.getName()) + if statePair: + xdocNode.createBreak() + # Insert the Icon... depth=getDepthForObject(linkable) self.insertStatePairIconAtDepth(dataNode,statePair,depth) 1.11 +5 -5 gump/python/gump/document/text.py Index: text.py =================================================================== RCS file: /home/cvs/gump/python/gump/document/text.py,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- text.py 8 Mar 2004 22:28:09 -0000 1.10 +++ text.py 9 Mar 2004 19:57:06 -0000 1.11 @@ -132,10 +132,10 @@ self.documentDependenciesList(indent, "Project Dependees", \ - project.getDependees(), 1, project) + project.getDirectDependees(), 1, project) self.documentDependenciesList(indent, "Project Dependencies", \ - project.getDependencies(), 0, project) + project.getDirectDependencies(), 0, project) self.documentAnnotations(indent,project) self.documentWork(indent,project) 1.1 gump/python/profileView.py Index: profileView.py =================================================================== import pstats p = pstats.Stats('iprof') p.sort_stats('cumulative').print_stats() 1.11 +3 -3 gump/python/gump/gumprun.py Index: gumprun.py =================================================================== RCS file: /home/cvs/gump/python/gump/gumprun.py,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- gumprun.py 8 Mar 2004 22:28:08 -0000 1.10 +++ gumprun.py 9 Mar 2004 19:57:06 -0000 1.11 @@ -279,7 +279,7 @@ # on the todo list. # def isReady(self,project,todo): - for dependency in project.getDependencies(): + for dependency in project.getDirectDependencies(): if dependency.getProject() in todo: return 0 return 1 @@ -289,7 +289,7 @@ if not project in todo: todo.append(project) - for dependency in project.getDependencies(): + for dependency in project.getDirectDependencies(): # Add all dependencies dependProject=dependency.getProject() if not dependProject in todo: @@ -298,7 +298,7 @@ # determine if this project is a prereq of any project on the todo list def isPrereq(self,project,todo): for todoProject in todo: - for dependency in todoProject.getDependencies(): + for dependency in todoProject.getDirectDependencies(): if dependency.getProject().getName()==project.getName(): return 1 def dump(self, indent=0, output=sys.stdout): 1.78 +7 -18 gump/python/gump/engine.py Index: engine.py =================================================================== RCS file: /home/cvs/gump/python/gump/engine.py,v retrieving revision 1.77 retrieving revision 1.78 diff -u -r1.77 -r1.78 --- engine.py 9 Mar 2004 00:20:51 -0000 1.77 +++ engine.py 9 Mar 2004 19:57:06 -0000 1.78 @@ -371,27 +371,16 @@ if module.okToPerformWork(): - sourcedir = os.path.abspath(os.path.join(workspace.getCvsDirectory(),module.name)) # todo allow override + sourcedir = os.path.abspath(os.path.join(workspace.getCvsDirectory(), \ + module.name)) # todo allow override destdir = os.path.abspath(workspace.getBaseDirectory()) - - - # Perform the sync... - work=syncDirectories(workspace.noRSync,WORK_TYPE_SYNC,\ - dir.work,workspace.tmpdir,\ - sourcedir,destdir,module.name) - - # :TODO: Get the repostiory & store this work there also - # might as well... - - # Store the work as done on this module - module.performedWork(work) - - # Update Context w/ Results - if not work.result.state==CMD_STATE_SUCCESS: - module.changeState(STATE_FAILED,REASON_SYNC_FAILED) - else: + # Perform the sync... + try: + syncDirectories(sourcedir,destdir,module) module.changeState(STATE_SUCCESS) + except: + module.changeState(STATE_FAILED,REASON_SYNC_FAILED) """ 1.22 +13 -8 gump/python/gump/integrate.py Index: integrate.py =================================================================== RCS file: /home/cvs/gump/python/gump/integrate.py,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- integrate.py 8 Mar 2004 22:28:08 -0000 1.21 +++ integrate.py 9 Mar 2004 19:57:06 -0000 1.22 @@ -90,14 +90,12 @@ # Initialize ############################################################################### - ############################################################################### # Functions ############################################################################### -# static void main() -if __name__=='__main__': - +def irun(): + # Process command line (args,options) = handleArgv(sys.argv) ws=args[0] @@ -127,4 +125,11 @@ log.info('Gump Integration complete. Exit code:' + str(result)) # bye! - sys.exit(result) \ No newline at end of file + sys.exit(result) + +# static void main() +if __name__=='__main__': + #print 'Profiling....' + #import profile + #profile.run('irun()', 'iprof') + irun() 1.6 +2 -2 gump/python/gump/gui/view.py Index: view.py =================================================================== RCS file: /home/cvs/gump/python/gump/gui/view.py,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- view.py 8 Mar 2004 22:28:09 -0000 1.5 +++ view.py 9 Mar 2004 19:57:07 -0000 1.6 @@ -352,7 +352,7 @@ # gather a list of projects which reference this project self.items=[] - for dependency in project.getDependees(): + for dependency in project.getDirectDependees(): self.items.append(dependency.getOwnerProject().getName()) # display the list, sorted by name @@ -403,7 +403,7 @@ self.prereqs.InsertColumn(0, 'Prerequisites') i=0 - for dependency in project.getDependencies(): + for dependency in project.getDirectDependencies(): prereq=dependency.getProject() #if prereq.ant or prereq.script: continue row=self.prereqs.InsertStringItem(i,prereq.getName()) --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]