#!/bin/bash logPath=log.txt # 1/10 = 0.1 = 10% thresholdFactor=10 sleepTime=10m #while true; do if [ ! -d repositories ]; then mkdir repositories; fi if [ ! -d snapshots ]; then mkdir snapshots; fi cd repositories for repository in *; do if [ ! -d "$repository" ]; then continue; fi if [ ! -d "../snapshots/$repository" ]; then cp -rf "$repository" ../snapshots; fi log=$(echo [$(date +"%Y-%m-%d %H:%M:%S")] Checking \"$repository\") echo "$log" cd "$repository" gitOutput=$(git pull --recurse-submodules=on-demand) echo "$gitOutput" cd .. if [ "$gitOutput" == "Already up to date." ]; then continue; fi cd .. echo "$log" >> "$logPath" if [ "$gitOutput" == "" ]; then cd "repositories/$repository" gitURL=$(git config --get remote.origin.url) cd .. rm -rf "$repository" gitOutput=$(git clone --recurse-submodules --recursive $gitURL) cd .. if [ "$gitOutput" == "" ]; then log=$(echo [$(date +"%Y-%m-%d %H:%M:%S")] Unable to check for updates to \"$repository\") echo "$log" echo "$log" >> "$logPath" echo >> "$logPath" cp -rf "snapshots/$repository" repositories cd repositories continue; fi echo "$gitOutput" fi echo "$gitOutput" >> "$logPath" snapshotSize=$(($(du -sb "snapshots/$repository" | cut -f1) - $(du -sb "snapshots/$repository/.git" | cut -f1))) if [ $(($snapshotSize - ($snapshotSize / $thresholdFactor))) -lt $(($(du -sb "repositories/$repository" | cut -f1) - $(du -sb "repositories/$repository/.git" | cut -f1))) ]; then log=$(echo [$(date +"%Y-%m-%d %H:%M:%S")] Updating \"$repository\") echo "$log" echo "$log" >> "$logPath" echo >> "$logPath" rm -rf "snapshots/$repository" cp -rf "repositories/$repository" snapshots cd repositories continue fi snapshotTime=$(echo [$(date +"%Y-%m-%d %H'%M'%S")]) log=$(echo $snapshotTime Snapshotting \"$repository\") echo "$log" echo "$log" >> "$logPath" echo >> "$logPath" tar -czf "snapshots/$snapshotTime $repository.tar.gz" "snapshots/$repository" rm -rf "snapshots/$repository" cp -rf "repositories/$repository" snapshots cd repositories done cd .. # sleep $sleepTime #done