X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=sync.sh;h=e76ce8e55a149d9af664291dfc6032f9fb06f8fb;hb=f8404b8badbb07ea82dd043127838fd7ef562ba9;hp=a3deab5d6653a4251f9552de1e4ac9cc38c68e5c;hpb=d59a2d2acd2dafc8ef5194272f50096fb21ec85e;p=config%2Fdotfiles.git diff --git a/sync.sh b/sync.sh index a3deab5..e76ce8e 100755 --- a/sync.sh +++ b/sync.sh @@ -5,28 +5,49 @@ # Allows fetching (no merge) and pushing at the moment. -# Select the method, fetch and push is possible. -if [ x$1 = x -o x$1 = xfetch ]; then +# 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 [ x$1 = xpush ]; then +elif [ $1 = push -o $1 = pu ]; then method=push +elif [ $1 = status -o $1 = st ]; then + method=status else - echo "Unsupported method '$1'. Only 'fetch' and 'push' is supported." >&2 + 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 -# Fetch from/Push to each remote of each git subdirectory. +# 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" - # Fetch from/Push to all remotes. + # Remove .git from repository name. + project=`echo "$project" | sed "s|.git||"` + + # 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: ${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