mirror of
				https://github.com/flynx/git-utils.git
				synced 2025-10-30 03:30:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| 
 | |
| while true ; do
 | |
| 	case $1 in
 | |
| 		-h|--help)
 | |
| 			echo "Usage: $(basename "$0") [OPTIONS] FILE [PATH]"
 | |
| 			echo
 | |
| 			echo "Clone all repositories from lst (FILE)."
 | |
| 			echo
 | |
| 			echo "Options:"
 | |
| 			echo "    -h --help       - print this message and exit"
 | |
| 			echo
 | |
| 			echo "Repository list can be constructed from an existing set of"
 | |
| 			echo "repositories via:"
 | |
| 			echo "  $ git listall -o > reposiotry.lst"
 | |
| 			echo "or recursively:"
 | |
| 			echo "  $ git listall -o -r > reposiotry.lst"
 | |
| 			echo
 | |
| 			echo "The repository list is a text file with each line consisting"
 | |
| 			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 \"#\")"
 | |
| 			echo
 | |
| 			exit
 | |
| 			;;
 | |
| 
 | |
| 		-*|--*)
 | |
| 			echo "Error: unknown option: \"$1\"" >&2
 | |
| 			exit
 | |
| 			;;
 | |
| 		*)
 | |
| 			LIST=$1
 | |
| 			TARGET_PATH=$2
 | |
| 			break
 | |
| 			;;
 | |
| 	esac
 | |
| done
 | |
| 
 | |
| TARGET_PATH=${TARGET_PATH:=.}
 | |
| cd "$TARGET_PATH"
 | |
| 
 | |
| if [ -z $LIST ] ; then
 | |
| 	echo "need a list file..." >&2
 | |
| 	exit 1
 | |
| fi
 | |
| 
 | |
| IFS=$'\n' \
 | |
| 	LIST=($(cat "$LIST"))
 | |
| 
 | |
| wd=`pwd`
 | |
| for repo in ${LIST[@]} ; do
 | |
| 	repo=`xargs<<<"${repo}"`
 | |
| 	# skip comments and empty lines...
 | |
| 	if [ -z "$repo" ] || [[ "${repo}" =~ ^# ]] ; then
 | |
| 		continue
 | |
| 	fi
 | |
| 
 | |
| 	IFS=$'=' \
 | |
| 		repo=($repo)
 | |
| 
 | |
| 	# skip existing dirs or local repos...
 | |
| 	if [ -e "${repo[0]}" ] || [ "${repo[1]}" = "origin" ] ; then
 | |
| 		#echo "skipping: ${repo[0]}"
 | |
| 		continue
 | |
| 	fi
 | |
| 
 | |
| 	mkdir -p "${repo[0]}"
 | |
| 
 | |
| 	git clone ${repo[1]} "${repo[0]}"
 | |
| 
 | |
| 	cd "$wd"
 | |
| done
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| # vim:set sw=4 ts=4 :
 |