Commit | Line | Data |
---|---|---|
7fbe0fb9 MW |
1 | #! /bin/bash -e |
2 | ||
3 | prog=${0##*/} | |
4 | tmp=${DVDRIP_TMPDIR-${HOME?}/tmp/dvdrip} | |
5 | archive=${DVDRIP_ARCHIVE-jem.distorted.org.uk:/mnt/dvd/archive} | |
6 | kill=nil listen=nil verbose=nil bogus=nil opts=; unset dir sub n label | |
7 | usage () { | |
8 | cat <<EOF | |
9 | usage: $prog [-klv] | |
10 | EOF | |
11 | } | |
12 | while getopts "hklv" opt; do | |
13 | case $opt in | |
14 | h) usage; exit 0 ;; | |
15 | k) kill=t ;; | |
16 | l) listen=t; opts=${opts}l ;; | |
17 | v) verbose=t; opts=${opts}v ;; | |
18 | *) bogus=t ;; | |
19 | esac | |
20 | done | |
21 | shift $(( $OPTIND - 1 )) | |
22 | case $# in | |
23 | 0) ;; | |
24 | *) bogus=t ;; | |
25 | esac | |
26 | case $bogus in t) usage >&2; exit 2 ;; esac | |
27 | case $verbose in t) set -x ;; esac | |
28 | ||
29 | case $kill in | |
30 | t) echo quit >"$tmp/upload.wakeup"; exit 0 ;; | |
31 | esac | |
32 | ||
33 | case ${DVDRIP_UPLOAD_LOCKEDP+t} in | |
34 | t) lockedp=t ;; | |
35 | *) lockedp=nil; DVDRIP_UPLOAD_LOCKEDP=t; export DVDRIP_UPLOAD_LOCKEDP ;; | |
36 | esac | |
37 | case $lockedp,$listen in | |
38 | t,*) ;; | |
39 | nil,nil) | |
40 | if [ -p "$tmp/upload.wakeup" ]; then | |
41 | echo check >"$tmp/upload.wakeup" | |
42 | exit 0 | |
43 | else | |
44 | exec locking "$tmp/upload.lock" "$0" "${opts+-$opts}" | |
45 | fi | |
46 | exit 2 | |
47 | ;; | |
48 | nil,t) | |
49 | exec locking -f "$tmp/upload.lock" "$0" "${opts+-$opts}" | |
50 | exit 2 | |
51 | ;; | |
52 | esac | |
53 | ||
54 | notify () { | |
55 | colour=$1 message=$2 | |
56 | echo "$(tput bold; tput setaf $colour)$message$(tput sgr0; tput op)" | |
57 | } | |
58 | fail () { notify 1 "!!! $*"; exit 2; } | |
59 | warn () { notify 5 "??? $*"; } | |
60 | info () { notify 6 "--- $*"; } | |
61 | run_setrc () { | |
62 | notify 2 "+++ $*"; | |
63 | set +e; nice "$@"; rc=$?; set -e | |
64 | } | |
65 | run () { run_setrc "$@"; case $rc in 0) ;; *) fail "$1: exit $rc" ;; esac; } | |
66 | ||
67 | case $archive in | |
68 | *:*) archhost=${archive%%:*} archpath=${archive#*:} ;; | |
69 | *) unset archhost; archpath=$archive ;; | |
70 | esac | |
71 | ||
72 | archdo () { | |
73 | op=$1; shift | |
74 | case ${archhost+t} in | |
75 | t) | |
76 | qq= | |
77 | for a in "$@"; do | |
78 | qq="${qq:+$qq }'${a//\'/"'\\''"}'" #" # emacs is confused | |
79 | done | |
80 | "$op" ssh "$archhost" "$qq" | |
81 | ;; | |
82 | *) | |
83 | "$op" "$@" | |
84 | ;; | |
85 | esac | |
86 | } | |
87 | archrun () { archdo run "$@"; } | |
88 | ||
89 | check () { | |
90 | while :; do | |
91 | any=nil | |
92 | for i in "$tmp"/*; do | |
93 | if [ -f "$i/dest" ]; then | |
94 | read dest <"$i/dest"; any=t | |
95 | mv "$i/dest" "$i/dest.seen" | |
96 | (info "copy $i/iso -> $dest" | |
97 | case $dest in | |
98 | */*) dir=${dest%/*} ;; | |
99 | *) dir= ;; | |
100 | esac | |
101 | archrun mkdir -p "$archpath${dir:+/$dir}" | |
3eab0d69 | 102 | run rsync -svPSW "$i/iso" "$archive/$dest" |
7fbe0fb9 MW |
103 | run rm -rf "$i") || : |
104 | fi | |
105 | done | |
106 | case $any in nil) break ;; esac | |
107 | done | |
108 | } | |
109 | ||
110 | case $listen in | |
111 | nil) | |
112 | check | |
113 | ;; | |
114 | t) | |
115 | rm -f "$tmp/upload.newpipe" | |
116 | mkfifo "$tmp/upload.newpipe" | |
117 | mv "$tmp/upload.newpipe" "$tmp/upload.wakeup" | |
118 | while read line <&3; do | |
119 | case $line in | |
120 | check) check ;; | |
121 | quit) info "quitting on user request"; break ;; | |
122 | *) warn "unknown command \`$line'" ;; | |
123 | esac | |
124 | done 3<>"$tmp/upload.wakeup" | |
125 | rm -f "$tmp/upload.wakeup" "$tmp/upload.lock" | |
126 | ;; | |
127 | esac |