support MacOS
[~madcoder/dotfiles.git] / +bin / git-up
index 06a2c71..c0172a2 100755 (executable)
@@ -1,5 +1,7 @@
 #!/bin/sh
 
+. "$(dirname "$0")/setup.sh"
+
 OPTIONS_SPEC="\
 $(basename $0) [options] [<remote> [<branch>]]
 --
@@ -8,7 +10,7 @@ r,rebase    perform a rebase
 m,merge     perform a merge
 "
 SUBDIRECTORY_OK=t
-. git-sh-setup
+. "$(git --exec-path)/git-sh-setup"
 require_work_tree
 
 lbranch=$(git symbolic-ref HEAD | sed -e s~refs/heads/~~)
@@ -52,7 +54,10 @@ case $# in
     *) usage;;
 esac
 
-git fetch "${remote}"
+git remote update
+if git config remote.mob.fetch >/dev/null 2>/dev/null; then
+    git remote prune mob
+fi
 if test `git rev-list .."${remote}/${branch#refs/heads/}" -- | wc -l` = 0; then
     echo "Current branch $lbranch is up to date."
     exit 0
@@ -69,16 +74,20 @@ if test -z "$action"; then
     esac
 fi
 
+no_changes () {
+       git diff-index --quiet --cached HEAD --ignore-submodules -- &&
+       git diff-files --quiet --ignore-submodules
+}
+
 unclean=
-git rev-parse --verify HEAD > /dev/null && \
-    git update-index --refresh && \
-    git diff-files --quiet && \
-    git diff-index --cached --quiet HEAD -- || unclean=t
+no_changes || unclean=t
+
 
 case "$action" in
     rebase)
         test -z "$unclean" || git stash save "git-up stash"
         git rebase "${remote}/${branch#refs/heads/}"
+        cd "$(dirname "$(git rev-parse --git-dir)")" && git submodule update --rebase
         ;;
     merge)
         test -z "$unclean" || git stash save "git-up stash"
@@ -95,6 +104,6 @@ if test -n "$unclean"; then
         echo ""
         echo "run 'git stash apply' when rebase is finished"
     else
-        git stash apply
+        git stash pop
     fi
 fi