]> ruderich.org/simon Gitweb - config/dotfiles.git/blobdiff - sync.sh
Fix leaking a variable in lib.sh.
[config/dotfiles.git] / sync.sh
diff --git a/sync.sh b/sync.sh
index 31084e59fc5b3c4beba68503ad88c42dd7f3ba13..e76ce8e55a149d9af664291dfc6032f9fb06f8fb 100755 (executable)
--- a/sync.sh
+++ b/sync.sh
@@ -1,21 +1,53 @@
 #!/bin/sh
 
-# Fetches the current master from all remotes. Used to sync with all remote
-# hosts. No merging is done.
+# Syncs with remote hosts in the git (sub)directories.
+#
+# Allows fetching (no merge) and pushing at the moment.
 
 
-# Fetch from each remote of each git subdirectory.
+# Select the method: fetch, push and status is possible.
+if [ x$1 = x -o x$1 = xfetch -o x$1 = xfe ]; 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
+    echo "fetch: Fetch from all remotes."
+    echo "push: Push to all remotes."
+    echo "status: Display status for all git repositories."
+    exit 1
+fi
+
+# Execute the given method for each git subdirectory.
 for project in `find . -name .git -type d`; do
-    if [ -d "$project" ]; then
-        pwd=`pwd`
-        cd "$project"
+    pwd=`pwd`
+    cd "$project"
+
+    # Remove .git from repository name.
+    project=`echo "$project" | sed "s|.git||"`
 
-        # Fetch from all remotes.
+    # Display all commits not in the master branch.
+    if [ $method = status ]; then
+        output=`git log --graph --all --pretty=oneline --color master..`
+        if [ "x$output" != x ]; then
+            echo "$project status:"
+            echo "$output"
+        fi
+    # Fetch from/Push to all remotes.
+    else
         for remote in `git remote`; do
-            echo "$project: fetching $remote ..."
-            git fetch "$remote"
+            echo "$project: ${method}ing $remote ..."
+            git $method "$remote"
         done
-
-        cd "$pwd"
     fi
+
+    cd "$pwd"
 done
+
+# Run status after a fetch to see new changes.
+if [ $method = fetch ]; then
+    ./sync.sh status
+fi