| #!/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 |