#! /usr/bin/env bash # Update (or create) bpkg packages.manifest files in repository. # # Usage: update [-t ] [-e ] [] # # This script runs the rep-create command for every first-level subdirectory # of that doesn't start with '.' and contains the repositories.manifest # file, unless itself contains repositories.manifest. # # -e # Exclude the specified sub-directory. Currently only one directory can # be excluded. # # -t # Specify the build2 toolchain install/stage directory. The script will # use /bin/bpkd instead of just bpkg. # trap 'exit 1' ERR set -o errtrace # Trap in functions. function info () { echo "$*" 1>&2; } function error () { info "$*"; exit 1; } dir= toolchain= exclude= while [ $# -gt 0 ]; do case $1 in -e) shift exclude=${1%/} shift ;; -t) shift toolchain=${1%/} shift ;; *) dir=${1%/} shift break ;; esac done if [ -z "$dir" ]; then error "usage: $0 [-t ] []" fi if [ -z "$toolchain" ]; then bpkg="bpkg" else bpkg="$toolchain/bin/bpkg" if [ ! -x $bpkg ]; then error "$bpkg does not exist or is not executable" fi fi if [ -f "$dir/repositories.manifest" ]; then sub=$dir else sub=`find $dir -mindepth 1 -maxdepth 1 -type d -name '[^.]*'` if [ -z "$sub" ]; then error "no repositories.manifest file or subdirectories in $dir/" fi fi for d in $sub; do if [ `basename $d` = "$exclude" ]; then echo "skipping excluded $d/" 1>&2 continue fi if [ -f "$d/repositories.manifest" ]; then $bpkg rep-create "$@" $d else echo "no repositories.manifest file in $d/, skipping" 1>&2 fi done