Books/.Books/rollback.sh

48 lines
1.5 KiB
Bash
Executable File

#!/usr/bin/env bash
BOOK_DIR="$(cat $HOME/.Books/bookdir)"
lb=$(echo -e '\033[38;5;94m')
db=$(echo -e '\033[38;5;95m')
blank=$(echo -e '\033[0m')
bold=$(echo -e '\033[1m')
#check if any instances of write.sh FORKED or manuskript are running first
if (ps -ef | grep -v grep | grep manuskript &>/dev/null); then
echo "You need to exit Manuskript before you roll back."
exit 1
fi
pkill -f "write.sh FORKED"
cd $BOOK_DIR
if ! (git log --oneline | grep -n autosave | grep -v HEAD &>/dev/null); then
echo "Nothing to roll back to."
exit
fi
echo "==============================================="
now=$(date +%s)
git log --oneline | grep -n autosave | grep -v HEAD | head -n 10 | while read line; do
ln=${line%%:*}
savetime=$(date -d "$(echo $line | awk '{print $2 " " $3}')" +%s)
ago=$(( (now - savetime) / 60 ))
echo "${bold}${lb}${ln}${blank}@${db}$(date -d @$savetime +'%a %d %b %H:%M:%S')${blank}@${lb}${ago} minutes ago"
done | column -s@ -t --table-columns Save,Time, --table-right Save
echo $db
read -ep " Choose a save to roll back to: $lb" saveno
echo
ddate=$(git log --oneline | grep -n --color=always autosave | grep --color=always -v HEAD | head -n $saveno | tail -n1 | awk '{print $2 " " $3}' | xargs -I@ date -d '@')
read -sn1 -p "$db Restore save from${lb} ${ddate}${db}? [y|N]" yn
if [ ${yn,,} == 'y' ]; then
savecommit=$(git log --oneline | grep -n autosave | grep -v HEAD | head -n $saveno | tail -n1 | sed -E 's/[0-9]*:([0-9a-f]*) .*/\1/')
echo
echo
git reset --hard $savecommit &>/dev/null
echo " Rolled back to $ddate."
fi
echo