<?xml version="1.0" encoding="utf-8" ?>
<project name="SVNVersioner" default="go">
  <!-- Project UppercuT - http://projectuppercut.org -->
  <!-- DO NOT EDIT THIS FILE - This creates the assembly file to be used by the rest of the application - find out more at http://uppercut.pbwiki.com -->
  <property name="build.config.settings" value="__NONE__" overwrite="false" />
  <include buildfile="${build.config.settings}" if="${file::exists(build.config.settings)}" />
  <property name="path.separator" value="${string::trim(path::combine(' ', ' '))}" />
  <property name="file.current.no_extension" value="svn" />
  <property name="dirs.current" value="${directory::get-current-directory()}" />
  <property name="dirs.current.file" value="${directory::get-parent-directory(project::get-buildfile-path())}" />  
  <property name="folder.build_scripts" value="build" overwrite="false" />
  <property name="folder.build_scripts_custom" value="build.custom${path.separator}" overwrite="false" />
  <property name="dirs.build_scripts_custom" value="${dirs.current}${path.separator}${folder.build_scripts_custom}${path.separator}versioners" />
  <property name="repository.path" value="__REPOSITORY_PATH__" overwrite="false" />
  <property name="version.revision" value="0" overwrite="false" />
  <property name="is.replaced" value="false" />
  <property name="fail.build.on.error" value="false" />

  <target name="go" depends="run_tasks" />

  <target name="run_tasks">
    <echo level="Warning" message="" />
    <echo level="Warning" message="====================" />
    <echo level="Warning" message="${project::get-name()}" />
    <echo level="Warning" message="====================" />
    <call target="prepare" if="${target::exists('prepare')}" />
    <customExtension extends="${project::get-buildfile-path()}" type="pre" failonerror="${fail.build.on.error}" />
    <customExtension extends="${project::get-buildfile-path()}" type="replace" failonerror="${fail.build.on.error}" />
    <call target="run_normal_tasks" if="${not is.replaced}" />
    <customExtension extends="${project::get-buildfile-path()}" type="post" failonerror="${fail.build.on.error}" />
  </target>

  <target name="run_normal_tasks"
          depends="get_revision, get_externally_provided_revision, set_version_environment_variable"
          description="Generating Assembly File." />

  <target name="get_revision">
    <echo level="Warning" message="Getting revision number from working directory '${dirs.current}' or remotely at ${repository.path}."/>
    <!-- try to update the revision -->
    <exec
      program="svn"
      workingdir="${dirs.current}"
      commandline="info .\ --xml"
      output="_revision.xml"
      failonerror="false" />
    <xmlpeek
      file="_revision.xml"
      xpath="/info/entry/commit/@revision"
      property="version.revision"
      failonerror="false"/>
    <exec
      program="svn"
      commandline='info "${repository.path}" --xml'
      output="_revision.xml"
      failonerror="false"
      if="${version.revision == '0'}"
      />
    <xmlpeek
      file="_revision.xml"
      xpath="/info/entry/@revision"
      property="version.revision"
      failonerror="false"
      if="${version.revision == '0'}"
      />
    <delete file="_revision.xml" failonerror="false" />
  </target>

  <target name="get_externally_provided_revision">
    <property name="version.revision" value="${environment::get-variable('BUILD_VCS_NUMBER')}" if="${version.revision == '0' and environment::variable-exists('BUILD_VCS_NUMBER')}" />
  </target>

  <target name="set_version_environment_variable">
    <setenv name="uc.app.revision" value="${version.revision}"/>
    <setenv name="uc.app.revision.hash" value="${version.revision}"/>
  </target>

</project>