#!/bin/bash set -e vexec() { local i fmt for (( i = 1; i <= $#; ++i )) ; do case ${!i} in *" "*) fmt="'%s'";; *) fmt="%s";; esac printf "${fmt}" "${!i}" if [[ $i -lt $# ]] ; then printf ' ' else echo fi done exec "$@" } cd ~/chromiumos d=/usr/local/google/home/vapier if [[ ! -d ${d} ]] ; then exit 1 fi if [[ -z ${UNSHARE} ]] ; then if type -P unshare >&/dev/null ; then exec sudo unshare -m -- sudo -u ${USER} \ UNSHARE=true PATH="${PATH}" "$0" "$@" fi unset UNSHARE fi d+="/trybot" mkdir -p "${d}" if mount | grep -qs $d ; then echo "mounts found in $d" exit 1 fi if [[ -L $d ]] ; then rd=$(readlink $d) if mount | grep -qs $rd ; then echo "mounts found in $rd" exit 1 fi fi if [[ $1 == "--noclean" ]] ; then shift elif [[ " $* " != *" --remote "* ]] ; then echo "Cleaning ${d}" pushd "${d}" >/dev/null clean=( built-sdk.tbz2 # chroot new-sdk-chroot sdks src/build test_results.tgz trybot_archive ) sudo rm -rf "${clean[@]}" # [[ -L .cache ]] && rm -f .cache || : # mkdir -p .cache # sudo mount --bind -n ~/chromiumos/.cache .cache popd >/dev/null fi # find all the buildbot branches echo "Looking up repo branches" repos=$(r b | cut -b4- | awk '$1 == "bb" { # Single repo output: # bb | in src/third_party/portage-stable # Multi repo output: # bb | in: # src/third_party/portage-stable # src/third_party/chromiumos-overlay if ($3 == "in") print $NF while (getline) { if ($2 == "|") break; print $NF; } }') if [[ -n ${repos} ]] ; then echo "Auto pulling patches from 'bb' branch in repos:" printf '\t%s\n' ${repos} p_flag="" for r in ${repos} ; do r=$(r list | awk -v r="${r}" '$1 == r { print $NF }') p_flag+="${r}:bb " done set -- -p "${p_flag}" "$@" fi set -- --cache-dir=~/chromiumos/.cache "$@" vexec cbuildbot --buildroot=${d} "$@"