diff options
Diffstat (limited to 'rep-test')
-rwxr-xr-x | rep-test | 179 |
1 files changed, 0 insertions, 179 deletions
diff --git a/rep-test b/rep-test deleted file mode 100755 index 09541b6..0000000 --- a/rep-test +++ /dev/null @@ -1,179 +0,0 @@ -#! /usr/bin/env bash - -# Test repository. -# -# Usage: update [options] <dir> -# -# First, the script determines the list of repositories/sections. If <dir> -# contains the repositories.manifest file, then it is the only repository to -# be tested. Otherwise, every first-level subdirectory of <dir> that doesn't -# start with '.' and contains the repositories.manifest file is to be tested. -# -# Then, it makes sure that every package in every repository can be built -# in a clean configuration. -# -# -n -# Only test new packages. For this to work, <dir> should be (part of) a -# git repository. Untracked (and changed) files are considered new. -# -# -e <subdir> -# Exclude the specified sub-directory. Currently only one directory can -# be excluded. -# -# -t <toolchain> -# Specify the build2 toolchain install/stage directory. The script will -# use <toolchain>/bin/b and <toolchain>/bin/bpkd instead of just b and -# bpkg. -# -# -c <option>|<module>|<var> -# Specify additional options, modules, or configuration variables to pass -# to the bpkg create command. For example: -# -# -c cxx -c config.cxx.loptions=-L/usr/local/lib -# -usage="usage: $0 [options] <dir>" - -trap 'exit 1' ERR -set -o errtrace # Trap in functions. - -function info () { echo "$*" 1>&2; } -function error () { info "$*"; exit 1; } - -dir= -cfg=/tmp/test-cfg -toolchain= -exclude= -co=() # Use a bash array to handle arguments with spaces (say "-Ifoo -Ibar"). -new=n - -while [ $# -gt 0 ]; do - case $1 in - -e) - shift - exclude=${1%/} - shift - ;; - -t) - shift - toolchain=${1%/} - shift - ;; - -c) - shift - co=("${co[@]}" "$1") - shift - ;; - -n) - new=y - shift - ;; - *) - dir=${1%/} - shift - break - ;; - esac -done - -if [ -z "$dir" ]; then - error $usage -fi - -if [ -z "$toolchain" ]; then - b="b" - bpkg="bpkg" -else - b="$toolchain/bin/b" - if [ ! -x $b ]; then - error "$b does not exist or is not executable" - fi - bo="--build $b" - - bpkg="$toolchain/bin/bpkg" - if [ ! -x $bpkg ]; then - error "$bpkg does not exist or is not executable" - fi -fi - -if [ "$new" = "y" ]; then - new=( `git -C $dir status --untracked-files=all --porcelain . | \ -sed -e 's%^\(??\| M\|M \) .*/\(.*\)$%\2%'` ) - if [ ${#new[@]} -eq 0 ]; then - info "no new packages in $dir" - exit 0 - fi - info "testing only ${new[@]}" -else - new=() -fi - -function check_new () # <pkg> <ver> -{ - if [ ${#new[@]} -eq 0 ]; then - return 0 - fi - - for f in ${new[@]}; do - if [[ $f == $1-$2.?* ]]; then - return 0 - fi - done - - return 1 -} - -# Determine the list of repositories. -# -rep= - -if [ -f "$dir/repositories.manifest" ]; then - rep=$dir -else - sub=`find $dir -mindepth 1 -maxdepth 1 -type d -name '[^.]*'` - if [ -z "$sub" ]; then - error "no subdirectories in $dir/" - fi - - for d in $sub; do - if [ `basename $d` = "$exclude" ]; then - info "skipping excluded $d/" - continue - fi - if [ -f "$d/repositories.manifest" ]; then - rep+=" $d" - else - info "no repositories.manifest file in $d/, skipping" - fi - done - - if [ -z "$rep" ]; then - error "no repositories in $dir/" - fi -fi - -# Test repositories. -# -for r in $rep; do - info "testing $r" - - IFS=$'\n' - pkg=( `$bpkg rep-info --packages $r` ) - IFS=$' \t\n' - - for p in "${pkg[@]}"; do - nv=( $p ) - n=${nv[0]} - v=${nv[1]} - - if ! check_new $n $v; then - continue - fi - - info "testing $n $v" - - $bpkg $bo create -d $cfg --wipe "${co[@]}" - $bpkg add -d $cfg $r - $bpkg fetch -d $cfg - $bpkg $bo build -d $cfg --yes $n/$v - done -done |