diff options
Diffstat (limited to 'share/hydractl/sync-media-initremotes')
-rwxr-xr-x | share/hydractl/sync-media-initremotes | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/share/hydractl/sync-media-initremotes b/share/hydractl/sync-media-initremotes new file mode 100755 index 0000000..839deea --- /dev/null +++ b/share/hydractl/sync-media-initremotes @@ -0,0 +1,92 @@ +#!/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 <volume> [<caches|volumes|boxes> [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 |