mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-11 22:12:40 +02:00
cc1642096e
This results in much cleaner copyright and license declarations. SPDX headers are legally recognised and make auditing easier. Also, remove descriptions of each script, from each script. Libreboot documentation at docs/maintain/ describes them. Signed-off-by: Leah Rowe <leah@libreboot.org>
131 lines
3.0 KiB
Bash
Executable File
131 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
# SPDX-License-Identifier: GPL-3.0-only
|
|
# 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>
|
|
|
|
. "include/err.sh"
|
|
|
|
name=""
|
|
revision=""
|
|
location=""
|
|
url=""
|
|
bkup_url=""
|
|
tmp_dir="tmp/gitclone"
|
|
depend=""
|
|
|
|
main()
|
|
{
|
|
[ $# -gt 0 ] || fail "no argument given"
|
|
|
|
[ -z "${1+x}" ] && fail 'main(): name not set'
|
|
name=${1}
|
|
|
|
read_config
|
|
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}"
|
|
}
|
|
|
|
read_config()
|
|
{
|
|
revfile="$(mktemp -t gitrevisions.XXXXXXXXXX)" || \
|
|
fail "read_config: Cannot initialise tmpfile"
|
|
|
|
cat config/git/* > "${revfile}" || \
|
|
fail "read_config: Cannot concatenate revision files"
|
|
|
|
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="${depend} ${2} " ;;
|
|
esac
|
|
done << EOF
|
|
$(eval "awk \"${awkstr}\" \"${revfile}\"")
|
|
EOF
|
|
|
|
rm -f "${revfile}" || \
|
|
fail "read_config: can't remove tmp revfile"
|
|
}
|
|
|
|
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()
|
|
{
|
|
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}"
|
|
(
|
|
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}'"
|
|
[ "${location}" = "${location%/*}" ] || mkdir -p ${location%/*} || \
|
|
fail "clone_project: cannot make directory for ${name}"
|
|
mv "${tmp_dir}" "${location}" || \
|
|
fail "clone_project: could not copy temp file to destination"
|
|
}
|
|
|
|
patch_project()
|
|
{
|
|
patchdir="config/${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: ./update project repo [name]
|
|
|
|
Options:
|
|
name: Module name as specified in files under config/git/
|
|
EOF
|
|
}
|
|
|
|
main $@
|