summaryrefslogtreecommitdiff
path: root/git-mirror
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2014-05-05 12:47:46 -0400
committerLuke Shumaker <LukeShu@sbcglobal.net>2014-05-05 12:47:46 -0400
commitcdba3ca2afdf617fd856865d50a550cc6770e0d0 (patch)
treefcda4c953c6b4a577a3a82fb98b9c4747690ad63 /git-mirror
Initial commit
Diffstat (limited to 'git-mirror')
-rwxr-xr-xgit-mirror54
1 files changed, 54 insertions, 0 deletions
diff --git a/git-mirror b/git-mirror
new file mode 100755
index 0000000..d09dfb6
--- /dev/null
+++ b/git-mirror
@@ -0,0 +1,54 @@
+#!/bin/bash
+# Copyright © 2014 Luke Shumaker <lukeshu@sbcglobal.net>
+# This work is free. You can redistribute it and/or modify it under the
+# terms of the Do What The Fuck You Want To Public License, Version 2,
+# as published by Sam Hocevar. See the COPYING file for more details.
+
+# Depends on the 'gitget' and 'libremessages' commands. On Parabola
+# GNU/Linux-libre, those are the 'gitget' and 'librelib' packages,
+# respectively.
+#
+# For other systems, the both live at:
+# https://projects.parabolagnulinux.org/packages/libretools.git/
+
+set -o pipefail
+set -e
+. libremessages
+
+config-get() {
+ [[ $# == 1 ]] || panic
+ git config --file "$conf_file" --get "$1"
+}
+
+list-repos() {
+ [[ $# == 0 ]] || panic
+ git config --file "$conf_file" --list | cut -s -d. -f2 | sort -u
+}
+
+mirror-repo() {
+ [[ $# == 1 ]] || panic
+ repo=$1
+ canonical_path="$(config-get "repo.${repo}.canonical")"
+ local_path="$(config-get "repo.${repo}.local")"
+ description="$(config-get "repo.${repo}.description")"
+ [[ -n $description ]] || description="mirror of ${canonical_path}"
+
+ gitget -f -n "$repo" bare "$canonical_path" "$local_path"
+ printf '%s\n' "$description" > "$local_path/description.tmp"
+ mv -- "$local_path/description.tmp" "$local_path/description"
+}
+
+usage() {
+ print 'Usage %s CONFIG-FILE' "${0##*/}"
+}
+
+main() {
+ if [[ $# != 1 ]]; then
+ usage
+ exit
+ fi
+ declare -g conf_file="$1"
+ while read -r repo; do mirror-repo "$repo"; done < <(list-repos)
+}
+
+main "$@"