move promote_pipe_return to core functions
[feisty_meow.git] / scripts / rev_control / version_control.sh
index 62165d5429628f5d72919f407f0a72c03320c30b..fad415785f99d2c46294126a6994393b82d43db3 100644 (file)
@@ -45,10 +45,10 @@ fi
 
 #hmmm: move this to core
 # this makes the status of pipe N into the main return value.
-function promote_pipe_return()
-{
-  ( exit ${PIPESTATUS[$1]} )
-}
+#function promote_pipe_return()
+#{
+#  ( exit ${PIPESTATUS[$1]} )
+#}
 
 ##############
 
@@ -76,39 +76,50 @@ fi
 ##############
 
 # checks the directory provided into the revision control system repository it belongs to.
-function do_checkin()
+function do_revctrl_checkin()
 {
   local directory="$1"; shift
 
-  save_terminal_title
-
   # make a nice echoer since we want to use it inside conditions below.
   local nicedir="$directory"
   if [ $nicedir == "." ]; then
     nicedir=$(\pwd)
   fi
-  local blatt="echo -n checking in '$nicedir'...  "
+  local blatt="echo -ne \nchecking in '$nicedir'...  "
 
-  do_update "$directory"
-  exit_on_error "repository update--this should be fixed before check-in."
+#hmmm: we don't do a puff out on this directory to carefully update the git repo.  is there a good reason why?
+#  we know we at least have to get the remote version synched up to avoid severe tire damage, so it's sensible at
+#  least to call do_revctrl_simple_update, but is there a reason not to call the careful git update instead?
+#AHA, below we do call a careful git update, which is at least partially redundant with calling do_revctrl_simple_update here.
+# how about pushing the do_revctrl_simple_update down into the two cases that use it and just not calling it for the git case?
+#hmmm: trying the better seeming approach below now.
 
   pushd "$directory" &>/dev/null
   if [ -f ".no-checkin" ]; then
     echo "skipping check-in due to presence of .no-checkin sentinel file."
   elif [ -d "CVS" ]; then
     if test_writeable "CVS"; then
+      do_revctrl_simple_update "$directory"
+      exit_on_error "updating repository; this issue should be fixed before check-in."
       $blatt
       cvs ci .
       exit_on_error "cvs checkin"
     fi
   elif [ -d ".svn" ]; then
     if test_writeable ".svn"; then
+      do_revctrl_simple_update "$directory"
+      exit_on_error "updating repository; this issue should be fixed before check-in."
       $blatt
       svn ci .
       exit_on_error "svn checkin"
     fi
   elif [ -d ".git" ]; then
     if test_writeable ".git"; then
+
+#hmmm: trying this in front; i have a bad feeling we used to do it like this and there were problems from not committing first!
+# a new set of steps we have to take to make sure the branch integrity is good.
+do_revctrl_careful_update "$(\pwd)"
+
       $blatt
 
       # put all changed and new files in the commit.  not to everyone's liking.
@@ -116,6 +127,8 @@ function do_checkin()
       promote_pipe_return 0
       exit_on_error "git add all new files"
 
+#hmmm: was there a reason to commit before doing the puffing out careful git update?  i seem to think there was.
+# would be nice to remember that or recapture the reason, so we can be sure we're not committing too early.
       # see if there are any changes in the local repository.
       if ! git diff-index --quiet HEAD --; then
         # tell git about all the files and get a check-in comment.
@@ -135,7 +148,7 @@ function do_checkin()
       fi
 
       # a new set of steps we have to take to make sure the branch integrity is good.
-      do_careful_git_update "$(\pwd)"
+#hold      do_revctrl_careful_update "$(\pwd)"
 
       # we continue on to the push, even if there were no changes this time, because
       # there could already be committed changes that haven't been pushed yet.
@@ -148,22 +161,18 @@ function do_checkin()
     fi
   else
     # nothing there.  it's not an error though.
-    log_feisty_meow_event no repository in $directory
+    log_feisty_meow_event "no repository in $directory"
   fi
   popd &>/dev/null
 
-  restore_terminal_title
-
   return 0
 }
 
 # shows the local changes in a repository.
-function do_diff
+function do_revctrl_diff
 {
   local directory="$1"; shift
 
-  save_terminal_title
-
   pushd "$directory" &>/dev/null
 
   # only update if we see a repository living there.
@@ -180,18 +189,14 @@ function do_diff
 
   popd &>/dev/null
 
-  restore_terminal_title
-
   return 0
 }
 
 # reports any files that are not already known to the upstream repository.
-function do_report_new
+function do_revctrl_report_new
 {
   local directory="$1"; shift
 
-  save_terminal_title
-
   pushd "$directory" &>/dev/null
 
   # only update if we see a repository living there.
@@ -208,8 +213,6 @@ function do_report_new
 
   popd &>/dev/null
 
-  restore_terminal_title
-
   return 0
 }
 
@@ -219,8 +222,6 @@ function checkin_list()
   # make the list of directories unique.
   local list="$(uniquify $*)"
 
-  save_terminal_title
-
   # turn repo list back into an array.
   eval "repository_list=( ${REPOSITORY_LIST[*]} )"
 
@@ -231,62 +232,18 @@ function checkin_list()
     if [[ $outer =~ /.* ]]; then
       # yep, this path is absolute.  just handle it directly.
       if [ ! -d "$outer" ]; then continue; fi
-      do_checkin "$outer"
+      do_revctrl_checkin "$outer"
       exit_on_error "running check-in (absolute) on path: $outer"
-      sep 28
     else
       for inner in $list; do
         # add in the directory component to see if we can find the folder.
         local path="$inner/$outer"
         if [ ! -d "$path" ]; then continue; fi
-        do_checkin "$path"
+        do_revctrl_checkin "$path"
         exit_on_error "running check-in (relative) on path: $path"
-        sep 28
       done
     fi
   done
-
-  restore_terminal_title
-}
-
-# does a careful update on all the folders in the specified list;
-# it looks in the REPOSITORY_LIST for those names and updates them.
-# this is just like checkout_list, but it's for the puffing up action
-# we need to do on git.
-function puff_out_list()
-{
-  # make the list of directories unique.
-  local list="$(uniquify $*)"
-
-  save_terminal_title
-
-  # turn repo list back into an array.
-  eval "repository_list=( ${REPOSITORY_LIST[*]} )"
-
-  local outer inner
-
-#hmmm: once again, seeing some reusable code in this loop...
-  for outer in "${repository_list[@]}"; do
-    # check the repository first, since it might be an absolute path.
-    if [[ $outer =~ /.* ]]; then
-      # yep, this path is absolute.  just handle it directly.
-      if [ ! -d "$outer" ]; then continue; fi
-      do_careful_git_update "$outer"
-      exit_on_error "running puff-out (absolute) on path: $outer"
-      sep 28
-    else
-      for inner in $list; do
-        # add in the directory component to see if we can find the folder.
-        local path="$inner/$outer"
-        if [ ! -d "$path" ]; then continue; fi
-        do_careful_git_update "$path"
-        exit_on_error "running puff-out (relative) on path: $path"
-        sep 28
-      done
-    fi
-  done
-
-  restore_terminal_title
 }
 
 #hmmm: below functions are git specific and should be named that way.
@@ -362,7 +319,7 @@ function show_branch_conditionally()
 # the git update process just gets more and more complex when you bring in
 # branches, so we've moved this here to avoid having a ton of code in the
 # other methods.
-function do_careful_git_update()
+function do_revctrl_careful_update()
 {
   local directory="$1"; shift
   pushd "$directory" &>/dev/null
@@ -371,10 +328,20 @@ function do_careful_git_update()
   if [ ! -d ".git" ]; then
     # not a git project, so just boil this down to a getem action.
     popd &>/dev/null
-    do_update "$directory"
+    log_feisty_meow_event "skipping careful part and doing simple update on non-git repository: $directory"
+    do_revctrl_simple_update "$directory"
     return $?
   fi
 
+#hmmm: another piece of reusable code, to process the directory for printing.
+  # make a nice echoer since we want to use it inside conditions below.
+  local nicedir="$directory"
+  if [ $nicedir == "." ]; then
+    nicedir=$(\pwd)
+  fi
+  local blatt="echo -e \ncarefully retrieving '$nicedir'..."
+  $blatt
+
   local this_branch="$(my_branch_name)"
 
   show_branch_conditionally "$this_branch"
@@ -427,18 +394,16 @@ function do_careful_git_update()
 }
 
 # gets the latest versions of the assets from the upstream repository.
-function do_update()
+function do_revctrl_simple_update()
 {
   directory="$1"; shift
 
-  save_terminal_title
-
   # make a nice echoer since we want to use it inside conditions below.
   local nicedir="$directory"
   if [ $nicedir == "." ]; then
     nicedir=$(\pwd)
   fi
-  local blatt="echo retrieving '$nicedir'..."
+  local blatt="echo -e \nretrieving '$nicedir'..."
 
   pushd "$directory" &>/dev/null
   if [ -d "CVS" ]; then
@@ -469,8 +434,6 @@ function do_update()
   fi
   popd &>/dev/null
 
-  restore_terminal_title
-
   return 0
 }
 
@@ -479,8 +442,6 @@ function checkout_list()
 {
   local list="$(uniquify $*)"
 
-  save_terminal_title
-
   # turn repo list back into an array.
   eval "repository_list=( ${REPOSITORY_LIST[*]} )"
 
@@ -491,22 +452,52 @@ function checkout_list()
     if [[ $outer =~ /.* ]]; then
       # yep, this path is absolute.  just handle it directly.
       if [ ! -d "$outer" ]; then continue; fi
-      do_update $outer
+      do_revctrl_simple_update $outer
       exit_on_error "running update on: $path"
-      sep 28
     else
       for inner in $list; do
         # add in the directory component to see if we can find the folder.
         local path="$inner/$outer"
         if [ ! -d "$path" ]; then continue; fi
-        do_update $path
+        do_revctrl_simple_update $path
         exit_on_error "running update on: $path"
-        sep 28
       done
     fi
   done
+}
+
+# does a careful update on all the folders in the specified list;
+# it looks in the REPOSITORY_LIST for those names and updates them.
+# this is just like checkout_list, but it's for the puffing up action
+# we need to do on git.
+function puff_out_list()
+{
+  # make the list of directories unique.
+  local list="$(uniquify $*)"
+
+  # turn repo list back into an array.
+  eval "repository_list=( ${REPOSITORY_LIST[*]} )"
+
+  local outer inner
 
-  restore_terminal_title
+#hmmm: once again, seeing some reusable code in this loop...
+  for outer in "${repository_list[@]}"; do
+    # check the repository first, since it might be an absolute path.
+    if [[ $outer =~ /.* ]]; then
+      # yep, this path is absolute.  just handle it directly.
+      if [ ! -d "$outer" ]; then continue; fi
+      do_revctrl_careful_update "$outer"
+      exit_on_error "running puff-out (absolute) on path: $outer"
+    else
+      for inner in $list; do
+        # add in the directory component to see if we can find the folder.
+        local path="$inner/$outer"
+        if [ ! -d "$path" ]; then continue; fi
+        do_revctrl_careful_update "$path"
+        exit_on_error "running puff-out (relative) on path: $path"
+      done
+    fi
+  done
 }
 
 # provides a list of absolute paths of revision control directories
@@ -542,8 +533,6 @@ function perform_revctrl_action_on_file()
   local tempfile="$1"; shift
   local action="$1"; shift
 
-  save_terminal_title
-
   local did_anything=
 
   while read -u 3 dirname; do
@@ -557,7 +546,6 @@ function perform_revctrl_action_on_file()
     # pass the current directory plus the remaining parameters from function invocation.
     $action . 
     exit_on_error "performing action $action on: $(pwd)"
-    sep 28
     popd &>/dev/null
   done 3<"$tempfile"
 
@@ -565,8 +553,6 @@ function perform_revctrl_action_on_file()
     echo "There was nothing to do the action '$action' on."
   fi
 
-  restore_terminal_title
-
   rm "$tempfile"
 }