#!/bin/bash

source release_utils;

# *** update_versions($from_version,$to_version)
update_versions() {
  find . -type f -name 'pom.xml' -print | grep -v .svn | grep -v target |
  while read filename
  do (
    echo "Editing $filename";
    replace_in_file $filename "$1" "$2";
  )
  done
}

from_version=$1;
to_version=$2;
tag_url="https://projects.open.iona.com/projects/svn/iona/camel/tags/camel-$to_version";
state="UPDATE_POM_VERSIONS";
state_file="release.state";
error_state=0;

# check if there are any arguments
if [ $# -eq 0 ]; then 
  echo "No arguments specified...";
  exit 1;
fi

# check if svn tag exists already
url_exists $tag_url
if [ $? -eq 0 ]; then 
  echo "Tag $tag_url already exists...";
  exit 1;
fi

# load state
if [ -f $state_file ]; then 
  state=`cat $state_file`;
  echo "Resuming from $state...";
fi

# the state loop will go until state=DONE
while [ "$state" != "DONE" ]
do
  if [ $state != "ERROR" ]; then
    # write out current state
    echo $state > $state_file;
    echo $'\n'; 
    echo "Executing $state...";
    echo $'\n';
  fi

  case "$state" in
    "UPDATE_POM_VERSIONS")
      update_versions $from_version $to_version; 
      error_state=$?;
      state="RUN_TESTS";
      ;;
    "RUN_TESTS")
      #mvn install;
      error_state=$?;    
      state="DEPLOY_CAMEL";
      ;;
    "DEPLOY_CAMEL") 
      mvn source:jar deploy;
      error_state=$?;      
      state="TAG_CAMEL";
      ;;
    "TAG_CAMEL") 
      svn copy . $tag_url -m "Camel $to_version Release";
      error_state=$?;      
      state="DONE";
      ;;
  esac

  if [ $error_state -ne 0 ]; then
    echo "There has been an error. Please check the log output for details."; 
    state="DONE";
  fi
done
