+# provides a list of absolute paths of revision control directories
+# that are located under the directory passed as the first parameter.
+function generate_rev_ctrl_filelist()
+{
+ local dir="$1"; shift
+ pushd "$dir" &>/dev/null
+ local dirhere="$(\pwd)"
+ local tempfile=$(mktemp /tmp/zz_rev_checkin.XXXXXX)
+ echo >$tempfile
+ find $dirhere -maxdepth 4 -type d -iname ".svn" -exec echo {}/.. ';' >>$tempfile
+ find $dirhere -maxdepth 4 -type d -iname ".git" -exec echo {}/.. ';' >>$tempfile
+#CVS is not well behaved, and we seldom use it anymore.
+# find $dirhere -maxdepth 3 -type d -iname "CVS" -exec echo {}/.. ';' >>$tempfile
+ popd &>/dev/null
+ echo "$tempfile"
+}
+
+# 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()
+{
+ local tempfile="$1"; shift
+ local action="$1"; shift
+
+ dirs=($(cat $tempfile))
+
+ for dirname in ${dirs[@]}; do
+ if [ -z "$dirname" ]; then continue; fi
+ pushd $dirname &>/dev/null
+ echo "[$(pwd)]"
+ $action .
+ echo "======="
+ popd &>/dev/null
+ done
+
+ rm $tempfile
+}
+
+