#!/usr/bin/env bash # The common script is only meant to be included from other LLVM helper scripts # Verify the compulsory environment variables - these must be set for all the # helper scripts. if [[ $LLVM_ROOT = '' ]]; then echo "Please, define \$LLVM_ROOT to point to the root" echo "path where the worktree setup should be performed" exit -1 fi if [[ $LLVM_GITRW = '' ]]; then echo "Please, define \$LLVM_GITRW to yes if you" echo "want to set up Git-SVN and no otherwise" exit -1 fi if [[ $LLVM_GITRW = "yes" ]] && [[ $LLVM_GITUSER = '' ]]; then echo "Please, define \$LLVM_GITUSER to access Linaro's Git server" exit 1 fi if [[ $LLVM_GITRW = 'yes' ]] && [[ $LLVM_SVNUSER = '' ]]; then echo "Please, define \$LLVM_SVNUSER when using GITRW=yes" echo "SVNUSER is your upstream LLVM commit user" exit 1 fi # Verify the environment variables that should be set by llvm-env verify_env() { if [[ $LLVM_SRC = '' ]]; then echo "Please, define \$LLVM_SRC to point to the current LLVM" echo "worktree directory, or run llvm-env to set it for you" exit -1 fi if [[ $LLVM_BLD = '' ]]; then echo "Please, define \$LLVM_BLD to point to the current LLVM" echo "build directory, or run llvm-env to set it for you" exit -1 fi } has() { if [[ $1 = '' || $2 = '' ]]; then echo no return fi local item=$1 shift for each in $*; do if [[ $item = $each ]]; then echo yes return fi done echo no } get_branch() { branch=`git rev-parse --abbrev-ref HEAD` if [[ $? != 0 ]]; then local dir=`pwd` echo "Source dir '$dir' is not in a git repository" 1>&2 exit -1 fi echo $branch } get_branches() { branches=`git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short)'` if [[ $? != 0 ]]; then local dir=`pwd` echo "Source dir '$dir' is not in a git repository" 1>&2 exit -1 fi echo $branches } has_branch() { branch=$1 branches=`get_branches` result=`has $branch $branches` echo $result } safe_run() { "$@" if [[ $? != 0 ]]; then echo "'$@' failed, bailing out" exit 1 fi } is_git() { test -d `git rev-parse --show-toplevel`/.git } is_git_svn() { test -f `git rev-parse --show-toplevel`/.git/svn/.metadata } # Quiet pushd & popd pushdq() { pushd "$@" > /dev/null } popdq() { popd "$@" > /dev/null } add_worktree() { repo_dir=$1 worktree_dir=$2 branch=$3 pushdq $repo_dir if [ `get_branch` != 'master' ]; then echo "$repo_dir isn't on master, bailing out" exit 1 fi if [ `has_branch $branch` = "yes" ]; then safe_run git worktree add $worktree_dir $branch else safe_run git worktree add -b $branch $worktree_dir fi popdq } remove_worktree() { repo_dir=$1 if [ "$2" != "" ]; then worktree_dir=$2 safe_run rm -rf $worktree_dir fi pushdq $repo_dir safe_run git worktree prune popdq }