updated to ignore star for current branch unless at front
[feisty_meow.git] / scripts / rev_control / version_control.sh
index 282dd4d922ff3bd9aa2708bbd34cca9760b679aa..be77a2f6449ff5cfbc9b35bef2da0bc6cc4f071c 100644 (file)
@@ -14,9 +14,12 @@ 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
 
+# the name of our "don't check this stuff in" file.
+export NO_CHECKIN=".no-checkin"
+
 # use our splitter tool for lengthy output if it's available.
-if [ ! -z "$(which splitter 2>/dev/null)" ]; then
-  TO_SPLITTER="$(which splitter)"
+if [ ! -z "$(whichable splitter)" ]; then
+  TO_SPLITTER="$(whichable splitter)"
   # calculate the number of columsn in the terminal.
   cols=$(get_maxcols)
   TO_SPLITTER+=" --maxcol $(($cols - 1))"
@@ -58,10 +61,11 @@ function do_revctrl_checkin()
   # make a nice echoer since we want to use it inside conditions below.
   local nicedir="$directory"
   if [ $nicedir == "." ]; then
-    nicedir=$(\pwd)
+    nicedir="$( \cd . && /bin/pwd )"
+#echo "calculated nicedir as '$nicedir'"
   fi
   local blatt_report="echo -ne \nchecking in '$nicedir'...  "
-  local tell_no_checkin="echo -ne \nskipping check-in due to presence of .no-checkin sentinel file: $nicedir"
+  local tell_no_checkin="echo -ne \nskipping check-in due to presence of $NO_CHECKIN sentinel file: $nicedir"
 
   pushd "$directory" &>/dev/null
 #hmmm: overly elaborate sections below here, but we do want precise handling for git case.
@@ -69,8 +73,8 @@ function do_revctrl_checkin()
     if test_writeable "CVS"; then
       do_revctrl_simple_update "$directory"
       exit_on_error "updating repository; this issue should be fixed before check-in."
-      if [ -f ".no-checkin" ]; then
-#        echo -ne "\nskipping check-in due to presence of .no-checkin sentinel file: $directory"
+      if [ -f "$NO_CHECKIN" ]; then
+#        echo -ne "\nskipping check-in due to presence of $NO_CHECKIN sentinel file: $directory"
         $tell_no_checkin
       else
         $blatt_report
@@ -82,8 +86,8 @@ function do_revctrl_checkin()
     if test_writeable ".svn"; then
       do_revctrl_simple_update "$directory"
       exit_on_error "updating repository; this issue should be fixed before check-in."
-      if [ -f ".no-checkin" ]; then
-#        echo -ne "\nskipping check-in due to presence of .no-checkin sentinel file: $directory"
+      if [ -f "$NO_CHECKIN" ]; then
+#        echo -ne "\nskipping check-in due to presence of $NO_CHECKIN sentinel file: $directory"
         $tell_no_checkin
       else
         $blatt_report
@@ -97,8 +101,8 @@ function do_revctrl_checkin()
       # take steps to make sure the branch integrity is good and we're up to date against remote repos.
       do_revctrl_careful_update "$(\pwd)"
 
-      if [ -f ".no-checkin" ]; then
-#        echo -ne "\nskipping check-in due to presence of .no-checkin sentinel file: $directory"
+      if [ -f "$NO_CHECKIN" ]; then
+#        echo -ne "\nskipping check-in due to presence of $NO_CHECKIN sentinel file: $directory"
         $tell_no_checkin
       else
         $blatt_report
@@ -156,7 +160,7 @@ function do_revctrl_diff
     svn diff .
     exit_on_error "subversion diff"
   elif [ -d ".git" ]; then
-    git diff 
+    git --no-pager diff 
     exit_on_error "git diff"
   elif [ -d "CVS" ]; then
     cvs diff .
@@ -176,8 +180,8 @@ function do_revctrl_report_new
   pushd "$directory" &>/dev/null
 
   # only update if we see a repository living there.
-  if [ -f ".no-checkin" ]; then
-    echo -ne "\nskipping reporting due to presence of .no-checkin sentinel file: $directory"
+  if [ -f "$NO_CHECKIN" ]; then
+    echo -ne "\nskipping reporting due to presence of $NO_CHECKIN sentinel file: $directory"
   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
@@ -240,7 +244,7 @@ function all_branch_names()
 # git repository.
 function my_branch_name()
 {
-  echo "$(git branch -vv | grep '\*' | cut -d ' ' -f2)"
+  echo "$(git branch -vv | grep '^\*' | cut -d ' ' -f2)"
 }
 
 # reports the status of the branch by echoing one of these values:
@@ -260,9 +264,9 @@ function check_branch_state()
 
   local to_return=120  # unknown issue.
 
-  local local_branch=$(git rev-parse @)
+  local local_branch=$(git rev-parse HEAD)
   local remote_branch=$(git rev-parse "$branch")
-  local merge_base=$(git merge-base @ "$branch")
+  local merge_base=$(git merge-base HEAD "$branch")
 
   local to_echo=
   if [ "$local_branch" == "$remote_branch" ]; then
@@ -280,6 +284,30 @@ function check_branch_state()
   return $to_return
 }
 
+# shows the branch currently active in the repository.
+function show_active_branch()
+{
+#hmmm: if no args, assume current dir!?
+
+  for directory in "$@"; do
+    if [ $directory == "." ]; then
+      directory="$( \cd . && /bin/pwd )"
+#echo "calculated directory as '$directory'"
+    fi
+
+    echo -n -e "$(basename $directory) => branch "
+    pushd "$directory" &>/dev/null
+
+#hmmm: if git...
+    git rev-parse --abbrev-ref HEAD
+#hmmm: else OTHERS!!!
+
+    echo
+
+    popd &>/dev/null
+  done
+}
+
 # only shows the branch state if it's not okay.
 # note that this is not the same as a conditional branch (ha ha).
 function show_branch_conditionally()
@@ -357,7 +385,7 @@ function do_revctrl_careful_update()
 
   # now pull down any changes in our own origin in the repo, to stay in synch
   # with any changes from others.
-  git pull --tags --all | $TO_SPLITTER
+  git fetch --tags --all | $TO_SPLITTER
 #is the above really important when we did this branch already in the loop?
 #it does an --all, but is that effective or different?  should we be doing that in above loop?
   promote_pipe_return 0
@@ -481,7 +509,7 @@ function generate_rev_ctrl_filelist()
   pushd "$dir" &>/dev/null
   local dirhere="$( \cd "$(\dirname "$dir")" && /bin/pwd )"
   local tempfile=$(mktemp /tmp/zz_checkins.XXXXXX)
-  echo >$tempfile
+  echo -n >$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
@@ -515,7 +543,7 @@ function perform_revctrl_action_on_file()
     fi
     did_anything=yes
     pushd "$dirname" &>/dev/null
-    echo "[$(pwd)]"
+    echo -n "[$(pwd)]  "
     # pass the current directory plus the remaining parameters from function invocation.
     $action . 
     exit_on_error "performing action $action on: $(pwd)"