#!/usr/bin/env sh # SPDX-FileCopyrightText: 2022 Caleb La Grange # SPDX-FileCopyrightText: 2022 Ferass El Hafidi # SPDX-FileCopyrightText: 2023 Leah Rowe # SPDX-License-Identifier: GPL-3.0-only . "include/err.sh" name="" revision="" location="" url="" bkup_url="" tmp_dir="" depend="" main() { [ -z "${1+x}" ] && fail 'Error: name not set' name=${1} read_config verify_config clone_project [ "${depend}" = "" ] || ./fetch ${depend} || exit 1 rm -Rf ${tmp_dir} >/dev/null 2>&1 || exit 1 } read_config() { 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} ;; depend:*) depend=${2} ;; esac done << EOF $(eval "awk '${awkstr}' resources/git/revisions") EOF } verify_config() { [ -z "${revision+x}" ] && fail 'Error: revision not set' [ -z "${location+x}" ] && fail 'Error: location not set' [ -z "${url+x}" ] && fail 'Error: url not set' } clone_project() { tmp_dir=$(mktemp -dt "${name}_XXXXX") git clone ${url} ${tmp_dir} || git clone ${bkup_url} ${tmp_dir} || \ fail "ERROR: could not download ${name}" ( cd ${tmp_dir} || fail "tmpdir not created" git reset --hard ${revision} || fail "Cannot reset revision" ) patch_project [ ! -d "${location}" ] || \ rm -Rf ${location} || fail "Can't remove directory '${location}'" mv ${tmp_dir} ${location} && return 0 printf "ERROR: Could not copy temp file to destination.\n" fail " ${tmp_dir} > ${location} check permissions" } patch_project() { patchdir="resources/${name}/patches" for patchfile in ${PWD}/${patchdir}/*.patch ; do [ -f "${patchfile}" ] || continue ( cd ${tmp_dir} || fail "tmpdir not created" git am ${patchfile} || fail "Cannot patch project: $name" ) done } fail() { usage rm -Rf "${tmp_dir}" > /dev/null 2>&1 | : err "${1}" } usage() { cat <<- EOF Usage: ./fetch [name] Options: name: Module name as specified in resources/git/revisions EOF } main $@