#!/bin/bash OUR_DIR=$(dirname “$0”) SCRIPT=“$1”; SCRIPT_LOG=“$2”; ANSIBLE_HOST_OVERRIDE=“$3”; GIT_GAT=“$4”; rm -f “$SCRIPT_LOG” # Disable git's paging which can cause a hang export GIT_PAGER=cat # Prevent pip from shouting everywhere pip config –user set global.progress_bar off # Setup the demo-magic . ${OUR_DIR}/video-term-demo-magic.sh -n # Go into right dir cd ${GIT_GAT} || exit # Hide our demo-magic activation clear

OLDIFS=“$IFS” IFS=$'n' scriptStart=$(date +%s.%N) for line in $(cat $SCRIPT | jq '.[]' -c); do

# These aren't fast.
action=$(echo "$line" | jq .action -r)
time=$(echo "$line" | jq .time -r)
data=$(echo "$line" | jq .data -r)

# We'll track how long this action takes. This is also where we should start talking.
actionStart=$(date +%s.%N)
currentTime=$(echo "$actionStart - $scriptStart" | bc -l)
echo -e "$currentTime\t$action" >> "$SCRIPT_LOG"
if [[ "$action" == "checkout" ]]; then
        git checkout -q "$data"
        echo "$(tput bold)Next step: $(git show --pretty=%s | head -n 1)$(tput sgr0)"
        edited_file_name=$(git show --name-only | tail -n 1)
        sleep 1
        # Fake the PS1 to show the command they should use
        p "nano $edited_file_name"
        sleep 2
        # Checkout the previous commit so we can show the diff properly
        git checkout -q "$data^1"
        # This will pretend to edit it in """"vim""""
        python3 ${OUR_DIR}/video-diffplayer.py \
                --diff <(git show "$data") \
                --nosave \
                --speed 0.1 \
                --session-min-length "$time"
        # But now we actually need to be on the commit we say we are
        git checkout -q "$data"
elif [[ "$action" == "cmd" ]]; then
        sed -i "s/gat.*.galaxyproject.eu/${ANSIBLE_HOST_OVERRIDE}/" ${GIT_GAT}/hosts
        echo 'password' > ${GIT_GAT}/.vault-password.txt
        pe "$data"
        git checkout -q -- hosts 2>/dev/null
else
        echo "???? ERROR"
        exit 42
fi

# Delay
actionEnd=$(date +%s.%N)
# This took
actionObsTime=$(echo "$actionEnd - $actionStart" | bc -l)
actionExpTime=$time
# If this took less time than expected,

res=$(echo "$actionObsTime < $actionExpTime" |bc -l);
if (( res )); then
        toWait=$(echo "$actionExpTime - $actionObsTime" | bc -l)
        # Wait to catch up to that value
        sleep "$toWait"
fi

done IFS=“$OLDIFS”