#!/bin/bash # # Keep git remotes in sync among media archives. # # Parameters BASENAME="$0" DEST="$1" MEDIA="/var/cache/media" # Syntax if [ -z "$DEST" ]; then echo "usage: $BASENAME " exit 1 elif [ ! -d "$DEST" ]; then echo "folder $DEST does not exist." exit 1 fi # Run for folder in `ls $MEDIA`; do if [ -d "$DEST/$folder/.git" ]; then # Add new remotes git -C $MEDIA/$folder remote -v | while read remote; do cd $DEST/$folder name="`echo $remote | cut -d ' ' -f 1`" addr="`echo $remote | cut -d ' ' -f 2`" type="`echo $remote | cut -d ' ' -f 3`" if ! git remote -v | sed -e 's/\t/ /g' | grep -q "^$name $addr $type$"; then # Check if was not already added by a previous command if ! git remote | grep -q "^$name$"; then git remote add $name $addr fi # This might not sync everything in the first run due to unreliable "git remote -v" output. # See https://github.com/git/git-scm.com/issues/886 #if [ "$type" == "(push)" ]; then # git remote set-url --add --push $name $addr #fi git remote set-url --add --push $name $addr fi done # Delete old remotes git -C $DEST/$folder remote -v | while read remote; do cd $MEDIA/$folder name="`echo $remote | cut -d ' ' -f 1`" addr="`echo $remote | cut -d ' ' -f 2`" type="`echo $remote | cut -d ' ' -f 3`" if [ "$type" == "(push)" ]; then command="set-url --delete" arg="$addr" else command="remove" arg="" fi if ! git remote -v | sed -e 's/\t/ /g' | grep -q "^$name $addr $type$"; then # Check if was not already removed by a previous command if git -C $DEST/$folder remote | grep -q "^$name$"; then git -C $DEST/$folder remote $command $name $arg fi fi done fi done