X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=scripts%2Frev_control%2Fversion_control.sh;h=b28d6f303b7e69fc1edb7daa971e3ecfa8f2c3e7;hb=ba3dab0632f2eedfce6f724d76a9c967ccb9fe90;hp=d1b892e0eb44181637277a702d60eb5e53fbb5cd;hpb=7e7383cf9baf945f6e86af15f59165003eafc803;p=feisty_meow.git diff --git a/scripts/rev_control/version_control.sh b/scripts/rev_control/version_control.sh index d1b892e0..b28d6f30 100644 --- a/scripts/rev_control/version_control.sh +++ b/scripts/rev_control/version_control.sh @@ -3,6 +3,12 @@ # these are helper functions for doing localized revision control. # this script should be sourced into other scripts that use it. +source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh" +source "$FEISTY_MEOW_SCRIPTS/tty/terminal_titler.sh" + +# 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 GFFS testing, so that blows. @@ -13,11 +19,11 @@ 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" - echo "This script will not work properly without an existing TMP directory." + echo "could not create the temporary directory TMP in: $TMP" + echo "this script will not work properly without an existing TMP directory." fi this_host= @@ -103,14 +109,19 @@ function compute_modifier() function do_checkin() { local directory="$1"; shift + + save_terminal_title + do_update "$directory" if [ $? -ne 0 ]; then - echo "Repository update failed; this should be fixed before check-in." + echo "repository update failed; this should be fixed before check-in." return 1 fi pushd "$directory" &>/dev/null - retval=0 # normally successful. - if [ -d "CVS" ]; then + local retval=0 # normally successful. + if [ -f ".no-checkin" ]; then + echo "skipping check-in due to presence of .no-checkin sentinel file." + elif [ -d "CVS" ]; then cvs ci . retval=$? elif [ -d ".svn" ]; then @@ -131,14 +142,20 @@ function do_checkin() retval=1 fi popd &>/dev/null + + restore_terminal_title + return $retval } function do_diff { local directory="$1"; shift + + save_terminal_title + pushd "$directory" &>/dev/null - retval=0 # normally successful. + local retval=0 # normally successful. # only update if we see a repository living there. if [ -d ".svn" ]; then @@ -150,29 +167,48 @@ function do_diff fi popd &>/dev/null + + restore_terminal_title + return $retval } function do_report_new { local directory="$1"; shift + + save_terminal_title + pushd "$directory" &>/dev/null - retval=0 # normally successful. + local retval=0 # normally successful. # only update if we see a repository living there. - if [ -d ".svn" ]; then + if [ -f ".no-checkin" ]; then + echo "skipping reporting due to presence of .no-checkin sentinel file." + elif [ -d ".svn" ]; then # this action so far only makes sense and is needed for svn. bash $FEISTY_MEOW_SCRIPTS/rev_control/svnapply.sh \? echo + retval=$? + elif [ -d ".git" ]; then + git status -u + retval=$? fi popd &>/dev/null + + restore_terminal_title + return $retval } # checks in all the folders in a specified list. function checkin_list() { - local list=$* + # make the list of directories unique. + local list="$(uniquify $*)" + + save_terminal_title + for i in $list; do # turn repo list back into an array. eval "repository_list=( ${REPOSITORY_LIST[*]} )" @@ -182,20 +218,23 @@ function checkin_list() if [ ! -d "$j" ]; then continue; fi echo "checking in '$j'..." do_checkin $j + sep 7 done done + + restore_terminal_title } # takes out the first few carriage returns that are in the input. function squash_first_few_crs() { i=0 - while read line; do + while read input_text; do i=$((i+1)) if [ $i -le 5 ]; then - echo -n "$line " + echo -n "$input_text " else - echo $line + echo $input_text fi done if [ $i -le 3 ]; then @@ -208,8 +247,10 @@ function squash_first_few_crs() function do_update() { directory="$1"; shift - # plan on success for now. - retval=0 + + save_terminal_title + + local retval=0 # plan on success for now. pushd "$directory" &>/dev/null if [ -d "CVS" ]; then cvs update . | squash_first_few_crs @@ -225,12 +266,19 @@ function do_update() echo no repository in $directory fi popd &>/dev/null + + restore_terminal_title + return $retval } # gets all the updates for a list of folders under revision control. -function checkout_list { - list=$* +function checkout_list() +{ + local list="$(uniquify $*)" + + save_terminal_title + for i in $list; do # turn repo list back into an array. eval "repository_list=( ${REPOSITORY_LIST[*]} )" @@ -239,7 +287,7 @@ function checkout_list { j="$i/$j" if [ ! -d $j ]; then if [ ! -z "$SHELL_DEBUG" ]; then - echo "No directory called $j exists." + echo "no directory called $j exists." fi continue fi @@ -248,6 +296,8 @@ function checkout_list { do_update $j done done + + restore_terminal_title } # provides a list of absolute paths of revision control directories @@ -256,14 +306,14 @@ function generate_rev_ctrl_filelist() { local dir="$1"; shift pushd "$dir" &>/dev/null - local dirhere="$( \cd "$(\dirname "$dir")" && \pwd )" - local tempfile=$(mktemp /tmp/zz_rev_checkin.XXXXXX) + local dirhere="$( \cd "$(\dirname "$dir")" && /bin/pwd )" + local tempfile=$(mktemp /tmp/zz_checkins.XXXXXX) echo >$tempfile - find $dirhere -follow -maxdepth 5 -type d -iname ".svn" -exec echo {}/.. ';' >>$tempfile 2>/dev/null - find $dirhere -follow -maxdepth 5 -type d -iname ".git" -exec echo {}/.. ';' >>$tempfile 2>/dev/null + 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) + local sortfile=$(mktemp /tmp/zz_checkin_sort.XXXXXX) sort <"$tempfile" >"$sortfile" \rm "$tempfile" echo "$sortfile" @@ -273,18 +323,25 @@ function generate_rev_ctrl_filelist() # on each directory name, it performs the action (second parameter) provided. function perform_revctrl_action_on_file() { + +#hmmm: this doesn't capture any error returns! + 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 . - echo "=======" + sep 7 popd &>/dev/null done 3<"$tempfile" + restore_terminal_title + rm $tempfile }