Author: ajack Date: Tue Aug 31 08:33:05 2004 New Revision: 37254 Added: gump/trunk/python/gump/build/nant.py gump/trunk/python/gump/language/ - copied from rev 37209, gump/trunk/python/gump/java/ gump/trunk/python/gump/language/__init__.py - copied unchanged from rev 37253, gump/trunk/python/gump/java/__init__.py gump/trunk/python/gump/language/cp.py - copied, changed from rev 37253, gump/trunk/python/gump/java/cp.py gump/trunk/python/gump/language/java.py - copied, changed from rev 37209, gump/trunk/python/gump/java/helper.py Removed: gump/trunk/python/gump/java/ gump/trunk/python/gump/language/helper.py Modified: gump/trunk/python/ (props changed) gump/trunk/python/gump/build/builder.py gump/trunk/python/gump/build/maven.py gump/trunk/python/gump/document/xdocs/documenter.py gump/trunk/python/gump/document/xdocs/resolver.py gump/trunk/python/gump/model/builder.py gump/trunk/python/gump/model/project.py gump/trunk/python/gump/run/gumprun.py gump/trunk/python/gump/runner/runner.py gump/trunk/python/gump/test/language.py gump/trunk/python/gump/test/maven.py Log: Partial NAnt commit, performed 'cos SVN disallows a dir rename followed by a file rename without a commit in between.
Modified: gump/trunk/python/gump/build/builder.py ============================================================================== --- gump/trunk/python/gump/build/builder.py (original) +++ gump/trunk/python/gump/build/builder.py Tue Aug 31 08:33:05 2004 @@ -47,6 +47,7 @@ from gump.build.script import ScriptBuilder from gump.build.ant import AntBuilder +from gump.build.nant import NAntBuilder from gump.build.maven import MavenBuilder from gump.utils import dump, display, getIndent, logResourceUtilization, \ @@ -66,8 +67,6 @@ import gump.integration.depot -import gump.java.helper - ############################################################################### # Classes @@ -79,6 +78,7 @@ gump.run.gumprun.RunSpecific.__init__(self,run) self.ant=AntBuilder(run) + self.nant=NAntBuilder(run) self.maven=MavenBuilder(run) self.script=ScriptBuilder(run) @@ -134,6 +134,8 @@ self.script.buildProject(project, languageHelper, stats) elif project.hasAnt(): self.ant.buildProject(project, languageHelper, stats) + elif project.hasNAnt(): + self.nant.buildProject(project, languageHelper, stats) elif project.hasMaven(): self.maven.buildProject(project, languageHelper, stats) @@ -495,6 +497,8 @@ self.script.preview(project, languageHelper, stats) elif project.hasAnt(): self.ant.preview(project, languageHelper, stats) + elif project.hasNAnt(): + self.nant.preview(project, languageHelper, stats) elif project.hasMaven(): self.maven.preview(project, languageHelper, stats) else: Modified: gump/trunk/python/gump/build/maven.py ============================================================================== --- gump/trunk/python/gump/build/maven.py (original) +++ gump/trunk/python/gump/build/maven.py Tue Aug 31 08:33:05 2004 @@ -252,7 +252,7 @@ # :TODO: write... for annotatedPath in classpath.getPathParts(): - if isinstance(annotatedPath,gump.java.cp.AnnotatedPath): + if isinstance(annotatedPath,gump.language.path.AnnotatedPath): props.write(('# Contributor: %s\nmaven.jar.%s=%s\n') % \ ( annotatedPath.getContributor(), annotatedPath.getId(), Added: gump/trunk/python/gump/build/nant.py ============================================================================== --- (empty file) +++ gump/trunk/python/gump/build/nant.py Tue Aug 31 08:33:05 2004 @@ -0,0 +1,187 @@ +#!/usr/bin/python + + +# Copyright 2003-2004 The Apache Software Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +__revision__ = "$Rev: 36667 $" +__date__ = "$Date: 2004-08-20 08:55:45 -0600 (Fri, 20 Aug 2004) $" +__copyright__ = "Copyright (c) 1999-2004 Apache Software Foundation" +__license__ = "http://www.apache.org/licenses/LICENSE-2.0" + + +""" + A NAnt builder (uses nant to build projects) +""" + +import os.path +import sys + +from gump import log +from gump.run.gumprun import * +from gump.core.config import dir, default, basicConfig + +import gump.build.builder + +from gump.utils.note import Annotatable +from gump.utils.work import * + +from gump.utils.tools import * + +from gump.model.workspace import * +from gump.model.module import Module +from gump.model.project import Project +from gump.model.depend import ProjectDependency +from gump.model.stats import * +from gump.model.state import * + +class NAntBuilder(gump.run.gumprun.RunSpecific): + + def __init__(self,run): + """ + The NAnt Builder is a Java Builder + """ + gump.run.gumprun.RunSpecific.__init__(self,run) + + def buildProject(self,project,language,stats): + """ + Build a project using NAnt, based off the <nant metadata. + + Note: switch on -verbose|-debug based of the stats for this + project, i.e. how long in a state of failure. + """ + + workspace=self.run.getWorkspace() + + log.info('Run NAnt on Project: #[' + `project.getPosition()` + '] : ' + project.getName()) + + # Get the appropriate build command... + cmd=self.getNAntCommand(project, language, self.run.getEnvironment().getJavaCommand()) + + if cmd: + # Execute the command .... + cmdResult=execute(cmd,workspace.tmpdir) + + # Update context with the fact that this work was done + work=CommandWorkItem(WORK_TYPE_BUILD,cmd,cmdResult) + project.performedWork(work) + project.setBuilt(1) + + # Update context state based of the result + if not cmdResult.state==CMD_STATE_SUCCESS: + reason=REASON_BUILD_FAILED + if cmdResult.state==CMD_STATE_TIMED_OUT: + reason=REASON_BUILD_TIMEDOUT + project.changeState(STATE_FAILED,reason) + else: + # For now, things are going good... + project.changeState(STATE_SUCCESS) + + def getNAntCommand(self,project,language): + """ + Build an ANT command for this project, based on the <nant metadata + select targets and build files as appropriate. + """ + + # The original model information... + nant=project.nant + # The nant target (or none == nant default target) + target= nant.getTarget() + + # The nant build file (or none == build.xml) + buildfile = nant.getBuildFile() + + # Optional 'verbose' or 'debug' + verbose=nant.isVerbose() + debug=nant.isDebug() + + # Where to run this: + basedir = nant.getBaseDirectory() or project.getBaseDirectory() + + # Build a classpath (based upon dependencies) + #(classpath,bootclasspath)=language.getClasspaths(project) + + # Get properties + properties=self.getNAntProperties(project) + + # Get system properties + sysproperties=self.getNAntSysProperties(project) + + # Run java on apache NAnt... + cmd=Cmd(javaCommand,'build_'+project.getModule().getName()+'_'+project.getName(), + basedir,{'CLASSPATH':classpath}) + + # These are workspace + project system properties + cmd.addNamedParameters(sysproperties) + + # Add BOOTCLASSPATH + #if bootclasspath: + # cmd.addPrefixedParameter('-X','bootclasspath/p',bootclasspath,':') + + # Get/set JVM properties + #jvmargs=language.getJVMArgs(project) + #if jvmargs: + # cmd.addParameters(jvmargs) + + # The NAnt interface + cmd.addParameter('org.apache.tools.ant.Main') + + # Allow ant-level debugging... + if project.getWorkspace().isDebug() or project.isDebug() or debug: + cmd.addParameter('-debug') + if project.getWorkspace().isVerbose() or project.isVerbose() or verbose: + cmd.addParameter('-verbose') + + # Some builds might wish for this information + # :TODO: Grant greater access to Gump variables from + # within. + mergeFile=project.getWorkspace().getMergeFile() + if mergeFile: + cmd.addPrefixedParameter('-D','gump.merge',str(mergeFile),'=') + + # These are from the project and/or workspace + # These are 'normal' properties. + cmd.addNamedParameters(properties) + + # Pass the buildfile + if buildfile: cmd.addParameter('-f',buildfile) + + # End with the target (or targets)... + if target: + for targetParam in target.split(): + cmd.addParameter(targetParam) + + return cmd + + def getNAntProperties(self,project): + """ Get properties for a project """ + properties=Parameters() + for property in project.getWorkspace().getProperties()+project.getNAnt().getProperties(): + properties.addPrefixedNamedParameter('-D',property.name,property.value,'=') + return properties + + def getNAntSysProperties(self,project): + """ Get sysproperties for a project """ + properties=Parameters() + for property in project.getWorkspace().getSysProperties()+project.getNAnt().getSysProperties(): + properties.addPrefixedNamedParameter('-D',property.name,property.value,'=') + return properties + + def preview(self,project,language,stats): + """ + Preview what an NAnt build would look like. + """ + command=self.getNAntCommand(project,language) + command.dump() + \ No newline at end of file Modified: gump/trunk/python/gump/document/xdocs/documenter.py ============================================================================== --- gump/trunk/python/gump/document/xdocs/documenter.py (original) +++ gump/trunk/python/gump/document/xdocs/documenter.py Tue Aug 31 08:33:05 2004 @@ -1810,6 +1810,9 @@ if project.hasAnt(): self.documentProperties(miscSection, project.getAnt(), 'Ant Properties') + elif project.hasNAnt(): + self.documentProperties(miscSection, project.getNAnt(), 'NAnt Properties') + # :TODO: Maven? javaHelper=self.run.getJavaHelper() (classpath,bootclasspath)=javaHelper.getClasspathObjects(project) @@ -1962,7 +1965,7 @@ pathTable=pathSection.createTable(['Path Entry','Contributor','Instigator','Id','Annotation']) paths=0 for path in classpath.getPathParts(): - if isinstance(path,gump.java.cp.AnnotatedPath): + if isinstance(path,gump.language.path.AnnotatedPath): pathStr=path.getPath() contributor=path.getContributor() instigator=path.getInstigator() Modified: gump/trunk/python/gump/document/xdocs/resolver.py ============================================================================== --- gump/trunk/python/gump/document/xdocs/resolver.py (original) +++ gump/trunk/python/gump/document/xdocs/resolver.py Tue Aug 31 08:33:05 2004 @@ -42,7 +42,7 @@ from gump.model.workspace import Workspace from gump.model.module import Module from gump.model.project import Project -from gump.model.builder import Ant,Maven,Script +from gump.model.builder import Ant,NAnt,Maven,Script from gump.model.object import * from gump.model.state import * @@ -181,6 +181,7 @@ isinstance(object, FileReference): index=None elif isinstance(object, Ant) or \ + isinstance(object, NAnt) or \ isinstance(object, Maven) or \ isinstance(object, Script) : index='Build' Copied: gump/trunk/python/gump/language/cp.py (from rev 37253, gump/trunk/python/gump/java/cp.py) ============================================================================== --- gump/trunk/python/gump/java/cp.py (original) +++ gump/trunk/python/gump/language/cp.py Tue Aug 31 08:33:05 2004 @@ -16,7 +16,7 @@ """ - Classpaths + Paths (e.g. Java Classpaths, CSharp Assembly Paths, etc.) """ @@ -88,7 +88,7 @@ def getPath(self): return self.path -class Classpath(Annotatable): +class ArtifactPath(Annotatable): def __init__(self,name): Annotatable.__init__(self) self.name=name @@ -111,8 +111,8 @@ for part in split(parts,os.pathsep): self.addPathPart(part) - def importClasspath(self,cp): - for part in cp.getPathParts(): + def importPath(self,p): + for part in p.getPathParts(): self.addPathPart(part) def getPathParts(self): @@ -121,7 +121,7 @@ # # Convert path and AnnotatedPath to simple paths. # - def getSimpleClasspathList(self): + def getSimplePathList(self): """ Return simple string list """ simple=[] for p in self.parts: @@ -132,5 +132,7 @@ return simple def getFlattened(self): - return os.pathsep.join(self.getSimpleClasspathList()) - \ No newline at end of file + return os.pathsep.join(self.getSimplePathList()) + +class Classpath(ArtifactPath): pass +class AssemblyPath(ArtifactPath): pass \ No newline at end of file Copied: gump/trunk/python/gump/language/java.py (from rev 37209, gump/trunk/python/gump/java/helper.py) ============================================================================== --- gump/trunk/python/gump/java/helper.py (original) +++ gump/trunk/python/gump/language/java.py Tue Aug 31 08:33:05 2004 @@ -75,7 +75,7 @@ Return a system classpath (to include $JAVA_HOME/lib/tools.jar' for a compiler). """ - sysClasspath=gump.java.cp.Classpath('System Classpath') + sysClasspath=gump.language.path.Classpath('System Classpath') javaHome=self.run.getEnvironment().getJavaHome() syscp=os.path.join(os.path.join(javaHome,'lib'),'tools.jar') sysClasspath.importFlattenedParts(syscp) @@ -98,7 +98,7 @@ # Start with the system classpath (later remove this) classpath=self.getBaseClasspath() - bootclasspath=gump.java.cp.Classpath('Boot Classpath') + bootclasspath=gump.language.path.Classpath('Boot Classpath') # Add this project's work directories (these go into # CLASSPATH, never BOOTCLASSPATH) @@ -106,7 +106,7 @@ for work in project.getWorks(): path=work.getResolvedPath() if path: - classpath.addPathPart(gump.java.cp.AnnotatedPath('',path,project,None,'Work Entity')) + classpath.addPathPart(gump.language.path.AnnotatedPath('',path,project,None,'Work Entity')) else: log.error("<work element with neither 'nested' nor 'parent' attribute on " \ + project.getName() + " in " + project.getModule().getName()) @@ -158,8 +158,8 @@ print str(depth) + ") Perform : " + `dependency` # - classpath=gump.java.cp.Classpath('Classpath for ' + `dependency`) - bootclasspath=gump.java.cp.Classpath('Bootclasspath for ' + `dependency`) + classpath=gump.language.path.Classpath('Classpath for ' + `dependency`) + bootclasspath=gump.language.path.Classpath('Bootclasspath for ' + `dependency`) # Context for this dependecy project... project=dependency.getProject() @@ -200,7 +200,7 @@ # If 'all' or in ids list: if (not ids) or (jar.getId() in ids): if ids: dependStr += ' Id = ' + jar.getId() - path=gump.java.cp.AnnotatedPath(jar.getId(),jar.path,project,dependency.getOwnerProject(),dependStr) + path=gump.language.path.AnnotatedPath(jar.getId(),jar.path,project,dependency.getOwnerProject(),dependStr) # Add to CLASSPATH if not jar.getType() == 'boot': Modified: gump/trunk/python/gump/model/builder.py ============================================================================== --- gump/trunk/python/gump/model/builder.py (original) +++ gump/trunk/python/gump/model/builder.py Tue Aug 31 08:33:05 2004 @@ -33,9 +33,9 @@ from xml.dom import getDOMImplementation -# represents an <ant/> element +# represents a generic build (e.g. <ant/>) element class Builder(ModelObject, PropertyContainer): - """ An Ant command (within a project)""" + """ A build command (within a project)""" def __init__(self,dom,project): ModelObject.__init__(self,dom,project) PropertyContainer.__init__(self) @@ -213,16 +213,16 @@ return self.basedir # represents an <ant/> element -class Ant(Builder): +class BaseAnt(Builder): """ An Ant command (within a project)""" def __init__(self,dom,project): - Builder.__init__(self,dom,project) + Builder.__init__(self,dom,project) # Import the target - self.target=self.getDomAttributeValue('target') # :TODO: Soon add ... ,'gump') + self.target=self.getDomAttributeValue('target') # :TODO: Soon add ... ,'gump') # Import the buildfile self.buildfile=self.getDomAttributeValue('buildfile') # :TODO: Soon add ... ,'build.xml') - + def hasTarget(self): if self.target: return True return False @@ -246,6 +246,15 @@ if self.hasBuildFile(): output.write(i+'BuildFile: ' + self.getBuildFile() + '\n') +class Ant(BaseAnt): + """ An Ant command (within a project) """ + pass + +# represents a <nant/> element +class NAnt(Builder): + """ A NAnt command (within a project) """ + pass + # represents an <maven/> element class Maven(Builder): """ A Maven command (within a project)""" Modified: gump/trunk/python/gump/model/project.py ============================================================================== --- gump/trunk/python/gump/model/project.py (original) +++ gump/trunk/python/gump/model/project.py Tue Aug 31 08:33:05 2004 @@ -29,7 +29,7 @@ AddressPair from gump.model.stats import Statable, Statistics from gump.model.property import Property -from gump.model.builder import Ant,Maven,Script +from gump.model.builder import Ant,NAnt,Maven,Script from gump.utils import getIndent from gump.utils.file import * from gump.model.depend import * @@ -133,6 +133,10 @@ if self.ant: return True return False + def hasNAnt(self): + if self.nant: return True + return False + def hasMaven(self): if self.maven: return True return False @@ -144,6 +148,9 @@ def getAnt(self): return self.ant + def getNAnt(self): + return self.nant + def getMaven(self): return self.maven @@ -325,6 +332,13 @@ # Copy over any XML errors/warnings # :TODO:#1: transferAnnotations(self.xml.ant, self) + # Import any <nant part [if not packaged] + if self.hasDomChild('nant') and not packaged: + self.nant = NAnt(self.getDomChild('nant'),self) + + # Copy over any XML errors/warnings + # :TODO:#1: transferAnnotations(self.xml.nant, self) + # Import any <maven part [if not packaged] if self.hasDomChild('maven') and not packaged: self.maven = Maven(self.getDomChild('maven'),self) @@ -667,7 +681,7 @@ outputs=[] for jar in self.getJars(): jarpath=jar.getPath() - outputs.append(gump.java.cp.AnnotatedPath(jar.getId(),jarpath,self,None,"Project output")) + outputs.append(gump.language.path.AnnotatedPath(jar.getId(),jarpath,self,None,"Project output")) return outputs def hasOutputs(self): Modified: gump/trunk/python/gump/run/gumprun.py ============================================================================== --- gump/trunk/python/gump/run/gumprun.py (original) +++ gump/trunk/python/gump/run/gumprun.py Tue Aug 31 08:33:05 2004 @@ -108,7 +108,6 @@ self.builder=None self.updater=None - def setBuilder(self,builder): self.builder=builder @@ -127,7 +126,12 @@ def getJavaHelper(self): return self.javaHelper - + def setCSharpHelper(self,csharpHelper): + self.csharpHelper=csharpHelper + + def getCSharpHelper(self): + return self.csharpHelper + def getRunGuid(self): return self.guid Modified: gump/trunk/python/gump/runner/runner.py ============================================================================== --- gump/trunk/python/gump/runner/runner.py (original) +++ gump/trunk/python/gump/runner/runner.py Tue Aug 31 08:33:05 2004 @@ -58,13 +58,14 @@ # A helper per language/type - # Note: All are Java right now... - self.java=gump.java.helper.JavaHelper(run) + self.java=gump.language.java.JavaHelper(run) + self.java=gump.language.csharp.CSharpHelper(run) # Stash them for reference... run.setUpdater(self.updater) run.setBuilder(self.builder) - run.setJavaHelper(self.java) + run.setJavaHelper(self.java) + run.setJavaHelper(self.csharp) def initialize(self,exitOnError=True): Modified: gump/trunk/python/gump/test/language.py ============================================================================== --- gump/trunk/python/gump/test/language.py (original) +++ gump/trunk/python/gump/test/language.py Tue Aug 31 08:33:05 2004 @@ -28,7 +28,8 @@ import gump.core.config import gump.build.builder -import gump.java.helper +import gump.language.java +import gump.language.csharp from gump.model.state import * from gump.utils import * @@ -68,7 +69,7 @@ self.module5=self.workspace.getModule('module5') self.builder=gump.build.builder.GumpBuilder(self.run) - self.java=gump.java.helper.JavaHelper(self.run) + self.java=gump.language.java.JavaHelper(self.run) def suiteTearDown(self): self.run=None Modified: gump/trunk/python/gump/test/maven.py ============================================================================== --- gump/trunk/python/gump/test/maven.py (original) +++ gump/trunk/python/gump/test/maven.py Tue Aug 31 08:33:05 2004 @@ -28,7 +28,7 @@ from gump.model.state import * from gump.build.maven import MavenBuilder -import gump.java.helper +import gump.language.java from gump.utils import * from gump.test import getWorkedTestRun @@ -57,7 +57,7 @@ self.assertNotNone('Needed a maven project', self.maven1) self.mavenBuilder=MavenBuilder(self.run) - self.javaHelper=gump.java.helper.JavaHelper(self.run) + self.javaHelper=gump.language.java.JavaHelper(self.run) def testMavenProperties(self): --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]