#!/usr/bin/env bash
#
# Script to sync all repositories of a project
#
# Written by Michel Jouvin - CNRS/LAL - 15/7/2019

trac_proj_root=/pdisk/trac/projects

usage () {
    echo "usage: $(basename $0) [-all|project]"
}

projects=''
while [ -n "$(echo $1 | grep '^-')" ]
do
  case "$1" in
    -all)
      projects=$(cd $trac_proj_root; ls)
      ;;

    *)
      usage
      exit
      ;;
  esac

  shift
done

if [ -z "$projects" ]
then
  if [ -n "$1" ]
  then
    if [ ! -d ${trac_proj_root}/$1 ]
    then
        echo "ERROR: Project $1 not found"
        exit 2
    fi
    projects=$1
  else
    usage
    exit
  fi
elif [ -n "$1" ]
then
    usage
    exit
fi

. /pdisk/trac/venv/bin/activate


for project in ${projects}
do
    echo "Checking repositories for project ${project}"

    project_path="${trac_proj_root}/${project}"

    repo_list=$(trac-admin ${project_path} repository list | egrep -v 'Name\s+Type' | grep -v -- '---------' | egrep -v '^$')

    saved_ifs=${IFS}
    IFS=$'\n'
    for repo_line in ${repo_list}
    do
        repo_name=$(echo ${repo_line} | awk '{print $1}')
        echo "    Syncing repository ${repo_name}"
        trac-admin ${project_path} repository sync ${repo_name} 
    done
done

IFS=${save_ifs}
