Compare commits

...

2 Commits

Author SHA1 Message Date
be5055cd4d notes...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2023-09-08 06:13:52 +03:00
483f62db83 refactoring and cleanup...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2023-09-08 06:11:09 +03:00
4 changed files with 41 additions and 84 deletions

View File

@ -1,2 +1,14 @@
# git-utlis
git utilities
This package provides a set of git _meta-porcelain_ commands to manage
a work tree with multiple git repositories.
Provided commands:
- `git listall`
List repositories in tree.
- `git cloneall FILE`
Clone all repositories in file
- `git pullall`
Pull changes for all repositories in tree

View File

@ -12,12 +12,12 @@ while true ; do
echo
echo "Repository list can be constructed from an existing set of"
echo "repositories via:"
echo " $ git remotes > reposiotry.lst"
echo " $ git listall -o > reposiotry.lst"
echo "or recursively:"
echo " $ git remotes -r > reposiotry.lst"
echo " $ git listall -o -r > reposiotry.lst"
echo
echo "The repository list is a text file with each line consisting"
echo "of a space-separated path and a remote url (as supported by"
echo "of a \"=\"-separated path and a remote url (as supported by"
echo "git clone)."
echo "The list file can also contain empty lines and supports shell"
echo "comments (lines starting with \"#\")"
@ -56,11 +56,11 @@ for repo in ${LIST[@]} ; do
continue
fi
IFS=$' ' \
IFS=$'=' \
repo=($repo)
# skip existing dirs...
if [ -e "${repo[0]}" ] ; then
# skip existing dirs or local repos...
if [ -e "${repo[0]}" ] || [ "${repo[1]}" = "origin" ] ; then
#echo "skipping: ${repo[0]}"
continue
fi

View File

@ -9,7 +9,8 @@ while true ; do
echo
echo "Options:"
echo " -h --help - print this message and exit"
echo " -r --recursive - pull directories recursively"
echo " -r --recursive - list directories recursively"
echo " -o --origin - also print origin url"
echo
exit
;;
@ -19,6 +20,11 @@ while true ; do
shift
continue
;;
-o|--origin)
ORIGIN=1
shift
continue
;;
-*|--*)
echo "Error: unknown option: \"$1\"" >&2
@ -36,14 +42,25 @@ TARGET_PATH=${TARGET_PATH:=.}
cd "$TARGET_PATH"
if [ $RECURSIVE ] ; then
DIRS=($(find . -name .git | sort))
IFS=$'\n' \
DIRS=($(find . -name .git | sort))
else
DIRS=(./*/.git)
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 .
echo ".`getOrigin .`"
exit 0
fi
@ -51,7 +68,7 @@ fi
wd=$(pwd)
for dir in ${DIRS[@]} ; do
dir=${dir%.git}
echo $dir
echo "$dir`getOrigin "$dir"`"
done

View File

@ -1,72 +0,0 @@
#!/usr/bin/env bash
while true ; do
case $1 in
-h|--help)
echo "Usage: $(basename "$0") [OPTIONS] [PATH]"
echo
echo "Print origins of all repositories in PATH."
echo
echo "Options:"
echo " -h --help - print this message and exit"
echo " -r --recursive - pull directories recursively"
echo
exit
;;
-r|--recursive)
RECURSIVE=-r
shift
continue
;;
-*|--*)
echo "Error: unknown option: \"$1\"" >&2
exit
;;
*)
TARGET_PATH=$1
break
;;
esac
done
TARGET_PATH=${TARGET_PATH:=.}
cd "$TARGET_PATH"
DIRS=($(git listall ${RECURSIVE}))
getOrigin(){
cd "$1"
git ls-remote --get-url origin
cd "$wd"
}
# inside a repo...
if [ -d ./.git ] ; then
echo ". `getOrigin .`"
exit 0
fi
# no matches...
if [[ $DIRS =~ \* ]] ; then
echo "no repos found." >&2
exit 1
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 :