123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #!/usr/bin/env bash
- #
- # Upload changes from inside repository using GIN CLI
- # Works with submodules.
- # Assumes gin init was performed or the repository was downloaded via gin get
- usage() {
- echo "$0 <sync-option>"
- echo
- echo "<sync-option> The sync option defines what to do with the content of large files."
- echo " It should be one of the following values:"
- echo " download - Download all large file content from the server"
- echo " keep - Keep all large file content but do not download missing large files"
- echo " remove - Do not download large files and remove existing local large file content"
- exit 1
- }
- # Set the variable for synchronisation option, see above
- syncopt="remove"
- # Set commit message
- echo "Optionally enter a commit message, and hit return: "
- read commitmessage
- if [[ "$commitmessage" == "" ]]; then
- echo "using date as commit message"
- commitmessage="commit on $(date +%Y-%m-%d)"
- fi
- # Checking synchronisation option and giving feedback
- checkargs() {
- case "$1" in
- download)
- echo "Downloading and keep all large file content"
- ;;
- keep)
- echo "Keeping existing local large file content, do not downlad extra files"
- ;;
- remove)
- echo "Removing all local large file content"
- ;;
- *)
- usage
- ;;
- esac
- }
- checkargs "${syncopt}"
- checkerror() {
- err=$1
- msg=$2
- if [[ ${err} != 0 ]]; then
- echo "${msg}" >> ./.log/gin.log
- echo "${err}" >> ./.log/gin.log
- echo "${msg}"
- echo "Press [Enter] to close this window"
- read -r
- exit 1
- fi
- }
- # Set folder where script will be executed
- loc=$(dirname $0)
- projectdir=$(git -C ${loc} rev-parse --show-toplevel)
- pushd ${loc} > /dev/null
- # write log
- mkdir -p ./.log
- echo "$(date +'%Y-%m-%dT%H:%M:%S'): Sync script executed" >> ./.log/gin.log
- echo "intialise submodules"
- git submodule foreach gin init
- echo "Synchronising submodules"
- git submodule foreach gin commit . -m "$commitmessage"
- checkerror $? "Error occurred during 'gin commit'"
- git submodule foreach gin sync
- checkerror $? "Error occurred during 'gin sync'"
- git submodule foreach gin upload
- checkerror $? "Error occurred during 'gin upload'"
- ## remove uploaded (annexed) content
- if [[ "$syncopt" == "remove" ]]; then
- git submodule foreach gin remove-content
- checkerror $? "Error occurred during 'gin remove-content'"
- fi
- # get annexed content
- if [[ "${syncopt}" == "download" ]]; then
- git submodule foreach gin get-content .
- checkerror $? "Error occurred during 'gin get-content .'"
- fi
- echo "Synchronising main repository"
- gin commit . -m "$commitmessage"
- gin sync
- gin upload
- # remove uploaded (annexed) content
- if [[ "$syncopt" == "remove" ]]; then
- gin remove-content
- checkerror $? "Error occurred during 'gin remove-content' in main repo"
- fi
- # get annexed content
- if [[ "${syncopt}" == "download" ]]; then
- gin get-content .
- checkerror $? "Error occurred during 'gin get-content . in main repo'"
- fi
|