Skip to content

Commit 0c4720a

Browse files
committed
added baisc parseYaml and cloneRepo functionality
1 parent 82a8160 commit 0c4720a

File tree

1 file changed

+60
-1
lines changed

1 file changed

+60
-1
lines changed

gitfile.sh

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,63 @@
22

33
set -euo pipefail
44

5-
cat .gitfile
5+
function cloneRepo
6+
{
7+
SOURCE=${1}
8+
VERSION=${2}
9+
GIT_CLONE_PATH=${3//\~/$HOME}
10+
if [ ! -d "${GIT_CLONE_PATH}" ]; then
11+
git clone "${SOURCE}" ${GIT_CLONE_PATH} -q
12+
fi
13+
(
14+
cd ${GIT_CLONE_PATH}
15+
if [ -n "$(git status --porcelain)" ]; then
16+
echo "[SKIP] local changes detected"
17+
return
18+
fi
19+
sed -i -e "s|url =.*.git\$|url = ${SOURCE}|" ./.git/config
20+
git fetch -q
21+
git checkout ${VERSION} -q
22+
git pull origin ${VERSION} -q
23+
)
24+
}
25+
26+
function parseYaml
27+
{
28+
YAML_FILE=${1}
29+
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}')
33+
for (( i=0; i < ${#LINE_NUMBERS[@]}; ++i ))
34+
do
35+
FROM=$(expr ${LINE_NUMBERS[$i]} + 1)
36+
TO=$(expr ${LAST_LINE_NUMBER} + 1)
37+
if [ "$i" -ne "$(expr ${#LINE_NUMBERS[@]} - 1 )" ]; then
38+
TO=$(expr ${LINE_NUMBERS[$i + 1]} - 1)
39+
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}")
43+
cloneRepo ${SOURCE} ${VERSION} ${GIT_CLONE_PATH%/}/${DIR_NAMES[$i]%:}
44+
done
45+
}
46+
47+
DEFAULT_GIT_CLONE_PATH="."
48+
if [ "$#" -eq 1 ]; then
49+
DEFAULT_GIT_CLONE_PATH=${1%/}
50+
fi
51+
52+
53+
YAML_FILE="./.gitfile"
54+
if [ "$#" -eq 2 ]; then
55+
YAML_FILE="${2}"
56+
fi
57+
58+
if [ ! -f "${YAML_FILE}" ]; then
59+
echo "[ERROR] '${YAML_FILE}' does not exist"
60+
exit 1
61+
fi
62+
63+
cd "$(dirname "${YAML_FILE}")"
64+
parseYaml ${YAML_FILE} ${DEFAULT_GIT_CLONE_PATH}

0 commit comments

Comments
 (0)