]> ruderich.org/simon Gitweb - config/dotfiles.git/blob - sync.sh
Fix leaking a variable in lib.sh.
[config/dotfiles.git] / sync.sh
1 #!/bin/sh
2
3 # Syncs with remote hosts in the git (sub)directories.
4 #
5 # Allows fetching (no merge) and pushing at the moment.
6
7
8 # Select the method: fetch, push and status is possible.
9 if [ x$1 = x -o x$1 = xfetch -o x$1 = xfe ]; then
10     method=fetch
11 elif [ $1 = push -o $1 = pu ]; then
12     method=push
13 elif [ $1 = status -o $1 = st ]; then
14     method=status
15 else
16     echo "Usage: sync.sh [fetch | fe | push | pu | status | st]"
17     echo
18     echo "fetch: Fetch from all remotes."
19     echo "push: Push to all remotes."
20     echo "status: Display status for all git repositories."
21     exit 1
22 fi
23
24 # Execute the given method for each git subdirectory.
25 for project in `find . -name .git -type d`; do
26     pwd=`pwd`
27     cd "$project"
28
29     # Remove .git from repository name.
30     project=`echo "$project" | sed "s|.git||"`
31
32     # Display all commits not in the master branch.
33     if [ $method = status ]; then
34         output=`git log --graph --all --pretty=oneline --color master..`
35         if [ "x$output" != x ]; then
36             echo "$project status:"
37             echo "$output"
38         fi
39     # Fetch from/Push to all remotes.
40     else
41         for remote in `git remote`; do
42             echo "$project: ${method}ing $remote ..."
43             git $method "$remote"
44         done
45     fi
46
47     cd "$pwd"
48 done
49
50 # Run status after a fetch to see new changes.
51 if [ $method = fetch ]; then
52     ./sync.sh status
53 fi