#!/usr/bin/env sh # SPDX-License-Identifier: GPL-3.0-only # SPDX-FileCopyrightText: 2022 Caleb La Grange # SPDX-FileCopyrightText: 2022 Ferass El Hafidi # SPDX-FileCopyrightText: 2023 Leah Rowe . "include/err.sh" . "include/git.sh" . "include/option.sh" eval "$(setvars "" name rev loc url bkup_url depend)" tmp_dir="${PWD}/tmp/gitclone" main() { [ $# -gt 0 ] || fail "no argument given" [ -z "${1+x}" ] && fail 'main(): name not set' name=${1#src/} scan_config "${name}" "config/git" "fail" verify_config clone_project [ "${depend}" = "" ] || for d in ${depend} ; do xx_ ./update project repo ${d} done xx_ rm -Rf "${tmp_dir}" } verify_config() { [ -z "${rev+x}" ] && fail 'verify_config: rev not set' [ -z "${loc+x}" ] && fail 'verify_config: loc not set' [ -z "${url+x}" ] && fail 'verify_config: url not set' } clone_project() { xx_ rm -Rf "${tmp_dir}" xx_ mkdir -p "${tmp_dir%/*}" loc="${loc#src/}" loc="src/${loc}" git clone ${url} "${tmp_dir}" || git clone ${bkup_url} "${tmp_dir}" || \ fail "clone_project: could not download ${name}" git_reset_rev "${tmp_dir}" "${rev}" "fail" || \ fail "clone_project ${loc}/: cannot reset <- ${rev}" git_am_patches "${tmp_dir}" "${PWD}/config/${name}/patches" "fail" || \ fail "clone_project ${loc}/: cannot apply patches" xx_ rm -Rf "${loc}" [ "${loc}" = "${loc%/*}" ] || xx_ mkdir -p ${loc%/*} xx_ mv "${tmp_dir}" "${loc}" } fail() { for x in "${loc}" "${tmp_dir}"; do [ -z "${x}" ] || [ ! -d "${x}" ] || rm -Rf "${loc}" || : done usage err "${1}" } usage() { cat <<- EOF Usage: ./update project repo [name] Options: name: Module name as specified in files under config/git/ EOF } main $@