common/templates/tag-hg-code.ant.xml.ftl
author Simon Howkins <simonh@symbian.org>
Tue, 19 Oct 2010 11:11:40 +0100
changeset 1277 2ea5b5b66973
parent 1141 08f7282dae54
permissions -rw-r--r--
Adjusted release tagging, so that it clones from the package source, not dst, and hence it's much less likely that the tagging operation will create multiple heads on the TAGS branch.

<?xml version="1.0"?>
<project name="SF-TAG-HG-CODE" default="all" xmlns:hlm="http://www.nokia.com/helium">

	<#assign dollar = "$"/>
	
	<#assign target_depends = "" />
	<#assign count = 0 />
	
	<#list data as pkg_detail>
		<target name="sf-tag-hg-code-${count}">
			<echo message="Cloning TAGS branch from ${pkg_detail.dst}"/>
			<mkdir dir="${ant['build.drive']}/tagging${pkg_detail.dst}"/>
			<exec executable="hg" dir="${ant['build.drive']}/" failonerror="false" resultproperty="clone.from.dst.${count}.exitcode" errorproperty="clone.from.dst.${count}.stderr">
				<arg value="--quiet"/>
				<arg value="clone"/>
				<arg value="--rev"/>
				<arg value="TAGS"/>
				<arg value="${pkg_detail.source}"/>
				<arg value="tagging${pkg_detail.dst}"/>
			</exec>
			<if>
				<not>
					<equals arg1="${dollar}{clone.from.dst.${count}.exitcode}" arg2="0"/>
				</not>
				<then>
					<!-- TAGS branch not in local source - probably caused by package being new and not having a TAGS branch yet -->
					<echo message="Clone failed because '${dollar}{clone.from.dst.${count}.stderr}'"/>
					<!-- Clone the null revision instead -->
					<exec executable="hg" dir="${ant['build.drive']}" failonerror="true">
						<arg value="--quiet"/>
						<arg value="clone"/>
						<arg value="--rev"/>
						<arg value="null"/>
						<arg value="${pkg_detail.dst}"/>
						<arg value="tagging${pkg_detail.dst}"/>
					</exec>
					<!-- Create the branch -->
					<exec executable="hg" dir="${ant['build.drive']}/tagging${pkg_detail.dst}">
						<arg value="branch"/>
						<arg value="TAGS"/>
					</exec>
					<exec executable="hg" dir="${ant['build.drive']}/tagging${pkg_detail.dst}" logError="true">
						<arg value="--quiet"/>
						<arg value="commit"/>
						<arg value="--message"/>
						<arg value="Created TAGS branch"/>
					</exec>
					<!-- Push it back to the source repo -->
					<exec executable="hg" dir="${ant['build.drive']}/tagging${pkg_detail.dst}" logError="true">
						<arg value="--quiet"/>
						<arg value="push"/>
						<arg value="--force"/>
						<arg value="--rev"/>
						<arg value="."/>
					</exec>
				</then>
			</if>
			<!-- Find out what we're synced to in the main source repo -->
			<exec executable="hg" dir="${ant['build.drive']}" outputproperty="hash12.${count}" logError="true">
				<arg value="id"/>
				<arg value="-i"/>
				<arg value="${pkg_detail.dst}"/>
			</exec>
			<!-- Remove any '+' on the end of the hash (indicating that the package overwrote some of its own source files during the build) -->
			<propertyregex property="hash12.${count}" override="true" input="${dollar}{hash12.${count}}" regexp="\+$" replace=""/>
			<!-- Get the full hash id -->
			<exec executable="hg" dir="${ant['build.drive']}${pkg_detail.dst}" outputproperty="hash40.${count}" logError="true">
				<arg value="log"/>
				<arg value="--rev"/>
				<arg value="${dollar}{hash12.${count}}"/>
				<arg value="--template"/>
				<arg value="{node}"/>
			</exec>
			<!-- Manually add the tag to the tags file -->
			<echo message="${dollar}{hash40.${count}} ${ant['sf.tagafterbuild.tag']}${dollar}{line.separator}" file="${ant['build.drive']}/tagging${pkg_detail.dst}/.hgtags" append="true"/>
			<!-- Make sure the file is added (in case this is the first tagging for this package) -->
			<exec executable="hg" dir="${ant['build.drive']}/tagging${pkg_detail.dst}" output="nul:">
				<arg value="add"/>
				<arg value=".hgtags"/>
			</exec>
			<!-- Manually commit it -->
			<exec executable="hg" dir="${ant['build.drive']}/tagging${pkg_detail.dst}" logError="true">
				<arg value="--quiet"/>
				<arg value="commit"/>
				<arg value="--user"/>
				<arg value="${dollar}{sf.hg.ui.username}"/>
				<arg value="--message"/>
				<arg value="Added tag ${ant['sf.tagafterbuild.tag']} for changeset ${dollar}{hash12.${count}}"/>
			</exec>
		</target>
		
		<#if (count > 0) >
			<#assign target_depends ="${target_depends}" + ", "/>
		</#if>
		<#assign target_depends = "${target_depends}" + "sf-tag-hg-code-${count}" />
		
		<#assign count = count + 1 />
	</#list>
	
	<target name="all" depends="${target_depends}"/>

</project>