27e96e4c383b41a2e84ff3a22aa9831453315c66
4 dev
=${DVDRIP_DEVICE-/dev/dvd}
5 tmp
=${DVDRIP_TMPDIR-${HOME?}/tmp
/dvdrip
}
6 archive
=${DVDRIP_ARCHIVE-jem.distorted.org.uk:/mnt/dvd/archive}
7 here
=$
(realpath
"$0"); here
=${here%/*}
8 : ${DVD_SECTOR_COPY=$here/dvd-sector-copy.$(uname -m)}
9 : ${DVDRIP_UPLOAD=$here/dvdrip-upload}
10 backup
=nil eject
=nil force
=nil verbose
=nil bogus
=nil
; unset dir sub n label
13 usage: $prog [-befv] [-D DEV] [-a ARCH] [-d DIR]
14 [-l LABEL] [-n N] [-s SUB] [-t TMP] TITLE
17 while getopts "hD:a:bd:efl:n:s:t:v" opt
; do
34 shift $
(( $OPTIND - 1 ))
39 case $bogus in t
) usage
>&2; exit 2 ;; esac
40 case $verbose in t
) set -x
;; esac
42 *:*) archhost
=${archive%%:*} archpath
=${archive#*:} ;;
43 *) unset archhost
; archpath
=$archive ;;
48 echo "$(tput bold; tput setaf $colour)$message$(tput sgr0; tput op)"
50 fail
() { notify
1 "!!! $*"; exit 2; }
51 warn
() { notify
5 "??? $*"; }
52 info
() { notify
6 "--- $*"; }
55 set +e
; nice
"$@"; rc
=$?
; set -e
57 run
() { run_setrc
"$@"; case $rc in 0) ;; *) fail
"$1: exit $rc" ;; esac; }
65 qq
="${qq:+$qq }'${a//\'/"'\\''"}'" #" # emacs is confused
67 "$op" ssh "$archhost" "$qq"
74 archrun
() { archdo run
"$@"; }
76 case ${dir+t},${n+t} in
78 n
=$
(printf "%02d" "$n")
81 echo >&2 "$prog: must specify both directory and disc number, or neither"
87 tr "[:lower:]" "[:upper:]" |
88 tr -Cs
"[:alnum:]_\n" "[-*]" |
94 case ${label+t},${dir+t} in
96 ,) label
=$
(printf "%s" "$title" | hack_label
) ;;
97 ,t
) label
=$
(printf "%s_%s" "$dir" "$n" | hack_label
) ;;
99 len
=$
(printf "%s" "$label" |
wc -c
)
100 if [ $len -gt
32 ]; then echo >&2 "$prog: label too long"; exit 2; fi
104 t
) echo >&2 "$prog: label only meaningful to \`dvdbackup'"; exit 2 ;;
110 t
) tag
="${dir}_${n}_${title}" out
="$dir/$n. $title" ;;
111 *) tag
=$title out
=$title ;;
114 archdo run_setrc
test -f
"$archpath${sub+/$sub}/$out.iso"
116 0,nil
) fail
"output file already exists" ;;
117 0,t
) warn
"output file already exists; will overwrite" ;;
123 if [ ! -d
"$tmp/$tag/rip" ]; then
124 rm -rf
"$tmp/$tag/rip.new"
125 run dvdbackup
-Mp
-i
"$dev" -o
"$tmp/$tag" -n
"rip.new"
126 run
mv "$tmp/$tag/rip.new" "$tmp/$tag/rip"
128 if [ ! -f
"$tmp/$tag/iso" ]; then
129 run genisoimage
-quiet
-dvd-video
-udf
-V
"$label" \
130 -o
"$tmp/$tag/iso.new" "$tmp/$tag/rip"
131 run
mv "$tmp/$tag/iso.new" "$tmp/$tag/iso"
135 if [ ! -f
"$tmp/$tag/iso" ]; then
136 run_setrc
"$DVD_SECTOR_COPY" -D
"$dev" -c
-b
"$tmp/$tag/badblocks" -o
"$tmp/$tag/iso.new"
139 run
mv "$tmp/$tag/iso.new" "$tmp/$tag/iso"
142 run
mv "$tmp/$tag/iso.new" "$tmp/$tag/iso"
143 fail
"bad sectors found: check \`$tmp/$tag/iso', run again if ok"
146 fail
"$DVD_SECTOR_COPY: exit $rc"
152 printf "%s\n" "${sub+$sub/}$out.iso" >"$tmp/$tag/dest.new"
153 mv "$tmp/$tag/dest.new" "$tmp/$tag/dest"
155 case $eject in t
) run eject
"$dev" ;; esac