1#!/usr/bin/env bash 2 3FOSSILS_SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" 4FOSSILS_YAML="$(readlink -f "$1")" 5FOSSILS_RESULTS="$2" 6 7clone_fossils_db() 8{ 9 local repo="$1" 10 local commit="$2" 11 rm -rf fossils-db 12 git clone --no-checkout "$repo" fossils-db 13 (cd fossils-db; git reset "$commit" || git reset "origin/$commit") 14} 15 16query_fossils_yaml() 17{ 18 python3 "$FOSSILS_SCRIPT_DIR/query_fossils_yaml.py" \ 19 --file "$FOSSILS_YAML" "$@" 20} 21 22create_clean_git() 23{ 24 rm -rf .clean_git 25 cp -R .git .clean_git 26} 27 28restore_clean_git() 29{ 30 rm -rf .git 31 cp -R .clean_git .git 32} 33 34fetch_fossil() 35{ 36 local fossil="${1//,/?}" 37 echo -n "[fetch_fossil] Fetching $1... " 38 local output=$(git lfs pull -I "$fossil" 2>&1) 39 local ret=0 40 if [[ $? -ne 0 || ! -f "$1" ]]; then 41 echo "ERROR" 42 echo "$output" 43 ret=1 44 else 45 echo "OK" 46 fi 47 restore_clean_git 48 return $ret 49} 50 51if [[ -n "$(query_fossils_yaml fossils_db_repo)" ]]; then 52 clone_fossils_db "$(query_fossils_yaml fossils_db_repo)" \ 53 "$(query_fossils_yaml fossils_db_commit)" 54 cd fossils-db 55else 56 echo "Warning: No fossils-db entry in $FOSSILS_YAML, assuming fossils-db is current directory" 57fi 58 59# During git operations various git objects get created which 60# may take up significant space. Store a clean .git instance, 61# which we restore after various git operations to keep our 62# storage consumption low. 63create_clean_git 64 65for fossil in $(query_fossils_yaml fossils) 66do 67 fetch_fossil "$fossil" || exit $? 68 fossilize-replay --num-threads 4 $fossil 1>&2 2> $FOSSILS_RESULTS/fossil_replay.txt 69 if [ $? != 0 ]; then 70 echo "Replay of $fossil failed" 71 grep "pipeline crashed or hung" $FOSSILS_RESULTS/fossil_replay.txt 72 exit 1 73 fi 74 rm $fossil 75done 76 77exit $ret 78