22
33set -euo pipefail
44
5+ function printHelpText
6+ {
7+ echo " Usage:"
8+ echo " ${0} [OPTIONS]"
9+ echo " "
10+ echo " application Options:"
11+ echo " -p, --default-clone-path= Default path to git clone into (default: ./)"
12+ echo " -f, --gitfile= File path to the Gitfile (default: ./gitfile)"
13+ echo " "
14+ echo " Help Options:"
15+ echo " -h, --help Show this help message and exit"
16+ echo " "
17+ exit 0
18+ }
19+
520function cloneRepo
621{
722 SOURCE=${1}
823 VERSION=${2}
924 GIT_CLONE_PATH=${3// \~ / $HOME }
25+ echo " ${SOURCE} "
1026 if [ ! -d " ${GIT_CLONE_PATH} " ]; then
1127 git clone " ${SOURCE} " ${GIT_CLONE_PATH} -q
1228 fi
@@ -25,40 +41,49 @@ function cloneRepo
2541
2642function parseYaml
2743{
28- YAML_FILE= $ {1}
44+ YAML_FILE_CONTENT= $( cat $ {1} | egrep -v " ^\s*# " )
2945 DEFAULT_GIT_CLONE_PATH=${2}
30- LAST_LINE_NUMBER=" $( wc -l ${YAML_FILE} | awk ' {print $1}' ) "
31- mapfile -t LINE_NUMBERS < <( cat -n ${YAML_FILE} | egrep -v " source:|version:|path:" | egrep " [0-9]{1,10}.*:\s*$" | awk ' {print $1}' )
32- mapfile -t DIR_NAMES < <( cat -n ${YAML_FILE} | egrep -v " source:|version:|path:" | egrep " [0-9]{1,10}.*:\s*$" | awk ' {print $2}' )
46+ LAST_LINE_NUMBER=" $( echo " ${YAML_FILE_CONTENT} " | wc -l | awk ' {print $1}' ) "
47+ mapfile -t LINE_NUMBERS < <( echo " ${YAML_FILE_CONTENT} " | cat -n | egrep -v " source:|version:|path:" | egrep " [0-9]{1,10}.*:\s*$" | awk ' {print $1}' )
48+ mapfile -t DIR_NAMES < <( echo " ${YAML_FILE_CONTENT} " | cat -n | egrep -v " source:|version:|path:" | egrep " [0-9]{1,10}.*:\s*$" | awk ' {print $2}' )
3349 for (( i= 0 ; i < ${# LINE_NUMBERS[@]} ; ++ i ))
3450 do
3551 FROM=$( expr ${LINE_NUMBERS[$i]} + 1)
3652 TO=$( expr ${LAST_LINE_NUMBER} + 1)
3753 if [ " $i " -ne " $( expr ${# LINE_NUMBERS[@]} - 1 ) " ]; then
3854 TO=$( expr ${LINE_NUMBERS[$i + 1]} - 1)
3955 fi
40- SOURCE=$( sed -n " ${FROM} ,${TO} p" ${YAML_FILE} | grep " source:" | awk ' {print $2}' | cut -d' "' -f2)
41- VERSION=$( sed -n " ${FROM} ,${TO} p" ${YAML_FILE} | grep " version:" | awk ' {print $2}' | cut -d' "' -f2 || echo " master" )
42- GIT_CLONE_PATH=$( sed -n " ${FROM} ,${TO} p" ${YAML_FILE} | grep " path:" | awk ' {print $2}' | cut -d' "' -f2 || echo " ${DEFAULT_GIT_CLONE_PATH} " )
56+ SOURCE=$( echo " ${YAML_FILE_CONTENT} " | sed -n " ${FROM} ,${TO} p" | grep " source:" | awk ' {print $2}' | cut -d' "' -f2)
57+ VERSION=$( echo " ${YAML_FILE_CONTENT} " | sed -n " ${FROM} ,${TO} p" | grep " version:" | awk ' {print $2}' | cut -d' "' -f2 || echo " master" )
58+ GIT_CLONE_PATH=$( echo " ${YAML_FILE_CONTENT} " | sed -n " ${FROM} ,${TO} p" | grep " path:" | awk ' {print $2}' | cut -d' "' -f2 || echo " ${DEFAULT_GIT_CLONE_PATH} " )
4359 cloneRepo ${SOURCE} ${VERSION} ${GIT_CLONE_PATH%/ } /${DIR_NAMES[$i]%: }
4460 done
4561}
4662
4763DEFAULT_GIT_CLONE_PATH=" ."
48- if [ " $# " -eq 1 ]; then
49- DEFAULT_GIT_CLONE_PATH=${1%/ }
50- fi
64+ YAML_FILE=" ./.gitfile"
65+ while [ " $# " -gt 0 ]; do
66+ case " $1 " in
67+ -p) DEFAULT_GIT_CLONE_PATH=" ${2%/ } " ; shift 2;;
68+ -f) YAML_FILE=" $2 " ; shift 2;;
5169
70+ --default-clone-path=* ) DEFAULT_GIT_CLONE_PATH=" ${1#* =} " ; shift 1;;
71+ --gitfile=* ) YAML_FILE=" ${1#* =} " ; shift 1;;
72+ --default-clone-path|--gitfile) echo " $1 requires an argument" >&2 ; exit 1;;
5273
53- YAML_FILE=" ./.gitfile"
54- if [ " $# " -eq 2 ]; then
55- YAML_FILE=" ${2} "
56- fi
74+ -h) printHelpText;;
75+ --help) printHelpText;;
76+
77+ -* ) echo " unknown option: $1 " >&2 ; exit 1;;
78+ * ) handle_argument " $1 " ; shift 1;;
79+ esac
80+ done
5781
5882if [ ! -f " ${YAML_FILE} " ]; then
5983 echo " [ERROR] '${YAML_FILE} ' does not exist"
6084 exit 1
6185fi
6286
6387cd " $( dirname " ${YAML_FILE} " ) "
88+ YAML_FILE=" ./$( echo ${YAML_FILE} | rev | cut -d " /" -f 1 | rev) "
6489parseYaml ${YAML_FILE} ${DEFAULT_GIT_CLONE_PATH}
0 commit comments