Merge branch 'dev' of feistymeow.org:feisty_meow into dev
[feisty_meow.git] / scripts / rev_control / version_control.sh
index d74fe1bd67c43c713249809e0bcbf0a991cb4b0a..8ec547f35d5e35a992edc28e49be323f8a901990 100644 (file)
@@ -11,6 +11,20 @@ source "$FEISTY_MEOW_SCRIPTS/tty/terminal_titler.sh"
 
 ##############
 
+# check git version to see if we can use autostash.
+# this appears to be an ubuntu issue, where xenial did not provide it even though the
+# feature appeared in git 2.6 and xenial claims it has git version 2.7.4.  eventually,
+# this version test can go away.
+gitvertest="$(git version | sed -e 's/git version [0-9]\.//' | sed -e 's/\.[0-9][0-9]*$//' )"
+if (( $gitvertest >= 11 )); then
+  # auto-stash is not available until 2.6 for git, but ubuntu is misreporting or using a
+  # differing version number somehow.  we are sure autostash was missing on ubuntu xenial
+  # with git 2.7.4 and it's definitely present in zesty with git at 2.11.
+  PULL_ADDITION='--rebase --autostash'
+fi
+
+##############
+
 # the maximum depth that the recursive functions will try to go below the starting directory.
 export MAX_DEPTH=5
 
@@ -379,6 +393,8 @@ function do_careful_git_update()
   show_branch_conditionally "$this_branch"
 
   # this code is now doing what i have to do when i repair the repo.  and it seems to be good so far.
+  # note that we allow the local branch to be merged with its remote counterpart; otherwise we would
+  # miss changes that happened elsewhere which should be seen in our local copy.
   local branch_list=$(all_branch_names)
   local bran
   for bran in $branch_list; do
@@ -392,7 +408,9 @@ function do_careful_git_update()
     remote_branch_info=$(git ls-remote --heads origin $bran 2>/dev/null)
     if [ ! -z "$remote_branch_info" ]; then
       # we are pretty sure the remote branch does exist.
-      git pull --no-ff origin "$bran" | $TO_SPLITTER
+      git pull $PULL_ADDITION origin "$bran" | $TO_SPLITTER
+# we may want to choose to do fast forward, to avoid crazy multiple merge histories
+# without any changes in them.  --no-ff
       promote_pipe_return 0
     fi
     test_or_die "git pull of remote branch: $bran"
@@ -404,7 +422,10 @@ function do_careful_git_update()
 
   # now pull down any changes in our own origin in the repo, to stay in synch
   # with any changes from others.
-  git pull --no-ff --all | $TO_SPLITTER
+  git pull $PULL_ADDITION --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?
+# --no-ff   
   promote_pipe_return 0
   test_or_die "git pulling all upstream"
 
@@ -443,9 +464,10 @@ function do_update()
   elif [ -d ".git" ]; then
     if test_writeable ".git"; then
       $blatt
-      git pull --no-ff 2>&1 | grep -v "X11 forwarding request failed" | $TO_SPLITTER
+      git pull $PULL_ADDITION 2>&1 | grep -v "X11 forwarding request failed" | $TO_SPLITTER
+#ordinary pulls should be allowed to do fast forward: --no-ff 
       promote_pipe_return 0
-      test_or_die "git pull of origin without fast forwards"
+      test_or_die "git pull of origin"
     fi
   else
     # this is not an error necessarily; we'll just pretend they planned this.