#!/usr/bin/env sh # SPDX-FileCopyrightText: 2022 Caleb La Grange <thonkpeasant@protonmail.com> # SPDX-FileCopyrightText: 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com> # SPDX-License-Identifier: GPL-3.0-only name="" Print_help(){ cat <<- EOF Usage: ./gitclone [name] Options: name: The name of the module as specified in resources/git/revisions file EOF } Fail(){ printf "${@}\n" Print_help exit 1 } Check_vars(){ if [ -z "${revision+x}" ]; then Fail 'Error: revision not set' fi if [ -z "${location+x}" ]; then Fail 'Error: location not set' fi if [ -z "${url+x}" ]; then Fail 'Error: url not set' fi } Patch(){ for patchfile in ${PWD}/${patchdir}/*.patch ; do ( cd ${tmp_dir} git am ${patchfile} || return 1 ) done } Run(){ git clone ${url} ${tmp_dir} || git clone ${bkup_url} ${tmp_dir} || Fail "ERROR: couldn't download ${name}\n Check Network connection" ( cd ${tmp_dir} && git reset --hard ${revision} ) patchdir="resources/${name}/patches" if [ -d "${patchdir}" ]; then Patch || Fail "ERROR: Faild to patch ${name}" fi mv ${tmp_dir} ${location} || Fail "ERROR: couldn't copy temp to destination\n ${tmp_dir} > ${location} check permissions" } if [ -z "${1+x}" ]; then Fail 'Error: name not set' else name=${1} fi while read -r line ; do set ${line} >/dev/null 2>&1 case ${line} in rev:*) revision=${2} ;; loc:*) location=${2} ;; url:*) url=${2} ;; bkup_url:*) bkup_url=${2} ;; esac done << EOF $(eval "awk ' /\{.*${name}.*}{/ {flag=1;next} /\}/{flag=0} flag { print }' resources/git/revisions") EOF Check_vars tmp_dir=$(mktemp -dt "${name}_XXXXX") # clean out old version just in case if [ -d "${location}" ]; then rm -rf ${location} fi Run # clean in case of failure rm -rf ${tmp_dir} >/dev/null 2>&1