summaryrefslogtreecommitdiff
path: root/share/hydractl/sync-media-initremotes
blob: 839deea0f37de87b83c0aca33607c8b3f9619748 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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