#!/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 "$@"