<?xml version="1.0" ?>

<!--
	PHING build file for processing a Zend Framework archive file
	into a valid PEAR archive file
	
	This script should ideally be called from the 'branches' directory.
	
	Jean-Lou Dupont
	$Id$
	
	IMPORTANT:   This build file DOES not currently work  
	==========   with phing <= 2.3.3 on Windows. The 'unzip' task
				 is buggy under Windows.
	

	1. delete tmp, create tmp
	
	2. for each *.zip file, unzip in 'tmp'
		
	3. foreach directory in .tmp
		a. extract $version
		b. library/Zend to library/Zend-$version
		c. get files from library/Zend-$version
		d. create package.xml
		e. tar+zip library/Zend-$version + package.xml
		
	4. copy archive to 'tags'
	5. delete .tmp 

-->
<project name="ProcessArchive" basedir="." default='all'>

	<taskdef classname='JLD.PhingTools.SvnStatusTask' name='svn_status' />
	<taskdef classname='JLD.PhingTools.SvnAddTask' name='svn_add' />
	<taskdef classname='JLD.PhingTools.SvnPropsetTask' name='svn_propset' />


	
	<!--
		Step 1
	-->
	<target name="clean_tmp" depends="InitChannel, define_tasks">
		<delete dir="tmp" />
		<mkdir  dir="tmp" />
	</target>
	
	<!--
		Step 2
	-->
	<target name='unzip' depends="clean_tmp">
		<unzip todir="./tmp" >
			<fileset dir=".">
				<include name="*.zip"/>
			</fileset>
		</unzip>
	</target>


	<!--
		Step 3
	-->
	<target name='archives' depends="unzip">
		
		<fileset dir="./tmp" id="files">
			<include name="*" />
		</fileset>
		
		<taskdef classname='JLD.PhingTools.FileSet2PropertyTask' name='fs2prop' />
		<fs2prop fsid='files' prop='clist' />
			
		<foreach list="${clist}" param="file" target="package"/>
		
	</target>
	
	
	<target name="define_tasks">
		<adhoc-task name="genfiles"><![CDATA[
			
			class GenFiles extends Task {
			
				protected $liste;
				protected $prop;
				
				protected $pattern = "<file baseinstalldir='Zend' name='#file#' role='php' />\n";
			
				function setListe($liste) {
					$this->liste = $liste;
				}
			
				function setProp($prop) {
					$this->prop = $prop;
				}
			
				function main() {
					$result = '';
			
					$cliste = $this->project->getProperty( $this->liste );
					$rliste = split(',', $cliste);
					echo "";
			
					foreach( $rliste as $item ) {
						$line = str_replace('#file#', $item, $this->pattern);
						$result .= $line;
					}
					
					$this->project->setProperty($this->prop, $result );
				}
			
			}
			
		]]></adhoc-task>
	</target>
	
	
	<target name="package">
		
		<taskdef classname='JLD.PhingTools.PathInfoTask' name='pathinfo' />		
		<pathinfo file="${file}" version="version"/>

		<fileset dir="./tmp/${file}/library/Zend" id="all_files">
			<include name="**/*.*" />
		</fileset>
		<fs2prop fsid='all_files' prop='flist' />
		<genfiles liste="flist" prop="files" />
		
		
		<echo>Copying package.xml template file and adjusting version</echo>
		<copy file="./package.xml.tpl" tofile="./tmp/${file}/library/package.xml" overwrite="true" >
			<filterchain>
				<replacetokens begintoken="##" endtoken="##">
					<token key="version" value="${version}"/>
				</replacetokens>
			</filterchain>
		</copy>

		<echo>Updating package.xml with files</echo>
		<reflexive file="./tmp/${file}/library/package.xml">
			<filterchain>
				<replacetokens begintoken="##" endtoken="##">
					<token key="all_files" value="${files}" />
				</replacetokens>
			</filterchain>
		</reflexive>
			
			
		<echo>Renaming base directory with version info[${version}]</echo>		
		<taskdef classname='JLD.PhingTools.RenameTask' name='rename' />
		<rename src="./tmp/${file}/library/Zend" dest="./tmp/${file}/library/Zend-${version}" />
		
		<resolvepath propertyName="dfile_tgz" file="../tags/Zend/Zend-${version}.tgz" />
		<resolvepath propertyName="dfile_tar" file="../tags/Zend/Zend-${version}.tar" />
		
		<echo>Building release TGZ</echo>
		<tar destfile="${dfile_tgz}" compression='gzip'>
			<fileset dir='tmp/${file}/library/.'>
				<include name="Zend-${version}/**" />
				<include name="package.xml"/>
			</fileset>
		</tar>

		<echo>Building release TAR</echo>
		<tar destfile="${dfile_tar}">
			<fileset dir='tmp/${file}/library/.'>
				<include name="Zend-${version}/**" />
				<include name="package.xml"/>
			</fileset>
		</tar>
		
		<phingcall target="categories">
			<property name="package.version" value="${version}"/>
		</phingcall>
		
		<phingcall target="releases">
			<property name="package.version" value="${version}"/>
			<property name="package.path" value="./tmp/${file}/library" />
		</phingcall>
	
	</target>
	
	
	<!--
	=================================
	RELEASES management
	=================================
	-->
	
	<target name="releases">

		<taskdef classname='JLD.PearTools.phing.PackageReadTask' name='packageread' />
		<!-- T11 -->
		<packageread	propertyPackageFile="${package.path}/package.xml"
						propertyPackageName='package.name' 
						propertyPackageNameL='package.namel' 
						propertyPackageVersion='package.version' 
						propertyPackageStability='package.stability' 
						propertyPackageSummary='package.summary' 
						propertyPackageDescription='package.description'
						propertyPackageDeps='package.dependencies'
						propertyPackageChangelog='package.changelog'
		/>
		<echo>Package name:        ${package.name}</echo>
		<echo>Package version:     ${package.version}</echo>
		
		<echo>Copying "package.xml" to package-${package.version}.xml in REST directory</echo>
		<copy	file="${package.path}/package.xml"
				tofile="${channel.root}/${channel.rest}/r/${package.namel}/package.${package.version}.xml" 
				overwrite="true" />

		<echo>Adding package's releases directory in REST packages</echo>
		<taskdef classname='JLD.PearTools.phing.ChannelReleasesTask' name='releases' />
		<releases	channelroot="${channel.root}" 
					channelname="${channel.name}" 
					channeluri="${channel.uri}" 
					channelrest="${channel.rest}" 
					channeltags="${channel.tags}" 
	
					packagename="${package.name}" 
					packageversion="${package.version}" 
					packagestability="stable" 
					packagedependencies="${package.dependencies}" />
		
		<svn_status path='"${channel.root}/${channel.rest}/r/${package.namel}/allreleases.xml"' 
					result="r.allreleases" />
		<if>
			<contains substring="?" string="${r.allreleases}" />
			<then>
				<echo>Adding "/r/${package.namel}/allreleases.xml" to SVN</echo>
				<svn_add path='"${channel.root}/${channel.rest}/r/${package.namel}/allreleases.xml"' />
				<svn_propset path='"${channel.root}/${channel.rest}/r/${package.namel}/allreleases.xml"' 
				           	propname="svn:mime-type" 
				           	propval="application/xml" />
			</then>
			<else>
				<echo>'allreleases.xml' already in SVN</echo>
			</else>
		</if>
		<!-- T47 -->
		<svn_status path='"${channel.root}/${channel.rest}/r/${package.namel}/${package.version}.xml"' 
					result="r.version" />
		<if>
			<contains substring="?" string="${r.version}" />
			<then>
				<echo>Adding "/r/${package.namel}/${package.version}.xml" to SVN</echo>
				<svn_add path='"${channel.root}/${channel.rest}/r/${package.namel}/${package.version}.xml"' />
				<svn_propset path='"${channel.root}/${channel.rest}/r/${package.namel}/${package.version}.xml"' 
				           	propname="svn:mime-type" 
				           	propval="application/xml" />
			</then>
			<else>
				<echo>"${package.version}.xml" already in SVN</echo>
			</else>
		</if>
		<!-- T48 -->
		<svn_status path='"${channel.root}/${channel.rest}/r/${package.namel}/package.${package.version}.xml"' 
					result="r.package.version" />
		<if>
			<contains substring="?" string="${r.package.version}" />
			<then>
				<echo>Adding "/r/${package.namel}/${package.namel}/package.${package.version}.xml" to SVN</echo>
				<svn_add path='"${channel.root}/${channel.rest}/r/${package.namel}/package.${package.version}.xml"' />
				<svn_propset path='"${channel.root}/${channel.rest}/r/${package.namel}/package.${package.version}.xml"' 
				           	propname="svn:mime-type" 
				           	propval="application/xml" />
			</then>
			<else>
				<echo>"package.${package.version}.xml" already in SVN</echo>
			</else>
		</if>
		<!-- T49, T50 -->
		<svn_status path='"${channel.root}/${channel.rest}/r/${package.namel}/deps.${package.version}.txt"' 
					result="r.deps.version" />
		<if>
			<contains substring="?" string="${r.deps.version}" />
			<then>
				<echo>Adding "/r/${package.namel}/${package.namel}/deps.${package.version}.txt" to SVN</echo>
				<svn_add path='"${channel.root}/${channel.rest}/r/${package.namel}/deps.${package.version}.txt"' />
				<echo>Setting 'application/gzip' MIME-type to dependencies file</echo>
				<svn_propset path='"${channel.root}/${channel.rest}/r/${package.namel}/deps.${package.version}.txt"' 
				           	propname="svn:mime-type" 
				           	propval="application/gzip" />
			</then>
			<else>
				<echo>"deps.${package.version}.txt" already in SVN</echo>
			</else>
		</if>
	</target>
	
	
	
	<!--  
	==========================================================
	CHANNEL MANAGEMENT
	==========================================================
	-->

	<target name='FindChannelRoot'>
		<taskdef classname='JLD.PearTools.phing.ChannelFindTask' name='channelfind' />
		<channelfind RootPath='channel.root' StartPath='${project.basedir}' />
		<echo>Channel root path: ${channel.root}</echo>
	</target>
	<!--
		This task initializes the base variables for the PEAR channel.
	-->
	<target name='InitChannel' depends='FindChannelRoot'>
		<taskdef classname='JLD.PearTools.phing.ChannelTask' name='channel' />
		<echo>Initializing Channel</echo>
		<channel path="${channel.root}" />
		<echo>Channel name:      "${channel.name}"</echo>
		<echo>Channel alias:     "${channel.alias}"</echo>
		<echo>Channel TAGS path: "${channel.tags}"</echo>
		<echo>Channel REST path: "${channel.rest}"</echo>
	</target>
	
	

	
	
	<!--
	============================
	CATEGORIES management
	============================
	-->
	<target name="categories">
		<echo>Processing categories</echo>
		<!-- T22, T23, T24 -->
		<echo>Adding package's category and release information to REST categories</echo>
		<taskdef classname='JLD.PearTools.phing.ChannelCategoriesTask' name='categories' />
		<categories	channelroot="${channel.root}" 
					channelname="${channel.name}" 
					channeluri="${channel.uri}" 
					channelrest="${channel.rest}" 
					channeltags="${channel.tags}"
	
					categoryname="Zend" 
					packagename="Zend"
					packagesummary="Zend Framework"
					packagedescription="Zend Framework"
					packagereleaseversion="${package.version}" 
					packagereleasestability="stable" />
	
		<!-- T27 -->
		<svn_status path='"${channel.root}/${channel.rest}/c/Zend/packagesinfo.xml"' 
					result="c.packagesinfo.xml" />
		<if>
			<contains substring="?" string="${c.packagesinfo.xml}" />
			<then>
				<echo>Adding "/c/${package.category}/packagesinfo.xml" to SVN</echo>
				<svn_add path='"${channel.root}/${channel.rest}/c/Zend/packagesinfo.xml"' />
				<svn_propset path='"${channel.root}/${channel.rest}/c/Zend/packagesinfo.xml"' 
				           	propname="svn:mime-type" 
				           	propval="application/xml" />
			</then>
			<else>
				<echo>'packagesinfo.xml' already in SVN</echo>
			</else>
		</if>
	</target>	
	
	
	
	
	
	
	<!--  
	==========================================================
	BUILD ALL
	==========================================================
	-->
	<target name='all' depends='archives'>
		<echo>Processing Zend Framework Archive</echo>
	</target>

</project>
