sanders 01/04/20 11:27:00 Modified: proposal/antgump/xsl antgump-each.xsl Log: excellent patch from Stephane Bailliez ([EMAIL PROTECTED]) Here's a modified antgump-each.xsl: Mainly the changes are: - Factorized string concatenation via concat and direct evaluation - fixed 1 or 2 mistakes (@name instead of ../@name) - moved the replace for the timestamp to init otherwise a fail on a dependency check would prevent any replace (also changed the timestamp format) - added some comments here and there - changed the ant java call to failonerror=yes instead of no, otherwise it was preventing notification of failures. Revision Changes Path 1.2 +115 -188 jakarta-alexandria/proposal/antgump/xsl/antgump-each.xsl Index: antgump-each.xsl =================================================================== RCS file: /home/cvs/jakarta-alexandria/proposal/antgump/xsl/antgump-each.xsl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- antgump-each.xsl 2001/04/01 05:24:21 1.1 +++ antgump-each.xsl 2001/04/20 18:26:57 1.2 @@ -1,7 +1,7 @@ <xsl:stylesheet version="1.0" - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:saxon="http://icl.com/saxon" - extension-element-prefixes="saxon"> + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:saxon="http://icl.com/saxon" + extension-element-prefixes="saxon"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/> <xsl:strip-space elements="*"/> <xsl:param name="output-dir"/> @@ -9,236 +9,168 @@ <xsl:template match="/workspace"> <xsl:apply-templates/> </xsl:template> + + <xsl:template match="/workspace/project"> <xsl:variable name="basedir" select="/workspace/@basedir"/> <xsl:variable name="cvsdir"> - <xsl:value-of select="/workspace/@cvsdir"/> - <xsl:text>/</xsl:text> - <xsl:choose> - <xsl:when test="cvs/@module"> - <xsl:value-of select="cvs/@module"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="@srcdir"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:message terminate="no"> - <xsl:text>Creating Gump buildfile for </xsl:text> - <xsl:value-of select="@name"/> - </xsl:message> + <xsl:value-of select="concat(/workspace/@cvsdir, '/')"/> + <xsl:choose> + <xsl:when test="cvs/@module"> + <xsl:value-of select="cvs/@module"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="@srcdir"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:message terminate="no"> + <xsl:value-of select="concat('Creating Gump buildfile for ', @name)"/> + </xsl:message> + <saxon:output file="{$basedir}/{@name}-gumpbuild.xml"> <project name="{@name} Gump build file" default="gumpify" basedir="{$basedir}/{@srcdir}"> + + <!-- initialize time stamp and replace it in the html page --> <target name="init"> - <tstamp/> + <tstamp> + <format property="TIMESTAMP" pattern="HH:mm:ss"/> + </tstamp> + <replace file="{$basedir}/index.html" token="TAG-{@name}-TIME" value="${{TIMESTAMP}}"/> <touch file="{$basedir}/{@name}.FAILED"/> </target> + + <!-- check for all dependencies --> <target name="dependency-check"> <xsl:apply-templates select="depend" mode="dependency-check"/> </target> + + <!-- generate the dependency failure targets --> <xsl:apply-templates select="depend" mode="failed-dependency"/> + + <!-- generate the main target that does everything --> <target name="gumpify" depends="init,dependency-check" unless="dependency-failure"> <available file="{$cvsdir}" property="cvsmodule.{@name}.present"/> - <replace file="{$basedir}/index.html"> - <xsl:attribute name="token"> - <xsl:text>TAG-</xsl:text> - <xsl:value-of select="@name"/> - <xsl:text>-TIME</xsl:text> - </xsl:attribute> - <xsl:attribute name="value"> - <xsl:text>${TSTAMP}</xsl:text> - </xsl:attribute> - </replace> <echo message="In GUMP project: {@name}"/> <xsl:if test="cvs"> <antcall target="cvscheckout"/> - <!--<antcall target="cvsupdate"/>--> + <antcall target="cvsupdate"/> <copy todir="{$basedir}/{@srcdir}"> - <fileset dir="{$cvsdir}"/> + <fileset dir="{$cvsdir}"/> </copy> </xsl:if> - <replace file="{$basedir}/cvs_index.html"> - <xsl:attribute name="token"> - <xsl:text>TAG-</xsl:text> - <xsl:value-of select="@name"/> - <xsl:text>-CVS-TIME</xsl:text> - </xsl:attribute> - <xsl:attribute name="value"> - <xsl:text>${TSTAMP}</xsl:text> - </xsl:attribute> - </replace> + <replace file="{$basedir}/cvs_index.html" token="TAG-{@name}-CVS-TIME" value="${{TIMESTAMP}}"/> <antcall target="build"/> <antcall target="status-pages"/> <move file="{$basedir}/{@name}.FAILED" tofile="{$basedir}/{@name}.SUCCESS"/> </target> + <xsl:apply-templates select="cvs"> <xsl:with-param name="target" select="'cvscheckout'"/> <xsl:with-param name="command" select="'-z3 checkout -P'"/> </xsl:apply-templates> + <xsl:apply-templates select="cvs"> <xsl:with-param name="target" select="'cvsupdate'"/> <xsl:with-param name="command" select="'-z3 update -P -d -A'"/> </xsl:apply-templates> + + <!-- build targets --> <target name="build" depends="init"> <xsl:apply-templates select="ant | script"/> </target> + + <!-- called if the build went fine it sets the status to SUCCESS in the html file --> <target name="status-pages"> - <replace file="{$basedir}/index.html" value="SUCCESS"> - <xsl:attribute name="token"> - <xsl:text>TAG-</xsl:text> - <xsl:value-of select="@name"/> - <xsl:text>-STATUS</xsl:text> - </xsl:attribute> - </replace> - <!-- - <style in="" out="{/workspace/@basedir}/{@name}.html" style="" destdir="{/workspace/@basedir}"/> ---> + <replace file="{$basedir}/index.html" token="TAG-{@name}-STATUS" value="SUCCESS"/> + <!-- <style in="" out="{/workspace/@basedir}/{@name}.html" style="" destdir="{/workspace/@basedir}"/> --> </target> </project> </saxon:output> </xsl:template> + + + <!-- =========================================================================================== + Execute a Ant build file/target as specified by the project + =========================================================================================== --> <xsl:template match="/workspace/project/ant"> - <java classname="org.apache.tools.ant.Main" fork="yes" failonerror="no"> - <xsl:attribute name="output"> - <xsl:value-of select="/workspace/@basedir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="../@name"/> - <xsl:text>-buildresult.txt</xsl:text> - </xsl:attribute> - <xsl:attribute name="dir"> - <xsl:value-of select="/workspace/@basedir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="../@srcdir"/> - <xsl:if test="@basedir"> - <xsl:text>/</xsl:text> - <xsl:value-of select="@basedir"/> - </xsl:if> - </xsl:attribute> + <!-- Ant build file directory --> + <xsl:variable name="build.dir"> + <xsl:value-of select="concat(/workspace/@basedir, '/', ../@srcdir)"/> + <xsl:if test="@basedir"> + <xsl:value-of select="concat('/', @basedir)"/> + </xsl:if> + </xsl:variable> + + <!-- execute the target needed to build the project --> + <java classname="org.apache.tools.ant.Main" fork="yes" failonerror="yes" + output="{/workspace/@basedir}/{../@name}-buildresult.txt" + dir="{$build.dir}"> + + <!-- a buildfile might be specified otherwise Ant will use its default --> <xsl:if test="@buildfile"> - <arg> - <xsl:attribute name="value"> - <xsl:text>-buildfile </xsl:text> - <xsl:value-of select="/workspace/@basedir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="../@srcdir"/> - <xsl:text>/</xsl:text> - <xsl:if test="@basedir"> - <xsl:value-of select="@basedir"/> - <xsl:text>/</xsl:text> - </xsl:if> - <xsl:value-of select="@buildfile"/> - </xsl:attribute> - </arg> + <arg line="-buildfile {$build.dir}/{@buildfile}"/> + </xsl:if> + <arg line="-listener org.apache.tools.ant.XmlLogger -DXmlLogger.file={/workspace/@basedir}/{../@name}-buildresult.xml"/> + + <!-- specific target name to perform the build --> + <xsl:if test="@target"> + <arg value="{@target}"/> </xsl:if> - <xsl:choose> - <xsl:when test="@target"> - <arg value="{@target}"/> - </xsl:when> - <xsl:otherwise/> - </xsl:choose> <xsl:apply-templates select="property"/> + <!-- Do the classpath thing here --> <classpath> - <xsl:for-each select="../depend"> - <xsl:variable name="name" select="@project"/> - <xsl:for-each select="/workspace/project[@name=$name]/jar"> - <pathelement> - <xsl:attribute name="location"> - <xsl:value-of select="../home"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="@name"/> - </xsl:attribute> - </pathelement> - </xsl:for-each> - </xsl:for-each> - <xsl:for-each select="../option"> + <xsl:for-each select="../depend | ../option"> <xsl:variable name="name" select="@project"/> <xsl:for-each select="/workspace/project[@name=$name]/jar"> - <pathelement> - <xsl:attribute name="location"> - <xsl:value-of select="../home"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="@name"/> - </xsl:attribute> - </pathelement> + <pathelement location="{../home}/{@name}"/> </xsl:for-each> </xsl:for-each> - <pathelement> - <xsl:attribute name="path"> - <xsl:text>${java.class.path}</xsl:text> - </xsl:attribute> - </pathelement> + <pathelement path="${{java.class.path}}"/> </classpath> </java> </xsl:template> + + + <!-- =========================================================================================== + Execute a script + =========================================================================================== --> <xsl:template match="/workspace/project/script"> - <chmod perm="ugo+rx"> - <xsl:attribute name="file"> - <xsl:value-of select="/workspace/@basedir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="../@srcdir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="@name"/> - <xsl:text>.sh</xsl:text> - </xsl:attribute> - </chmod> - <exec> - <xsl:attribute name="output"> - <xsl:value-of select="/workspace/@basedir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="../@name"/> - <xsl:text>-buildresult.txt</xsl:text> - </xsl:attribute> - <xsl:attribute name="dir"> - <xsl:value-of select="/workspace/@basedir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="../@srcdir"/> - </xsl:attribute> - <xsl:attribute name="executable"> - <xsl:value-of select="/workspace/@basedir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="../@srcdir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="@name"/> - <xsl:text>.sh</xsl:text> - </xsl:attribute> - </exec> - </xsl:template> + <xsl:variable name="script.dir" select="concat(/workspace/@basedir, '/', ../@srcdir)"/> + <xsl:variable name="script.sh" select="concat($script.dir, '/', ../@name, '.sh')"/> + <chmod perm="ugo+rx" file="{$script.sh}"/> + <exec dir="{$script.dir}" executable="{$script.sh}" + output="{/workspace/@basedir}/{../@name}-buildresult.txt"/> + </xsl:template> + + + <!-- =========================================================================================== + CVS command for update and checkout + @todo the timestamp replace should be done in init ? + =========================================================================================== --> <xsl:template match="/workspace/project/cvs"> <xsl:param name="target"/> <xsl:param name="command"/> <xsl:variable name="repo" select="@repository"/> + <xsl:variable name="cvsmodule.present" select="concat('cvsmodule.', ../@name, '.present')"/> <target name="{$target}"> <xsl:if test="$target='cvscheckout'"> <xsl:attribute name="unless"> - <xsl:text>cvsmodule.</xsl:text> - <xsl:value-of select="../@name"/> - <xsl:text>.present</xsl:text> + <xsl:value-of select="$cvsmodule.present"/> </xsl:attribute> </xsl:if> <xsl:if test="$target='cvsupdate'"> <xsl:attribute name="if"> - <xsl:text>cvsmodule.</xsl:text> - <xsl:value-of select="../@name"/> - <xsl:text>.present</xsl:text> + <xsl:value-of select="$cvsmodule.present"/> </xsl:attribute> </xsl:if> - <replace file="{/workspace/@basedir}/cvs_index.html"> - <xsl:attribute name="token"> - <xsl:text>TAG-</xsl:text> - <xsl:value-of select="@name"/> - <xsl:text>-CVS-TIME</xsl:text> - </xsl:attribute> - <xsl:attribute name="value"> - <xsl:text>${TSTAMP}</xsl:text> - </xsl:attribute> - </replace> + <replace file="{/workspace/@basedir}/cvs_index.html" token="TAG-{../@name}-CVS-TIME" value="${TIMESTAMP}"/> <cvs command="{$command}" quiet="true"> <xsl:attribute name="cvsroot"> <xsl:value-of select="/workspace/cvs-repository/tree[@name=$repo]/@root"/> <xsl:if test="@dir"> - <xsl:text>/</xsl:text> - <xsl:value-of select="@dir"/> + <xsl:value-of select="concat('/', @dir)"/> </xsl:if> </xsl:attribute> <xsl:attribute name="dest"> @@ -260,49 +192,43 @@ </xsl:attribute> </xsl:if> <xsl:attribute name="output"> - <xsl:value-of select="/workspace/@basedir"/> - <xsl:text>/</xsl:text> - <xsl:value-of select="../@name"/> - <xsl:text>-cvsresult.txt</xsl:text> + <xsl:value-of select="concat(/workspace/@basedir, '/', ../@name, '-cvsresult.txt')"/> </xsl:attribute> </cvs> - <replace file="{/workspace/@basedir}/cvs_index.html"> - <xsl:attribute name="token"> - <xsl:text>TAG-</xsl:text> - <xsl:value-of select="@name"/> - <xsl:text>-CVS-STATUS</xsl:text> - </xsl:attribute> - <xsl:attribute name="value"> - <xsl:text>SUCCESS</xsl:text> - </xsl:attribute> - </replace> + <replace file="{/workspace/@basedir}/cvs_index.html" token="TAG-{../@name}-CVS-STATUS" value="SUCCESS"/> </target> </xsl:template> + + + <!-- =========================================================================================== + Check for a dependency availability and immediately call its + dependency-check related target. + @todo add an additional available check for the jar existence + =========================================================================================== --> <xsl:template match="/workspace/project/depend" mode="dependency-check"> <xsl:variable name="project" select="@project"/> <xsl:variable name="dependfilename" select="concat(/workspace/@basedir, '/', $project, '.SUCCESS')"/> <available file="{$dependfilename}" property="dependency.{$project}.present"/> <antcall target="{$project}-dependency"/> </xsl:template> + + + <!-- =========================================================================================== + Target called only if the related property is not set (ie the dependency + is not verified) since it will fail and replace its tag status by a Prereq + information in the html index file. + =========================================================================================== --> <xsl:template match="/workspace/project/depend" mode="failed-dependency"> <xsl:variable name="failed-project" select="@project"/> <target name="{$failed-project}-dependency" unless="dependency.{$failed-project}.present"> <echo message="PREREQ Failure: Project depends on {$failed-project}"/> <available file="{/workspace/@basedir}/{../@name}.FAILED" property="dependency-failure"/> - <replace file="{/workspace/@basedir}/index.html"> - <xsl:attribute name="token"> - <xsl:text>TAG-</xsl:text> - <xsl:value-of select="@name"/> - <xsl:text>-STATUS</xsl:text> - </xsl:attribute> - <xsl:attribute name="value"> - <xsl:text>Prereq Failure: </xsl:text> - <xsl:value-of select="@project"/> - </xsl:attribute> - </replace> - <fail message="PREREQ Failure: Dependency on {$failed-project} could not be satisfied."/> + <replace file="{/workspace/@basedir}/index.html" token="TAG-{../@name}-STATUS" value="Prereq Failure: {$failed-project}"/> + <fail message="PREREQ Failure: Dependency on {$failed-project} could not be satisfied."/> </target> </xsl:template> + + <xsl:template match="/workspace/project/ant/property"> <arg> <xsl:attribute name="value"> @@ -320,6 +246,7 @@ <xsl:value-of select="@project"/> <xsl:text>']/</xsl:text> <xsl:value-of select="@reference"/> + <xsl:if test="@id"> <xsl:text>[@id='</xsl:text> <xsl:value-of select="@id"/> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
