#!/bin/bash
set -o nounset
set -o errexit

SCRIPT_DIR="$(dirname "$0")"
ROOT_DIR="$(dirname "${SCRIPT_DIR}")"
LLVM_DIR="${ROOT_DIR}/third_party/llvm"
CLANG_DIR="${LLVM_DIR}/tools/clang"
LLVM_SHA_FILE=${SCRIPT_DIR}/llvm.sha
CLANG_SHA_FILE=${SCRIPT_DIR}/clang.sha
LLVM_GIT_URL="http://llvm.org/git/"
LLVM_SVN_URL="https://llvm.org/svn/llvm-project/"
SVN_FILE="${LLVM_DIR}/.git/svn/.metadata"
DEPTH=5000
SYNC_TO_HEAD=NO
LLVM_USERNAME=NONE

while [[ $# > 0 ]]; do
  flag="$1"
  case $flag in
    --head)
      SYNC_TO_HEAD=YES
      ;;
    --llvm-username)
      LLVM_USERNAME="$2"
      shift # Pass over $2 value.
      ;;
    -h|--help)
      echo "Create or update LLVM-related repositories."
      echo " --head                  Sync to origin/master"
      echo " --llvm-username=a@b.com LLVM project username for commits"
      exit 0
      ;;
    *)
      echo "unknown arg ${flag}"
      exit 1
      ;;
  esac
  shift
done

if [[ ${SYNC_TO_HEAD} = "YES" ]]; then
  LLVM_SHA=origin/master
  CLANG_SHA=origin/master
else
  LLVM_SHA=`cat ${LLVM_SHA_FILE}`
  CLANG_SHA=`cat ${CLANG_SHA_FILE}`
fi

fetch_or_clone() {
  local dir=$1
  local git_url=${LLVM_GIT_URL}$2.git
  local svn_url=${LLVM_SVN_URL}$3/trunk

  if [[ -d ${dir} ]]; then
    # Try to extend the depth if needed.
    if [[ `git -C ${dir} log --pretty=oneline | wc -l` -lt ${DEPTH} ]]; then
      git -C ${dir} fetch origin --depth ${DEPTH}
    else
      git -C ${dir} fetch origin
    fi
    if [[ -e ${SVN_FILE} ]]; then
      # The git repo has SVN history, keep the tags in sync.
      pushd ${dir}
      git checkout master
      git svn rebase -l
      popd
    fi
  else
    git -C "$(dirname ${dir})" clone --depth ${DEPTH} $git_url
    # The upstream repository is in Subversion, use git pull --rebase instead
    # of git pull to avoid generating a non-linear history in the clone:
    #   llvm.org/docs/GettingStarted.html#git-mirror
    git config branch.master.rebase true
    if [[ "${LLVM_USERNAME}" != "NONE" ]]; then
      # Initialize the SVN history:
      # llvm.org/docs/GettingStarted.html#for-developers-to-work-with-git-svn
      pushd ${dir}
      git svn init $svn_url --username=${LLVM_USERNAME}
      git config svn-remote.svn.fetch :refs/remotes/origin/master
      git svn rebase -l
      popd
    fi
  fi
}

fetch_or_clone ${LLVM_DIR} llvm llvm
fetch_or_clone ${CLANG_DIR} clang cfe

git -C ${LLVM_DIR} checkout ${LLVM_SHA}
git -C ${CLANG_DIR} checkout ${CLANG_SHA}

# If running w/ --head, also update llvm.sha and clang.sha to the new revisions.
if [[ ${SYNC_TO_HEAD} = "YES" ]]; then
  git -C ${LLVM_DIR} rev-parse HEAD > ${LLVM_SHA_FILE}
  git -C ${CLANG_DIR} rev-parse HEAD > ${CLANG_SHA_FILE}
fi
