You are viewing a plain text version of this content. The canonical link for it is here.
Posted to alexandria-dev@jakarta.apache.org by sa...@apache.org on 2001/04/20 20:27:00 UTC

cvs commit: jakarta-alexandria/proposal/antgump/xsl antgump-each.xsl

sanders     01/04/20 11:27:00

  Modified:    proposal/antgump/xsl antgump-each.xsl
  Log:
  excellent patch from Stephane Bailliez (sbailliez@imeditation.com)
  
  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: alexandria-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: alexandria-dev-help@jakarta.apache.org