+
+ restore_terminal_title
+}
+
+# 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="$( \cd "$(\dirname "$dir")" && /bin/pwd )"
+ local tempfile=$(mktemp /tmp/zz_checkins.XXXXXX)
+ echo >$tempfile
+ local additional_filter
+ 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
+
+ # see if they've warned us not to try checking in within vendor hierarchies.
+ if [ ! -z "NO_CHECKIN_VENDOR" ]; then
+ sed -i -e '/.*\/vendor\/.*/d' "$tempfile"
+ fi
+
+ local sortfile=$(mktemp /tmp/zz_checkin_sort.XXXXXX)
+ sort <"$tempfile" >"$sortfile"
+ \rm "$tempfile"
+ echo "$sortfile"
+}
+
+# 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_revctrl_action_on_file()
+{
+ local tempfile="$1"; shift
+ local action="$1"; shift
+
+ save_terminal_title
+
+ while read -u 3 dirname; do
+ if [ -z "$dirname" ]; then continue; fi
+ pushd "$dirname" &>/dev/null
+ echo "[$(pwd)]"
+ $action .
+ test_or_die "performing action $action on: $(pwd)"
+ sep 28
+ popd &>/dev/null
+ done 3<"$tempfile"
+
+ restore_terminal_title
+
+ rm $tempfile