From cdba3ca2afdf617fd856865d50a550cc6770e0d0 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 5 May 2014 12:47:46 -0400 Subject: Initial commit --- git-mirror | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100755 git-mirror (limited to 'git-mirror') 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 +# 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 "$@" -- cgit v1.2.3