#!/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" name="" rev="" loc="" url="" bkup_url="" tmp_dir="${PWD}/tmp/gitclone" depend="" main() { [ $# -gt 0 ] || fail "no argument given" [ -z "${1+x}" ] && fail 'main(): name not set' name=${1} scan_config "${name}" "config/git" "fail" verify_config clone_project [ "${depend}" = "" ] || for d in ${depend} ; do ./update project repo ${d} || \ fail "Cannot fetch dependency, ${d}, for project, ${name}" done rm -Rf "${tmp_dir}" || fail "cannot remove tmpdir, ${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() { rm -Rf "${tmp_dir}" || fail "clone_project: cannot remove old tmpdir" mkdir -p "${tmp_dir%/*}" || fail "clone_project: can't mkdir" 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" [ ! -d "${loc}" ] || \ rm -Rf "${loc}" || \ fail "clone_project: Can't remove directory '${loc}'" [ "${loc}" = "${loc%/*}" ] || mkdir -p ${loc%/*} || \ fail "clone_project: cannot make directory for ${name}" mv "${tmp_dir}" "${loc}" || \ fail "clone_project: could not copy temp file to destination" } 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 $@