#!/bin/sh # $AFresh1: manage_pre,v 1.8 2010/03/10 19:35:40 andrew Exp $ # 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' 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 fi 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 } is_mounted() { /sbin/mount | grep "^${_dev} " } eject() { local _mounted=`is_mounted $_dev` if [ X"" != X"$_mounted" ]; then /bin/sync $SUDO /sbin/umount $_dev && echo Unmounted Pre else echo Not mounted fi $SUDO /bin/eject $_dev 2> /dev/null && echo Ejected Pre $SUDO rmdir $_mount_point 2> /dev/null } mount() { local _mounted=`is_mounted $_dev` if [ X"" != X"$_mounted" ]; then echo Already mounted: ${_mounted%% type*} return fi $SUDO mkdir -p $_mount_point $SUDO chgrp users $_mount_point $SUDO chmod g+w $_mount_point $SUDO /sbin/mount $_dev $_mount_point && echo Mounted Pre on $_mount_point } synchronize() { local _mounted=`is_mounted $_dev` local _did_mount="" if [ X"" == X"$_mounted" ]; then mount || exit 255 _did_mount=1 fi echo Synchronizing Pre #if [ -e /usr/local/bin/rsync ]; then # rsync -rv --delete --size-only --exclude '*.pid' #fi if [ -e /usr/local/bin/unison ]; then /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 echo "Unable to find Pre!" exit 3 fi local _a for _a in $_action; do case "$_a" in mount) mount ;; sync) synchronize ;; eject) eject ;; *) echo "Unrecognized action [$_a]" ;; esac done