diff options
author | Leah Rowe <leah@libreboot.org> | 2023-09-01 08:30:08 +0100 |
---|---|---|
committer | Leah Rowe <leah@libreboot.org> | 2023-09-01 08:30:08 +0100 |
commit | b9662fbe3634af2946f0423a021c4f04c983c169 (patch) | |
tree | 564ffed7bdfe1ab734d5d15072e5dfe06e8b15a6 /script/update/project/repo | |
parent | 12b33eb8c18b37546599feec908b9acd829f0029 (diff) |
handle project downloads in main lbmk script
this means the unified /tmp handling is now provided for
in both the former "fetch" and "fetch_trees" script, which
are now (respectively):
./update project repo
./update project trees
if the fetch scripts weren't cleaning /tmp before, they
now are, because lbmk handles it
Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'script/update/project/repo')
-rwxr-xr-x | script/update/project/repo | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/script/update/project/repo b/script/update/project/repo new file mode 100755 index 00000000..270d6cb9 --- /dev/null +++ b/script/update/project/repo @@ -0,0 +1,124 @@ +#!/usr/bin/env sh + +# SPDX-FileCopyrightText: 2022 Caleb La Grange <thonkpeasant@protonmail.com> +# SPDX-FileCopyrightText: 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com> +# SPDX-FileCopyrightText: 2023 Leah Rowe <leah@libreboot.org> +# SPDX-License-Identifier: GPL-3.0-only + +. "include/err.sh" + +name="" +revision="" +location="" +url="" +bkup_url="" +tmp_dir="" +depend="" + +main() +{ + id -u 1>/dev/null 2>/dev/null || \ + fail "cannot ascertain user id" + if [ "$(id -u)" = "0" ]; then + fail "running lbmk as root is not permitted" + fi + ./checkgit || err "Please read: https://libreboot.org/docs/build/" + + [ $# -gt 0 ] || fail "no argument given" + + [ -z "${1+x}" ] && fail 'main(): name not set' + name=${1} + + read_config + verify_config + + clone_project + [ "${depend}" = "" ] || ./fetch ${depend} || \ + fail "Cannot fetch dependency, ${depend}, for project, ${name}" + + rm -Rf "${tmp_dir}" || fail "cannot remove tmpdir, ${tmp_dir}" +} + +read_config() +{ + awkstr=" /\{.*${name}.*}{/ {flag=1;next} /\}/{flag=0} flag { print }" + while read -r line ; do + set ${line} || fail "read_config: set line" + 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 'verify_config: revision not set' + [ -z "${location+x}" ] && fail 'verify_config: location not set' + [ -z "${url+x}" ] && fail 'verify_config: url not set' +} + +clone_project() +{ + tmp_dir=$(mktemp -dt "${name}_XXXXX") + + git clone ${url} "${tmp_dir}" || git clone ${bkup_url} "${tmp_dir}" || \ + fail "clone_project: could not download ${name}" + ( + cd "${tmp_dir}" || fail "clone_project: tmpdir not created" + git reset --hard ${revision} || \ + fail "clone_project: Cannot reset revision" + ) + patch_project + + [ ! -d "${location}" ] || \ + rm -Rf "${location}" || \ + fail "clone_project: Can't remove directory '${location}'" + mv "${tmp_dir}" "${location}" || \ + fail "clone_project: could not copy temp file to destination" +} + +patch_project() +{ + patchdir="resources/${name}/patches" + + for patchfile in "${PWD}/${patchdir}"/*.patch ; do + [ -f "${patchfile}" ] || continue + ( + cd "${tmp_dir}" || fail "patch_project: tmpdir unavailable" + git am "${patchfile}" || \ + fail "patch_project: Cannot patch project: $name" + ) + done +} + +fail() +{ + for x in "${location}" "${tmp_dir}"; do + [ -z "${x}" ] || [ ! -d "${x}" ] || rm -Rf "${location}" || : + done + usage + err "${1}" +} + +usage() +{ + cat <<- EOF + Usage: ./fetch [name] + + Options: + name: Module name as specified in resources/git/revisions + EOF +} + +main $@ |