--- contrib/client-side/asvn.orig Tue Jun 15 06:02:44 2004 +++ contrib/client-side/asvn Mon Sep 11 17:07:04 2006 @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/local/bin/bash #------------------------------------------------------------------------- # Author: Ross Mark (rossm@controllingedge.com.au) # Date: Tue Mar 11 10:02:57 EST 2003 @@ -46,7 +46,7 @@ TMPFILE2=/tmp/asvn.tmp2.$$ PCWD=`/bin/pwd` SKIPSVN='\( -name .svn -prune -false \)' -PRINTDETAILS="-printf \"file='%p' mode=%m user=%u(%U) group=%g(%G)\n\"" +PRINTDETAILS="-printf \"file='%p' mode=%m user=(%U) group=(%G)\n\"" trap cleanup 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @@ -58,7 +58,8 @@ function basedirname() { refname="$1" - dir="`dirname $2`" + shift + dir="`dirname \"$*\"`" ref=`expr "$dir" : "$refname/\(.*\)"` if [ -z "$ref" ] then @@ -105,10 +106,10 @@ function recorddirinfo { - eval "find $PCWD $SKIPSVN -o \( -type d ! -name .svn -print \)" |while read dirlist + eval "gfind \"$PCWD\" $SKIPSVN -o \( -type d ! -name .svn -print \)" |while read dirlist do - updatedirsymlinks $1 $dirlist - updatedirdevices $1 $dirlist + updatedirsymlinks $1 "$dirlist" + updatedirdevices $1 "$dirlist" done } @@ -126,15 +127,15 @@ # # Obtain the list of devices in this directory # - find "$dir" \( \( -type b -o -type c -o -type p \) -print \) -o -type d ! -name "`basename $dir`" -prune | while read file + gfind "$dir" \( \( -type b -o -type c -o -type p \) -print \) -o -type d ! -name "`basename \"$dir\"`" -prune | while read file do - echo -n `find $file -printf "file='%f' mode=%m user=%u(%U) group=%g(%G)"` - [ -b $file ] && echo -n ' type=b' - [ -c $file ] && echo -n ' type=c' - [ -p $file ] && echo ' type=p' - if [ -b $file -o -c $file ] + echo -n `gfind "$file" -printf "file='%f' mode=%m user=%u(%U) group=%g(%G)"` + [ -b "$file" ] && echo -n ' type=b' + [ -c "$file" ] && echo -n ' type=c' + [ -p "$file" ] && echo ' type=p' + if [ -b "$file" -o -c "$file" ] then - ls -l $file | + ls -l "$file" | sed -e 's/^[-lcpbrdwxXstugoTS]* *[0-9] [^ ]* *[^ ]* *\([0-9]*\), *\([0-9]*\) .*/ major=\1 minor=\2/' fi # In this case file is the full path. @@ -145,7 +146,7 @@ # # Obtain the currently defined devices # - $SVN propget $DEV_PROP $dir >$TMPFILE1 + $SVN propget $DEV_PROP "$dir" >$TMPFILE1 # # If the two list are the same then there is nothing to do. @@ -161,7 +162,7 @@ if [ "$CHECKIN" = "true" ] then # Add the current devices to the property - $SVN propset $DEV_PROP $dir -F $TMPFILE + $SVN propset $DEV_PROP "$dir" -F $TMPFILE else # Delete all the unwanted devices ie not in TMPFILE1 cat $TMPFILE |while read line @@ -169,8 +170,8 @@ file=`expr "$line" : "file='\(.*\)' mode"` if ! grep -q "file='$file'" $TMPFILE1 then - rm $file - deleteignorefile $file + rm "$file" + deleteignorefile "$file" fi done fi @@ -178,7 +179,7 @@ # There are no devices in this directory if [ "$CHECKIN" = "true" ] then - $SVN propdel $DEV_PROP $dir + $SVN propdel $DEV_PROP "$dir" fi fi @@ -194,10 +195,10 @@ grep -q "$info" $TMPFILE && continue # This line still matches file=`expr "$info" : "file='\(.*\)' "` mode=`expr "$info" : ".*' mode=\([0-9]*\) "` - user=`expr "$info" : ".* user=\([^(]*\)("` - uid=`expr "$info" : ".* user=[^(]*(\([0-9]*\) "` - group=`expr "$info" : ".* group=\([^(]*\)("` - gid=`expr "$info" : ".* group=[^(]*(\([0-9]*\) "` +# user=`expr "$info" : ".* user=\([^(]*\)("` + uid=`expr "$info" : ".* user=[^(]*(\([0-9]*\)"` +# group=`expr "$info" : ".* group=\([^(]*\)("` + gid=`expr "$info" : ".* group=[^(]*(\([0-9]*\)"` type=`expr "$info" : ".* type=\(.\)"` major=`expr "$info" : ".* major=\([0-9]*\)"` minor=`expr "$info" : ".* minor=\([0-9]*\)"` @@ -205,10 +206,11 @@ # This file is either missing or wrong # Delete the old and create it anew. # - rm -f $dir/$file - mknod --mode=$mode $dir/$file $type $major $minor - chown $user:$group $dir/$file - addignorefile $dir/$file + rm -f "$dir/$file" + mknod --mode=$mode "$dir/$file" $type $major $minor +# chown $user:$group $dir/$file + chown $uid:$gid "$dir/$file" + addignorefile "$dir/$file" done fi } @@ -228,7 +230,7 @@ # # Obtain the list of symlinks in this directory # - find "$dir" \( -type l -printf "file='%f' dest='%l'\n" \) -o -type d ! -name "`basename $dir`" -prune | + gfind "$dir" \( -type l -printf "file='%f' dest='%l'\n" \) -o -type d ! -name "`basename \"$dir\"`" -prune | sort >$TMPFILE # @@ -243,7 +245,7 @@ # # Obtain the currently defined symlinks # - $SVN propget $SYM_PROP $dir >$TMPFILE1 + $SVN propget $SYM_PROP "$dir" >$TMPFILE1 # # If the two list are the same then there is nothing to do. @@ -259,7 +261,7 @@ if [ "$CHECKIN" = "true" ] then # Add the current symlinks to the property - $SVN propset $SYM_PROP $dir -F $TMPFILE + $SVN propset $SYM_PROP "$dir" -F $TMPFILE else # Delete all the unwanted symlinks cat $TMPFILE |while read line @@ -268,8 +270,8 @@ efile="`echo $file |sed -e 's!\([\[\(\$]\)!\\\\\1!g'`" if ! grep -q "file='$efile'" $TMPFILE1 then - rm $dir/$file - deleteignorefile $dir/$file + rm "$dir/$file" + deleteignorefile "$dir/$file" fi done fi @@ -277,7 +279,7 @@ # There are no symlinks in this directory if [ "$CHECKIN" = "true" ] then - $SVN propdel $SYM_PROP $dir + $SVN propdel $SYM_PROP "$dir" fi fi @@ -294,10 +296,10 @@ if [ -L $dir/$file ] then - [ "`find $dir/$file -printf '%l'`" = "$dest" ] && continue + [ "`gfind \"$dir/$file\" -printf '%l'`" = "$dest" ] && continue fi - rm -f $dir/$file - ln -s $dest $dir/$file + rm -f "$dir/$file" + ln -s $dest "$dir/$file" done fi } @@ -313,37 +315,39 @@ # Find all the directories and files cp /dev/null $TMPFILE - eval "find $PCWD $SKIPSVN -o \( \( -type d ! -name .svn \) -o -type f \) $PRINTDETAILS" | while read info + eval "gfind \"$PCWD\" $SKIPSVN -o \( \( -type d ! -name .svn \) -o -type f \) $PRINTDETAILS" | while read info do device=`expr "$info" : "file='\(.*\)' mode"` info=`expr "$info" : "file='.*' \(mode.*\)"` +# echo DEBUG: device vale $device if [ "$PCWD" = "$device" ] then dir="." file="" else - dir="`basedirname $PCWD $device`" - file="`basename $device`" + dir="`basedirname \"$PCWD\" $device`" + file=`basename "$device"` fi # see if the properties have changed. - if [ "`$SVN propget $FILE_PROP $dir/$file`" != "$info" ] + if [ "`$SVN propget $FILE_PROP \"$dir/$file\"`" != "$info" ] then if [ "$CHECKIN" = "true" ] then - $SVN propset $FILE_PROP "$info" $dir/$file + $SVN propset $FILE_PROP "$info" "$dir/$file" else info=`$SVN propget $FILE_PROP "$dir/$file"` mode=`expr "$info" : "mode=\([0-9]*\) "` - user=`expr "$info" : ".* user=\([^(]*\)("` - uid=`expr "$info" : ".* user=[^(]*(\([0-9]*\) "` - group=`expr "$info" : ".* group=\([^(]*\)("` - gid=`expr "$info" : ".* group=[^(]*(\([0-9]*\) "` - if [ "$user" = "" -o "$group" = "" -o "$mode" = "" ] +# user=`expr "$info" : ".* user=\([^(]*\)("` + uid=`expr "$info" : ".* user=[^(]*(\([0-9]*\)"` +# group=`expr "$info" : ".* group=\([^(]*\)("` + gid=`expr "$info" : ".* group=[^(]*(\([0-9]*\)"` + if [ "$uid" = "" -o "$gid" = "" -o "$mode" = "" ] then echo "property $FILE_PROP not set for $dir/$file" else - chown $user:$group $dir/$file - chmod $mode $dir/$file +# chown $user:$group $dir/$file + chown $uid:$gid "$dir/$file" + chmod $mode "$dir/$file" fi fi fi @@ -364,8 +368,9 @@ if [ "$CHDIR" = "true" ] then shift $(($# -1)) - cd $1 - PCWD="$PCWD/$1" + WD=`echo $1 | sed "s/\/$//" | awk -F "/" '{print $(NF)}' ` + cd $WD + PCWD="$PCWD/$WD" fi recorddirinfo recordpermissions @@ -382,7 +387,7 @@ [ "$ACTION" = "pre" ] && pre_checkin $@ -$SVN $@ +$SVN "$@" [ $? = 0 -a "$ACTION" = "post" ] && post_checkout $@