]> ruderich.org/simon Gitweb - config/dotfiles.git/blobdiff - sync.sh
lib.sh: Add support for FreeBSD to os().
[config/dotfiles.git] / sync.sh
diff --git a/sync.sh b/sync.sh
index 7ffcd44f652c435882b796e63f86932b66233399..6600c889344ea4e21bdcaf554eb373d701bbd95f 100755 (executable)
--- a/sync.sh
+++ b/sync.sh
@@ -6,12 +6,12 @@
 
 
 # Select the method: fetch, push and status is possible.
-if [ x$1 = x -o x$1 = xfetch -o x$1 = xfe ]; then
+if [ x$1 = x -o x$1 = xstatus -o x$1 = xst ]; then
+    method=status
+elif [ $1 = fetch -o $1 = fe ]; then
     method=fetch
 elif [ $1 = push -o $1 = pu ]; then
     method=push
-elif [ $1 = status -o $1 = st ]; then
-    method=status
 else
     echo "Usage: sync.sh [fetch | fe | push | pu | status | st]"
     echo
@@ -26,10 +26,31 @@ for project in `find . -name .git -type d`; do
     pwd=`pwd`
     cd "$project"
 
-    # Display all commits not in the master branch.
+    # Remove .git from repository name.
+    project=`echo "$project" | sed "s|.git||"`
+
+    # Display all commits not in the master branch (which have to be merged
+    # from the remote branches) or not in the remote branches (which have to
+    # be pushed to the remote hosts).
     if [ $method = status ]; then
-        echo "$project status"
-        git log --graph --all --pretty=oneline master..
+        # Display a log similar to gitk but for the console.
+        git_log() {
+            output=`git log --graph --all --pretty=oneline --color $1`
+            if [ "x$output" != x ]; then
+                echo $2
+                echo "$output"
+            fi
+        }
+
+        # Display unmerged commits.
+        git_log master.. "$project needs merge:"
+
+        # Display not pushed commits.
+        for branch in `git branch -r`; do
+            branch=`echo "$branch" | sed 's|* ||g'`
+            git_log "$branch.." "$project ($branch) needs push:"
+        done
+
     # Fetch from/Push to all remotes.
     else
         for remote in `git remote`; do
@@ -40,3 +61,8 @@ for project in `find . -name .git -type d`; do
 
     cd "$pwd"
 done
+
+# Run status after a fetch to see new changes.
+if [ $method = fetch ]; then
+    ./sync.sh status
+fi