#!/bin/bash # # Add git-annex remotes to repository in removable media or local cache. # # Parameters BASENAME="`basename $0`" VOLUME="$1" TYPES="$2" DOMAIN="`facter DOMAIN`" HOST="`facter hostname`" CACHES="" VOLUMES="" BOXES="" # Fix identity function sync_media_identity { if [ -z "`git config --local user.email`" ] || [ -z "`git config --local user.name`" ]; then repo="$(basename `pwd`)" git config user.name "${repo^} Archive" git config user.email "$repo@localhost" fi } # Syntax check if [ -z "$VOLUME" ]; then echo "usage: $BASENAME [ [remotes]]" exit 1 fi # Determine media folder if [ "$VOLUME" == "$HOST" ] || [ "$VOLUME" == "localhost" ]; then MEDIA="/var/cache/media" else MEDIA="/media/$VOLUME/media.$DOMAIN" fi # Determine remote type shift 2 if [ "$TYPES" == 'caches' ]; then # Remotes are caches of local boxes CACHES="$*" elif [ "$TYPES" == 'volumes' ]; then # Remotes are removable media VOLUMES="$*" elif [ "$TYPES" == 'boxes' ]; then # Remotes are remote boxes BOXES="$*" fi # Process each repository for file in `ls $MEDIA`; do if [ -d "$MEDIA/$file/.git" ]; then ( echo Processing "$MEDIA/$file..." cd $MEDIA/$file sync_media_identity if git remote | grep -q "^origin$"; then echo "Removing origin..." git remote rm origin fi if [ ! -d "$MEDIA/$file/.git/annex" ]; then git annex init $VOLUME fi for remote in $CACHES; do echo "Adding /var/cache/$remote/media/$file remote..." git remote add $remote /var/cache/$remote/media/$file done for remote in $VOLUMES; do echo "Adding /media/$remote/media.$DOMAIN/$file..." git remote add $remote /media/$remote/media.$DOMAIN/$file done for remote in $BOXES; do if ! echo $remote | grep -q '\.'; then host="$remote.$DOMAIN" else host="$remote" fi echo "Adding ssh://$host/var/cache/media/$file..." git remote add $remote ssh://$host/var/cache/media/$file done echo "" ) fi done