aboutsummaryrefslogtreecommitdiff
path: root/files/sync-media
blob: 37bc6c2b2e9f04996fb29505a370d1e7f5bf47d0 (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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/bin/bash
#
# sync-media assets using git-annex
#

VOLUME="/media/usb"
CACHE="/var/cache/media"
DOMAIN="`facter domain`"
MEDIA="media.$DOMAIN"
INCOMING="$CACHE/incoming"
WHOAMI="`whoami`"
OPTIONS="$*"

# Set sudo config
if [ "$WHOAMI" != 'root' ]; then
  sudo="sudo"
fi

# Set fsck config
if echo $OPTIONS | grep -q "--fsck"; then
  FSCK="true"
fi

# Commit changes
if [ -d "$CACHE" ]; then
  # Fix cache permissions
  #echo "Fixing $CACHE permissions..."
  #$sudo find $CACHE -type f -exec chmod 644 {} \;
  #$sudo find $CACHE -type d -exec chmod 755 {} \;
  
  # Fix incoming permissions
  if [ -d "$INCOMING" ]; then
    echo "Fixing $INCOMING permissions..."
    $sudo find $INCOMING -type f -exec chmod 664 {} \;
    $sudo find $INCOMING -type d -exec chmod 775 {} \;
    $sudo chown -R $WHOAMI $INCOMING/*
  fi

  # Add and update local repositories
  for folder in `ls $CACHE`; do
    if [ -d "$CACHE/$folder/.git/annex" ]; then
      (
      cd $CACHE/$folder
      echo "Syncing $CACHE/$folder..."
      git annex add .

      # Adding hidden files and symlinks, find version
      #find -name '.*' -exec git annex add {} \;
      #find -type l -exec git add {} \;

      # Adding hidden files and symlinks, git+for version
      #for file in `git status --porcelain -u | sed -e 's/?? //'`; do
      #  if [ -h "$file" ]; then
      #    git add $file
      #  else
      #    git annex add $file
      #  fi
      #done

      # Adding hidden files and symlinks, git+while version
      git status --porcelain -u | sed -e 's/?? //' | while read file; do
        if [ -h "$file" ]; then
          git add "$file"
        else
          git annex add "$file"
        fi
      done

      git annex sync

      if [ "$FSCK" == "true" ]; then
        git annex fsck --fast
      fi

      git annex unused
      git annex dropunused 1-1000
      )
    fi
  done

  # Check storage media
  MOUNT="`mount | grep $VOLUME`"
  if [ ! -z "$MOUNT" ]; then
    DRIVE="$(basename `echo $MOUNT | awk '{ print $1 }'`)"
  fi

  if [ ! -z "$DRIVE" ]; then
    if [ ! -d "$VOLUME/$MEDIA" ]; then
      echo "Folder $VOLUME/$MEDIA does not exist..."
    else
      for folder in `ls $CACHE`; do
        if [ -d "$CACHE/$folder/.git/annex" ]; then
          if [ ! -d "$VOLUME/$MEDIA/$folder" ]; then
            (
            cd $VOLUME/$MEDIA
            echo "Initializing $VOLUME/$MEDIA/$folder..."
            git clone $CACHE/$folder && cd $folder && git annex init $DRIVE && \
              cd $CACHE/$folder && git remote add $DRIVE $VOLUME/$MEDIA/$folder
            )
          fi
        fi
      done
    fi
  fi
fi

# Retrieve changes at media volumes
if [ -d "$VOLUME/$MEDIA" ]; then
  for folder in `ls $VOLUME/$MEDIA`; do
    if [ -d "$VOLUME/$MEDIA/$folder/.git/annex" ]; then
      (
      cd $VOLUME/$MEDIA/$folder
      echo "Syncing $VOLUME/$MEDIA/$folder..."
      git annex sync
      git annex get --auto --numcopies=3

      if [ "$FSCK" == "true" ]; then
        git annex fsck --fast
      fi

      git annex unused
      git annex dropunused 1-1000
      #git annex drop --auto --numcopies=2
      )
    fi
  done
fi