From: Chris Koeritz Date: Sat, 24 Aug 2013 17:11:15 +0000 (-0400) Subject: updated to recurse for checkin and diff, but not super far. just allows us to X-Git-Tag: 2.140.90~949 X-Git-Url: https://feistymeow.org/gitweb/?a=commitdiff_plain;h=402aa5fff8715eac34d9e7d45402a46013a1388b;p=feisty_meow.git updated to recurse for checkin and diff, but not super far. just allows us to not worry about sub-levels that are also repositories. depth 3 right now. --- diff --git a/scripts/rev_control/rev_checkin.sh b/scripts/rev_control/rev_checkin.sh index 15d86683..8bf58db8 100644 --- a/scripts/rev_control/rev_checkin.sh +++ b/scripts/rev_control/rev_checkin.sh @@ -11,16 +11,7 @@ fi source "$FEISTY_MEOW_SCRIPTS/rev_control/version_control.sh" -pushd "$dir" &>/dev/null - -for i in * ; do - if [ -d "$i" ]; then - echo "[$i]" - do_checkin $i - echo "=======" - fi -done - -popd &>/dev/null +tempfile=$(generate_rev_ctrl_filelist) +perform_action_on_file "$tempfile" do_checkin diff --git a/scripts/rev_control/rev_diff.sh b/scripts/rev_control/rev_diff.sh index f197b3d9..8682714a 100644 --- a/scripts/rev_control/rev_diff.sh +++ b/scripts/rev_control/rev_diff.sh @@ -9,24 +9,31 @@ if [ -z "$dir" ]; then dir=. fi -pushd "$dir" &>/dev/null +source "$FEISTY_MEOW_SCRIPTS/rev_control/version_control.sh" -for i in * ; do - if [ -d "$i" ]; then - echo "[$i]" - pushd $i &>/dev/null - # only update if we see a repository living there. - if [ -d ".svn" ]; then - svn diff . - elif [ -d ".git" ]; then - git diff - elif [ -d "CVS" ]; then - cvs diff . - fi - popd &>/dev/null - echo "=======" - fi -done +tempfile=$(generate_rev_ctrl_filelist) -popd &>/dev/null +perform_action_on_file "$tempfile" do_diff + + +#pushd "$dir" &>/dev/null +# +#for i in * ; do +# if [ -d "$i" ]; then +# echo "[$i]" +# pushd $i &>/dev/null +# # only update if we see a repository living there. +# if [ -d ".svn" ]; then +# svn diff . +# elif [ -d ".git" ]; then +# git diff +# elif [ -d "CVS" ]; then +# cvs diff . +# fi +# popd &>/dev/null +# echo "=======" +# fi +#done +# +#popd &>/dev/null diff --git a/scripts/rev_control/version_control.sh b/scripts/rev_control/version_control.sh index daaa0924..4da2c6a7 100644 --- a/scripts/rev_control/version_control.sh +++ b/scripts/rev_control/version_control.sh @@ -89,7 +89,8 @@ function compute_modifier() if [ "$home_system" == "true" ]; then if [ "$in_or_out" == "out" ]; then # need the right home machine for modifier when checking out. - modifier="svn://shaggy/" +#huhhh? modifier="svn://shaggy/" + modifier= else # no modifier for checkin. modifier= @@ -102,23 +103,54 @@ function do_checkin() { local directory="$1"; shift pushd "$directory" &>/dev/null - if [ -d "CVS" ]; then cvs ci . ; - elif [ -d ".svn" ]; then svn ci . ; + retval=0 # normally successful. + if [ -d "CVS" ]; then + cvs ci . + retval=$? + elif [ -d ".svn" ]; then + svn ci . + retval=$? elif [ -d ".git" ]; then # snag all new files. not to everyone's liking. git add --all . + retval=$? # tell git about all the files and get a check-in comment. git commit . + retval+=$? # upload the files to the server so others can see them. git push 2>&1 | grep -v "X11 forwarding request failed" + retval+=$? else echo unknown repository for $directory... + retval=1 + fi + popd &>/dev/null + return $retval +} + +function do_diff +{ + local directory="$1"; shift + pushd "$directory" &>/dev/null + retval=0 # normally successful. + + # only update if we see a repository living there. + if [ -d ".svn" ]; then + svn diff . + elif [ -d ".git" ]; then + git diff + elif [ -d "CVS" ]; then + cvs diff . fi + popd &>/dev/null + return $retval } + # checks in all the folders in a specified list. -function checkin_list { +function checkin_list() +{ local list=$* for i in $list; do # turn repo list back into an array. @@ -127,11 +159,8 @@ function checkin_list { # add in the directory component. j="$i/$j" if [ ! -d "$j" ]; then continue; fi - -# pushd $j &>/dev/null echo "checking in '$j'..." do_checkin $j -# popd &>/dev/null done done } @@ -194,3 +223,42 @@ function checkout_list { done } +# 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 3 -type d -iname ".svn" -exec echo {}/.. ';' >>$tempfile + find $dirhere -maxdepth 3 -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 +} + +