Merge pull request #6 from donat-b/master
Add separate way of updating the script, basic logging, moremaster
commit
5a2a55735a
118
update.sh
118
update.sh
|
@ -1,32 +1,106 @@
|
|||
#!/bin/bash
|
||||
#!/usr/bin/env bash
|
||||
# This script should pull a list of the directories in the parent folder,
|
||||
# cd into each folder issue the Git Update command, update the files,
|
||||
# move back to the parent directory and repeat until all files have been updated,
|
||||
# then copy the files to the main mod directory.
|
||||
|
||||
#This script should pull a list of the directories in the parent folder, cd into each folder issue the Git Update command, update the files, move back to the parent directory and repeat until all files have been updated, then copy the files to the main mod directory.
|
||||
SCRIPT_PATH=$(dirname "${BASH_SOURCE[0]}")
|
||||
|
||||
#Move up to parent folder
|
||||
cd ..
|
||||
show_help() {
|
||||
printf 'Usage: update.sh -s "path to mods" -d "destination"\n'
|
||||
}
|
||||
|
||||
#Grab the path of the root folder all mods are in.
|
||||
MODS_PATH=`pwd`
|
||||
|
||||
find $MODS_PATH -maxdepth 1 -type d -print0 | while read -d $'\0' dir
|
||||
do
|
||||
echo "$dir" #Prints the current directory, useful for debugging and logs, pointless right now.
|
||||
cd "$dir" #Moves into the current directory, VERY IMPORTANT
|
||||
if [[ -d .git ]]; then
|
||||
git pull #Runs the update call for GIT
|
||||
# log function by Sebastien Andre
|
||||
# https://gist.github.com/swaeku/6560309
|
||||
log() {
|
||||
local level=${1?}
|
||||
shift
|
||||
local code= line="[$(date '+%F %T')] $level: $*"
|
||||
if [[ -t 2 ]]; then
|
||||
case "$level" in
|
||||
INFO) code=36 ;;
|
||||
DEBUG) code=30 ;;
|
||||
WARN) code=33 ;;
|
||||
ERROR) code=31 ;;
|
||||
*) code=37 ;;
|
||||
esac
|
||||
printf '\e[%dm%s\e[0m\n' ${code} "${line}"
|
||||
else
|
||||
printf 'Not a git repository\n'
|
||||
fi
|
||||
cd .. #Moves back up to the parent directory
|
||||
done #Once all directories have cycled through this ends the loop
|
||||
printf '%s\n' "$line"
|
||||
fi >&2
|
||||
}
|
||||
update_self() {
|
||||
log INFO 'Updating the script'
|
||||
cd ${SCRIPT_PATH}
|
||||
git pull \
|
||||
&& log INFO 'OK' \
|
||||
|| log WARN 'fail'
|
||||
}
|
||||
|
||||
#Now that all files are updated copy them to the main directory.
|
||||
#rsync -r '' ~/.minetest/mods
|
||||
# Set variables accordingly to passed arguments or show help
|
||||
[[ ${#@} -eq 0 ]] && show_help && exit 0
|
||||
while :
|
||||
do
|
||||
case "$1" in
|
||||
-h | --help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
-s | --source)
|
||||
MODS_PATH="${2}"
|
||||
shift 2
|
||||
;;
|
||||
-d | --destination)
|
||||
DESTINATION_PATH="${2}"
|
||||
shift 2
|
||||
;;
|
||||
-u | --update)
|
||||
AUTO_UPDATE=1
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# update the script
|
||||
if [[ ${AUTO_UPDATE} -eq 1 ]]; then
|
||||
update_self
|
||||
fi
|
||||
|
||||
find "${MODS_PATH}" -maxdepth 1 -type d -print0 | while read -d $'\0' dir
|
||||
do
|
||||
cd "$dir"
|
||||
# just skip directories without git
|
||||
[[ ! -d .git ]] && continue
|
||||
|
||||
log INFO "Updating mod $(basename "$dir"):"
|
||||
# check if there is remote-tracking branch
|
||||
if git branch -v | grep 'remote-tracking'; then
|
||||
# placeholder for interactive
|
||||
# merging of forks
|
||||
:
|
||||
else
|
||||
if git pull; then
|
||||
# TODO add check if it actually updated
|
||||
log INFO 'OK'
|
||||
git reflog | head -3
|
||||
else
|
||||
log ERROR 'pull failed'
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Now that all files are updated copy them to the main directory.
|
||||
rsync -r --exclude='.git' \
|
||||
"${MODS_PATH}" \
|
||||
"${DESTINATION_PATH}"
|
||||
|
||||
#Move to the minetest/mods folder this should be default on all installs.
|
||||
cd ~/.minetest/mods
|
||||
cd "${DESTINATION_PATH}"
|
||||
|
||||
#Run an external script to find out which files to rename and do it.
|
||||
if [[ -f ./rename.sh ]]; then
|
||||
exec ./rename.sh
|
||||
if [[ -f ${SCRIPT_PATH}/rename.sh ]]; then
|
||||
exec ${SCRIPT_PATH}/rename.sh
|
||||
fi
|
||||
|
|
Loading…
Reference in New Issue