=================================================================== RCS file: /cvs/palm/manage_pre/manage_pre,v retrieving revision 1.2 retrieving revision 1.9 diff -u -r1.2 -r1.9 --- palm/manage_pre/manage_pre 2009/08/12 21:08:23 1.2 +++ palm/manage_pre/manage_pre 2010/07/12 18:37:52 1.9 @@ -1,41 +1,35 @@ #!/bin/sh -# $Id: manage_pre,v 1.2 2009/08/12 20:08:23 andrew Exp $ +# $AFresh1: manage_pre,v 1.8 2010/03/10 19:35:40 andrew Exp $ -local _pre_label='Pre' -local _ipod_label='iPod' -local _mount_dir='/mnt/pre' -local _name=`basename $0` -local _unison_config='vogonpa' +# Copyright (c) 2010 Andrew Fresh +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +local _pre_id='Palm, Pre, 0000' +local _mount_point='/mnt/pre' +local _unison_config='palm_pre' -local _action="$*" -case "$_name" in - eject_pre) - _action=eject - ;; - sync_pre) - _action=sync - ;; - mount_pre) - _action=mount - ;; -esac - -if [ -z "$_action" ]; then - echo "manage_pre mount|sync|eject" - exit 255 -fi - find_pre() { local _dev=`dmesg | grep 'Palm, Pre' | tail -1 | cut -d' ' -f 1` if [ X"$_dev" == X"" ]; then - echo Pre not found! >&2 - exit 1 + echo Pre not found! >&2 + exit 1 fi - local _label=`disklabel ${_dev} 2>/dev/null | awk '/^label:/ { print $2 }'` - if [ X"$_label" != X"$_pre_label" -a X"$_label" != X"$_ipod_label" ]; then - echo "Pre not labeled properly [$_label]" >&2 - exit 2 + local _id=`dmesg | grep "^$_dev at " | tail -1 | sed -e 's/.*.*$//'` + if [ X"$_id" != X"$_pre_id" ]; then + echo "Pre [$_dev] not correct id [$_id]" >&2 + exit 2 fi echo /dev/${_dev}i @@ -49,12 +43,12 @@ local _mounted=`is_mounted $_dev` if [ X"" != X"$_mounted" ]; then /bin/sync - /sbin/umount $_dev && echo Unmounted Pre + $SUDO /sbin/umount $_dev && echo Unmounted Pre else echo Not mounted fi - /bin/eject $_dev 2> /dev/null && echo Ejected Pre - rmdir $_mount_dir 2> /dev/null + $SUDO /bin/eject $_dev 2> /dev/null && echo Ejected Pre + $SUDO rmdir $_mount_point 2> /dev/null } mount() { @@ -63,30 +57,67 @@ echo Already mounted: ${_mounted%% type*} return fi - mkdir -p $_mount_dir - chgrp users $_mount_dir - chmod g+w $_mount_dir - /sbin/mount $_dev $_mount_dir && echo Mounted Pre on $_mount_dir + $SUDO mkdir -p $_mount_point + $SUDO chgrp users $_mount_point + $SUDO chmod g+w $_mount_point + + $SUDO /sbin/mount $_dev $_mount_point 2> /dev/null + local _status=$? + + if [ "$_status" != 0 ]; then + echo -n "Waiting for $_dev to be ready " + while [ "$_status" != 0 ]; do + echo -n . + sleep 1 + $SUDO /sbin/mount $_dev $_mount_point 2> /dev/null + _status=$? + done + echo + fi + echo Mounted Pre on $_mount_point } synchronize() { local _mounted=`is_mounted $_dev` + local _did_mount="" if [ X"" == X"$_mounted" ]; then - echo Not mounted - return 1 + mount || exit 255 + _did_mount=1 fi echo Synchronizing Pre #if [ -e /usr/local/bin/rsync ]; then - #rsync -rv --delete --size-only --exclude '*.pid' \ - #.backgrounds/vogonpa/ /mnt/pre/wallpapers_mine/ + # rsync -rv --delete --size-only --exclude '*.pid' #fi if [ -e /usr/local/bin/unison ]; then - /usr/local/bin/unison $_unison_config + /usr/local/bin/unison $_unison_config -auto -batch -ui text fi + + if [ ! -z "$_did_mount" ]; then + eject + fi } + +local _action="$*" +local _name=`basename $0` +case "$_name" in + eject_pre) + _action=eject + ;; + sync_pre) + _action=sync + ;; + mount_pre) + _action=mount + ;; +esac + +if [ -z "$_action" ]; then + echo "manage_pre mount|sync|eject" + exit 255 +fi local _dev=`find_pre` if [ X"${_dev}" == X"" -o ! -e $_dev ]; then