Table of Contents

gitr

purpose

gitr is a script I've developed for my project needs. It runs git commands recursively with special consideration for what I want to see or how my projects are typically structured.

making it available as shell command

You can have this as a command available wherever you are by placing it in /usr/bin/gitr (without the .sh), and making it executable.

script

gitr.sh

#!/bin/sh

gitrmode=""
if [ "$1" = "fetch" ]; then
	gitrmode="fetch"
elif [ "$1" = "status" ]; then
	gitrmode="status"
elif [ "$1" = "pull" ]; then
	gitrmode="pull"
elif [ "$1" = "showconfig" ]; then
	gitrmode="showconfig"
fi

if [ "$gitrmode" = "" ]; then
	echo -e "Usage: `basename $0` <fetch|status|pull|showconfig>\n"
	exit
fi

function runGitCmd()
{
	`which ls` -1d * | while read item;do
		# make sure we have a directory
		if [ -d "${item}" ]; then
			cd "${item}"

			# make sure the directory is a .git project
			if [ -d ".git" ]; then

				if [ "$gitrmode" = "status" ]; then
					echo "statusing ${item}..."
					git status | grep -i -E '^[^#]|^# On branch|^# Your branch'
					echo -e "\n";

				elif [ "$gitrmode" = "fetch" ]; then
					echo "fetching all remotes for ${item}..."
					git fetch --all
					echo -e "\n";

				elif [ "$gitrmode" = "pull" ]; then
					echo "pulling all remotes for ${item}..."
					git pull --all
					echo -e "\n";

				elif [ "$gitrmode" = "showconfig" ]; then
					echo "showing .git/config for ${item}..."
					cat .git/config
					echo -e "\n";
				fi

			fi
			cd ..

		fi
	done
}

runGitCmd

if [ -d "js" ]; then
	cd js
	pwd
	runGitCmd
	cd ..
fi

if [ -d "lib" ]; then
	cd lib
	pwd
	runGitCmd
	cd ..
fi

unset -f runGitCmd