commit a7b7ab9957e556fb45132abd1c75415beac07ccc Author: Mohammed Goder Date: Wed Mar 13 10:51:49 2024 -0500 Upload files to "/" diff --git a/grs.service b/grs.service new file mode 100644 index 0000000..c0a184c --- /dev/null +++ b/grs.service @@ -0,0 +1,10 @@ +[Unit] +Description=Git Repository Synchronizer +After=network.target + +[Service] +WorkingDirectory=/mnt/git-repository-archive +ExecStart=/mnt/git-repository-archive/grs.sh + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/grs.sh b/grs.sh new file mode 100644 index 0000000..42477f7 --- /dev/null +++ b/grs.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +# 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 + + echo "$log" >> ../log.txt + echo "$gitOutput" >> ../log.txt + + snapshotSize=$(($(du -sb "../snapshots/$repository" | cut -f1) - $(du -sb "../snapshots/$repository/.git" | cut -f1))) + if [ $(($snapshotSize - ($snapshotSize / $thresholdFactor))) -lt $(($(du -sb "$repository" | cut -f1) - $(du -sb "$repository/.git" | cut -f1))) ]; then + log=$(echo [$(date +"%Y-%m-%d %H:%M:%S")] Updating \"$repository\") + echo "$log" + echo "$log" >> ../log.txt + echo >> ../log.txt + + rm -rf "../snapshots/$repository" + cp -rf "$repository" ../snapshots + continue + fi + + snapshotTime=$(echo [$(date +"%Y-%m-%d %H'%M'%S")]) + log=$(echo $snapshotTime Snapshotting \"$repository\") + echo "$log" + echo "$log" >> ../log.txt + echo >> ../log.txt + + tar -czf "../snapshots/$snapshotTime $repository.tar.gz" "../snapshots/$repository" + rm -rf "../snapshots/$repository" + cp -rf "$repository" ../snapshots +done +cd .. + +# sleep $sleepTime +#done \ No newline at end of file diff --git a/grs.timer b/grs.timer new file mode 100644 index 0000000..03b3141 --- /dev/null +++ b/grs.timer @@ -0,0 +1,9 @@ +[Unit] +Description=Git Repository Synchronizer + +[Timer] +OnCalendar=*:0/10 +Persistent=true + +[Install] +WantedBy=timers.target \ No newline at end of file