blob: ee3c16d8ccb4184a3bde8ea7f72a4fd8bdaa7c45 [file] [log] [blame]
#!/usr/bin/env bash
# This script pulls all repositories selected with llvm-projs and rebases the
# current branch on top of the new master.
. llvm-common
safe_run verify_env
function repo_sync () {
project=$1
repo_dir=$2
worktree_dir=$3
if [ ! -d $repo_dir ]; then
echo " + Not updating $project (couldn't find source directory)"
return;
fi
if [ ! -d $worktree_dir ]; then
echo " + Not updating $project (couldn't find worktree directory)"
return;
fi
echo " + Updating $project"
# To pull master, we must be in the repo dir (we shouldn't checkout master in
# the worktree dirs - by default, master lives in the repo dir)
cd $repo_dir
safe_run git-refresh
# To rebase the current branch, we must be in the worktree dir (we shouldn't
# checkout the current branch in the repo dir, because it is already checked
# out in the worktree dir)
cd $worktree_dir
safe_run git-rebase
}
prog=`basename $0`
clang=false
rt=false
libcxx=false
libcxxabi=false
libunwind=false
linker=false
debug=false
tests=false
web=false
clang_workdir=$LLVM_SRC/tools/clang
rt_workdir=$LLVM_SRC/projects/compiler-rt
libcxx_workdir=$LLVM_SRC/projects/libcxx
libcxxabi_workdir=$LLVM_SRC/projects/libcxxabi
libunwind_workdir=$LLVM_SRC/projects/libunwind
lld_workdir=$LLVM_SRC/tools/lld
lldb_workdir=$LLVM_SRC/tools/lldb
test_workdir=$LLVM_SRC/projects/test-suite
if [ -d $clang_workdir ]; then clang=true; fi
if [ -d $rt_workdir ]; then rt=true; fi
if [ -d $libcxx_workdir ]; then libcxx=true; fi
if [ -d $libcxxabi_workdir ]; then libcxxabi=true; fi
if [ -d $libunwind_workdir ]; then libunwind=true; fi
if [ -d $lld_workdir ]; then linker=true; fi
if [ -d $lldb_workdir ]; then debug=true; fi
if [ -d $test_workdir ]; then tests=true; fi
while getopts "wa" opt; do
case $opt in
w)
web=true
;;
a)
clang=true
rt=true
libcxx=true
libcxxabi=true
libunwind=true
linker=true
debug=true
tests=true
;;
*)
echo "Syntax: $prog [-(w)eb pages] [-(a)ll]"
echo "Syncs the repos that are currently linked into the llvm source tree"
echo "-w forces sync for the web repos (which are never linked)"
echo "-a forces sync for non-web repos that are not linked"
exit 1
;;
esac
done
llvm_repos=$LLVM_ROOT/repos
# Compulsory updates
repo_sync LLVM $llvm_repos/llvm $LLVM_SRC
if $clang; then
repo_sync Clang $llvm_repos/clang $clang_workdir
fi
# Optional updates
if $rt; then
repo_sync RT $llvm_repos/compiler-rt $rt_workdir
fi
if $libcxx; then
repo_sync LibC++ $llvm_repos/libcxx $libcxx_workdir
fi
if $libcxxabi; then
repo_sync LibC++ABI $llvm_repos/libcxxabi $libcxxabi_workdir
fi
if $libunwind; then
repo_sync LibUnwind $llvm_repos/libunwind $libunwind_workdir
fi
if $linker; then
repo_sync Linker $llvm_repos/lld $lld_workdir
fi
if $debug; then
repo_sync Debugger $llvm_repos/lldb $lldb_workdir
fi
if $tests; then
repo_sync Test-Suite $llvm_repos/test-suite $test_workdir
repo_sync LNT $llvm_repos/lnt $llvm_repos/lnt
repo_sync Zorg $llvm_repos/zorg $llvm_repos/zorg
fi
# These are pure SVN repos, not enabled with -a
# You have to manually force with -w
if $web; then
if [ -d $llvm_repos/www ]; then
echo " + Updating WWW"
cd $llvm_repos/www $llvm_repos/www
svn up
fi
if [ -d $llvm_repos/pubs ]; then
echo " + Updating Pubs"
cd $llvm_repos/pubs $llvm_repos/pubs
svn up
fi
fi