#!/usr/bin/env bash while true ; do case $1 in -h|--help) echo "Usage: $(basename "$0") [OPTIONS] [PATH]" echo echo "List all repositories in PATH." echo echo "Options:" echo " -h --help - print this message and exit" echo " -r --recursive - list directories recursively" echo " -o --origin - also print origin url" echo exit ;; -r|--recursive) RECURSIVE=1 shift continue ;; -o|--origin) ORIGIN=1 shift continue ;; -*|--*) echo "Error: unknown option: \"$1\"" >&2 exit ;; *) TARGET_PATH=$1 break ;; esac done TARGET_PATH=${TARGET_PATH:=.} cd "$TARGET_PATH" if [ $RECURSIVE ] ; then IFS=$'\n' \ DIRS=($(find . -name .git | sort)) else IFS=$'\n' \ DIRS=(./*/.git) fi # XXX handle local repos... getOrigin(){ if ! [ -z $ORIGIN ] ; then cd "$1" echo "=`git ls-remote --get-url origin`" cd "$wd" fi } # inside a repo... if [ -d ./.git ] ; then echo ".`getOrigin .`" exit 0 fi # do the update... wd=$(pwd) for dir in ${DIRS[@]} ; do dir=${dir%.git} echo "$dir`getOrigin "$dir"`" done # vim:set sw=4 ts=4 :