#!/usr/bin/env sh # SPDX-FileCopyrightText: 2022 Caleb La Grange # SPDX-FileCopyrightText: 2022 Ferass El Hafidi # SPDX-License-Identifier: GPL-3.0-only name="" revision="" location="" url="" bkup_url="" tmp_dir="" main() { if [ -z "${1+x}" ]; then err 'Error: name not set' fi name=${1} awkstr=" /\{.*${name}.*}{/ {flag=1;next} /\}/{flag=0} flag { print }" 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 '${awkstr}' resources/git/revisions") EOF check_project tmp_dir=$(mktemp -dt "${name}_XXXXX") # clean out old version just in case if [ -d "${location}" ]; then rm -rf ${location} fi clone_project # clean in case of failure rm -rf ${tmp_dir} >/dev/null 2>&1 } check_project() { if [ -z "${revision+x}" ]; then err 'Error: revision not set' fi if [ -z "${location+x}" ]; then err 'Error: location not set' fi if [ -z "${url+x}" ]; then err 'Error: url not set' fi } clone_project() { git clone ${url} ${tmp_dir} || git clone ${bkup_url} ${tmp_dir} \ || err "ERROR: could not download ${name}" ( cd ${tmp_dir} || err "Could not access tmp directory." git reset --hard ${revision} ) patchdir="resources/${name}/patches" if [ -d "${patchdir}" ]; then patch_project || err "ERROR: errd to patch ${name}" fi mv ${tmp_dir} ${location} && return 0 printf "ERROR: Could not copy temp file to destination.\n" err " ${tmp_dir} > ${location} check permissions" } patch_project() { for patchfile in ${PWD}/${patchdir}/*.patch ; do if [ ! -f "${patchfile}" ]; then continue fi ( cd ${tmp_dir} git am ${patchfile} || return 1 ) done } usage() { cat <<- EOF Usage: ./gitclone [name] Options: name: Module name as specified in resources/git/revisions EOF } err() { printf "${@}\n" usage exit 1 } main $@