diff --git a/tools/scripts/gitroot b/tools/scripts/gitroot new file mode 100755 index 00000000..f4388df5 --- /dev/null +++ b/tools/scripts/gitroot @@ -0,0 +1,38 @@ +#!/bin/sh +# +###################################################################### +# +# gitroot +# +# Translate $1 or $PWD into the top-level workspace directory +# containing .git +# +###################################################################### + +if test $# -gt 0; then + dir=$(realpath $1) +else + dir=$(pwd) +fi +while test $dir != /; do + if test -d $dir/.git; then + echo $dir + break + fi + if test -f $dir/.git; then + ndir=$(sed -n -e 's/^gitdir: \(.*\)/\1/p' $dir/.git) + if test "$ndir"; then + ndir=$(cd $dir && cd $ndir && pwd) + ndir=${ndir%/.git/*} + if test -d "$ndir"; then + dir=$ndir + continue + fi + fi + fi + dir=${dir%/*} +done +if test "$dir" = "/"; then + echo "*** cannot find git root" 1>&2 + exit 1 +fi