#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")" usage() { cat <<"EOF" Downloads source code of Game Boy project repos used as RGBDS test cases. Options: -h, --help show this help message --only-free download only freely licensed codebases --only-nonfree download only non-freely licensed codebases --get-hash print repos' commit hashes instead of downloading them --get-paths print repos' clone paths instead of downloading them EOF } # Parse options in pure Bash because macOS `getopt` is stuck # in what util-linux `getopt` calls `GETOPT_COMPATIBLE` mode nonfree=true free=true actionname= while [[ $# -gt 0 ]]; do case "$1" in -h|--help) usage exit 0 ;; --only-free) nonfree=false ;; --only-nonfree) free=false ;; --get-hash|--get-paths) actionname="$1" ;; --) break ;; *) echo "$(basename "$0"): unknown option '$1'" exit 1 ;; esac shift done if ! "$nonfree" && ! "$free"; then echo "Specifying --only-nonfree with --only-free is a contradiction" exit 1 fi case "$actionname" in --get-hash) action() { printf "%s@%s-" "$EXT_TEST_REPO" "$EXT_TEST_COMMIT" } ;; --get-paths) action() { printf "test/external/%s," "$EXT_TEST_REPO" } ;; *) echo "Fetching test dependency repositories" action() { if [ ! -d "$EXT_TEST_REPO" ]; then git clone "https://$EXT_TEST_DOMAIN/$EXT_TEST_OWNER/$EXT_TEST_REPO.git" \ --revision="$EXT_TEST_COMMIT" --depth=1 --recursive --shallow-submodules \ --config advice.detachedHead=false fi pushd "$EXT_TEST_REPO" git checkout --force --detach "$EXT_TEST_COMMIT" -- if [ -f "../patches/$EXT_TEST_REPO.patch" ]; then git apply --ignore-whitespace "../patches/$EXT_TEST_REPO.patch" fi popd } esac # Each iteration is isolated in a (subshell) so the sourced cfg variables don't "leak" out. for cfg in *.cfg; do ( # Sourcing "$cfg" defines `EXT_TEST_*` variables that get used by `action`. . "$cfg" if $EXT_TEST_IS_NONFREE; then if $nonfree; then action fi else if $free; then action fi fi ); done