blob: 3605e140fad8652ab1135f3ef606dc115c9caa14 [file]
#!/bin/bash
set -o nounset
set -o errexit
SCRIPT_DIR="$(dirname "$(readlink -f "$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
DEPTH=5000
SYNC_TO_HEAD=NO
while [[ $# > 0 ]]; do
flag="$1"
case $flag in
--head)
SYNC_TO_HEAD=YES
;;
*)
echo "unknown arg ${flag}"
;;
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 url=$2
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
else
git -C "$(dirname ${dir})" clone --depth ${DEPTH} $url
fi
}
fetch_or_clone ${LLVM_DIR} http://llvm.org/git/llvm.git
fetch_or_clone ${CLANG_DIR} http://llvm.org/git/clang.git
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