#!/usr/bin/env bash

FOSSILS_SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
FOSSILS_YAML="$(readlink -f "$1")"
FOSSILS_RESULTS="$2"

clone_fossils_db()
{
    local repo="$1"
    local commit="$2"
    rm -rf fossils-db
    git clone --no-checkout "$repo" fossils-db
    (cd fossils-db; git reset "$commit" || git reset "origin/$commit")
}

query_fossils_yaml()
{
    python3 "$FOSSILS_SCRIPT_DIR/query_fossils_yaml.py" \
        --file "$FOSSILS_YAML" "$@"
}

create_clean_git()
{
    rm -rf .clean_git
    cp -R .git .clean_git
}

restore_clean_git()
{
    rm -rf .git
    cp -R .clean_git .git
}

fetch_fossil()
{
    local fossil="${1//,/?}"
    echo -n "[fetch_fossil] Fetching $1... "
    local output=$(git lfs pull -I "$fossil" 2>&1)
    local ret=0
    if [[ $? -ne 0 || ! -f "$1" ]]; then
        echo "ERROR"
        echo "$output"
        ret=1
    else
        echo "OK"
    fi
    restore_clean_git
    return $ret
}

if [[ -n "$(query_fossils_yaml fossils_db_repo)" ]]; then
    clone_fossils_db "$(query_fossils_yaml fossils_db_repo)" \
                     "$(query_fossils_yaml fossils_db_commit)"
    cd fossils-db
else
    echo "Warning: No fossils-db entry in $FOSSILS_YAML, assuming fossils-db is current directory"
fi

# During git operations various git objects get created which
# may take up significant space. Store a clean .git instance,
# which we restore after various git operations to keep our
# storage consumption low.
create_clean_git

for fossil in $(query_fossils_yaml fossils)
do
    fetch_fossil "$fossil" || exit $?
    fossilize-replay --num-threads 4 $fossil 1>&2 2> $FOSSILS_RESULTS/fossil_replay.txt
    if [ $? != 0 ]; then
        echo "Replay of $fossil failed"
        grep "pipeline crashed or hung" $FOSSILS_RESULTS/fossil_replay.txt
        exit 1
    fi
    rm $fossil
done

exit $ret
