aboutsummaryrefslogtreecommitdiff
path: root/roles/git/files/runner-mirror/mirror.sh
diff options
context:
space:
mode:
Diffstat (limited to 'roles/git/files/runner-mirror/mirror.sh')
-rwxr-xr-xroles/git/files/runner-mirror/mirror.sh33
1 files changed, 33 insertions, 0 deletions
diff --git a/roles/git/files/runner-mirror/mirror.sh b/roles/git/files/runner-mirror/mirror.sh
new file mode 100755
index 0000000..a517b86
--- /dev/null
+++ b/roles/git/files/runner-mirror/mirror.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+function mirror() {
+ local repo=$1
+
+ if [ ! -d $repo ]; then
+ git clone --mirror https://github.com/johannst/$repo
+ else
+ git -C $repo fetch --all --prune
+ fi
+
+ git -C $repo push --mirror ssh://git.memzero.de/mirror/$repo
+}
+
+function lock() {
+ # Open lock file.
+ exec 42<> /tmp/mirror.lock
+ # Get exclusive lock.
+ flock -x 42
+ # Automatically unlock on exit.
+ trap "flock -u 42" EXIT
+}
+
+# Ensure only a single script instance runs at a time.
+lock
+
+mkdir -p mirrors
+pushd mirrors
+
+for R in $(cat /projects.list | awk -F '/' '/mirror/ { print $2 }'); do
+ echo "==> REPO: $R"
+ mirror $R
+done