Skip to content

Commit 46843b9

Browse files
authored
Merge pull request #3 from Bobonium/fix_gitfile_path
Fix gitfile path
2 parents 51b3338 + 181cb64 commit 46843b9

File tree

1 file changed

+39
-14
lines changed

1 file changed

+39
-14
lines changed

gitfile.sh

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,27 @@
22

33
set -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+
520
function 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

2642
function 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

4763
DEFAULT_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

5882
if [ ! -f "${YAML_FILE}" ]; then
5983
echo "[ERROR] '${YAML_FILE}' does not exist"
6084
exit 1
6185
fi
6286

6387
cd "$(dirname "${YAML_FILE}")"
88+
YAML_FILE="./$(echo ${YAML_FILE} | rev | cut -d "/" -f 1 | rev)"
6489
parseYaml ${YAML_FILE} ${DEFAULT_GIT_CLONE_PATH}

0 commit comments

Comments
 (0)