# these are helper functions for doing localized revision control.
# this script should be sourced into other scripts that use it.
+# the maximum depth that the recursive functions will try to go below the starting directory.
+export MAX_DEPTH=5
+
+#hmmm: re-address this code, since it doesn't make a lot of sense to me right now...
# one unpleasantry to take care of first; cygwin barfs aggressively if the TMP directory
-# is a DOS path, but we need it to be a DOS path for our XSEDE testing, so that blows.
+# is a DOS path, but we need it to be a DOS path for our GFFS testing, so that blows.
# to get past this, TMP gets changed below to a hopefully generic and safe place.
if [[ "$TMP" =~ .:.* ]]; then
export TMP=/tmp/rev_control_$USER
fi
if [ ! -d "$TMP" ]; then
- mkdir $TMP
+ mkdir -p $TMP
fi
if [ ! -d "$TMP" ]; then
echo "Could not create the temporary directory TMP in: $TMP"
i=0
while read line; do
i=$((i+1))
- if [ $i -le 3 ]; then
+ if [ $i -le 5 ]; then
echo -n "$line "
else
echo $line
git pull 2>&1 | grep -v "X11 forwarding request failed" | squash_first_few_crs
retval=${PIPESTATUS[0]}
else
+ # this is not an error necessarily; we'll just pretend they planned this.
echo no repository in $directory
- retval=1
fi
popd &>/dev/null
return $retval
{
local dir="$1"; shift
pushd "$dir" &>/dev/null
- local dirhere="$(\pwd)"
+ local dirhere="$( \cd "$(\dirname "$dir")" && /bin/pwd )"
local tempfile=$(mktemp /tmp/zz_rev_checkin.XXXXXX)
echo >$tempfile
- find $dirhere -maxdepth 5 -type d -iname ".svn" -exec echo {}/.. ';' >>$tempfile
- find $dirhere -maxdepth 5 -type d -iname ".git" -exec echo {}/.. ';' >>$tempfile
+ find $dirhere -follow -maxdepth $MAX_DEPTH -type d -iname ".svn" -exec echo {}/.. ';' >>$tempfile 2>/dev/null
+ find $dirhere -follow -maxdepth $MAX_DEPTH -type d -iname ".git" -exec echo {}/.. ';' >>$tempfile 2>/dev/null
# CVS is not well behaved like git and (now) svn, and we seldom use it anymore.
popd &>/dev/null
local sortfile=$(mktemp /tmp/zz_rev_checkin_sort.XXXXXX)
# iterates across a list of directories contained in a file (first parameter).
# on each directory name, it performs the action (second parameter) provided.
-function perform_action_on_file()
+function perform_revctrl_action_on_file()
{
local tempfile="$1"; shift
local action="$1"; shift
- dirs=($(cat $tempfile))
-
- for dirname in ${dirs[@]}; do
+ while read -u 3 dirname; do
if [ -z "$dirname" ]; then continue; fi
- pushd $dirname &>/dev/null
+ pushd "$dirname" &>/dev/null
echo "[$(pwd)]"
$action .
echo "======="
popd &>/dev/null
- done
+ done 3<"$tempfile"
rm $tempfile
}