mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-11 14:02:52 +02:00
0faef89946
right now, we assume "find", but it adds any number of arguments next to that. change it instead to support any command, where the assumption is that it would generate a list of files and directories. Signed-off-by: Leah Rowe <leah@libreboot.org>
125 lines
3.7 KiB
Bash
125 lines
3.7 KiB
Bash
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
# Copyright (c) 2020-2021,2023-2025 Leah Rowe <leah@libreboot.org>
|
|
# Copyright (c) 2022 Caleb La Grange <thonkpeasant@protonmail.com>
|
|
|
|
eval "`setvars "" loc url bkup_url subfile subhash subrepo subrepo_bkup \
|
|
depend subfile_bkup repofail`"
|
|
|
|
tmpgit="$xbmklocal/gitclone"
|
|
|
|
fetch_targets()
|
|
{
|
|
e "src/$project/$tree" d && return 0
|
|
|
|
printf "Creating %s tree %s\n" "$project" "$tree"
|
|
git_prep "$loc" "$loc" "$xbmkpwd/$configdir/$tree/patches" \
|
|
"src/$project/$tree" with_submodules
|
|
nuke "$project/$tree" "$project/$tree"
|
|
}
|
|
|
|
fetch_project()
|
|
{
|
|
eval "`setvars "" xtree`"
|
|
eval "`setcfg "config/git/$project/pkg.cfg"`"
|
|
|
|
chkvars url
|
|
|
|
[ -n "$xtree" ] && x_ ./mk -f coreboot "$xtree"
|
|
[ -z "$depend" ] || for d in $depend ; do
|
|
printf "'%s' needs '%s'; grabbing '%s'\n" "$project" "$d" "$d"
|
|
x_ ./mk -f $d
|
|
done
|
|
clone_project
|
|
|
|
for x in config/git/*; do
|
|
[ -d "$x" ] && nuke "${x##*/}" "src/${x##*/}" 2>/dev/null; :
|
|
done; :
|
|
}
|
|
|
|
clone_project()
|
|
{
|
|
loc="$XBMK_CACHE/repo/$project" && singletree "$project" && \
|
|
loc="src/$project"
|
|
printf "Downloading project '%s' to '%s'\n" "$project" "$loc"
|
|
|
|
e "$loc" d missing && remkdir "${tmpgit%/*}" && git_prep \
|
|
"$url" "$bkup_url" "$xbmkpwd/config/$project/patches" "$loc"; :
|
|
}
|
|
|
|
git_prep()
|
|
{
|
|
_patchdir="$3"
|
|
_loc="$4" # $1 and $2 are gitrepo and gitrepo_backup
|
|
|
|
chkvars rev
|
|
tmpclone "$1" "$2" "$tmpgit" "$rev" "$_patchdir"
|
|
if singletree "$project" || [ $# -gt 4 ]; then
|
|
dx_ fetch_submodule "$mdir/module.list"
|
|
fi
|
|
|
|
[ "$_loc" != "$XBMK_CACHE/repo/$project" ] && \
|
|
[ "$XBMK_RELEASE" = "y" ] && rmgit "$tmpgit"
|
|
|
|
[ "$_loc" = "${_loc%/*}" ] || x_ mkdir -p "${_loc%/*}"
|
|
mv "$tmpgit" "$_loc" || err "git_prep: !mv $tmpgit $_loc"
|
|
}
|
|
|
|
fetch_submodule()
|
|
{
|
|
mcfgdir="$mdir/${1##*/}"; eval \
|
|
"`setvars "" subhash subrepo subrepo_bkup subfile subfile_bkup st`"
|
|
[ ! -f "$mcfgdir/module.cfg" ] || . "$mcfgdir/module.cfg" || \
|
|
err "! . $mcfgdir/module.cfg"
|
|
|
|
for xt in repo file; do
|
|
_seval="if [ -n \"\$sub$xt\" ] || [ -n \"\$sub${xt}_bkup\" ]"
|
|
eval "$_seval; then st=\"\$st \$xt\"; fi"
|
|
done
|
|
st="${st# }" && [ "$st" = "repo file" ] && err "$mdir: repo+file"
|
|
|
|
[ -z "$st" ] && return 0 # subrepo/subfile not defined
|
|
chkvars "sub${st}" "sub${st}_bkup" "subhash"
|
|
|
|
[ "$st" = "file" ] && xbmkget "$subfile" "$subfile_bkup" \
|
|
"$tmpgit/$1" "$subhash" && return 0
|
|
rm -Rf "$tmpgit/$1" || err "!rm '$mdir' '$1'"
|
|
tmpclone "$subrepo" "$subrepo_bkup" "$tmpgit/$1" "$subhash" \
|
|
"$mdir/${1##*/}/patches"
|
|
}
|
|
|
|
tmpclone()
|
|
{
|
|
livepull="n" && [ "$repofail" = "y" ] && \
|
|
printf "Cached clone failed; trying online.\n" 1>&2 && livepull="y"
|
|
|
|
repofail="n"
|
|
|
|
[ $# -lt 6 ] || rm -Rf "$3" || err "git retry: !rm $3 ($1)"
|
|
repodir="$XBMK_CACHE/repo/${1##*/}" && [ $# -gt 5 ] && repodir="$3"
|
|
mkdir -p "$XBMK_CACHE/repo" || err "!rmdir $XBMK_CACHE/repo"
|
|
|
|
if [ "$livepull" = "y" ] && [ ! -d "$repodir" ]; then
|
|
git clone "$1" "$repodir" || git clone $2 "$repodir" || \
|
|
err "!clone $1 $2 $repodir $4 $5" #
|
|
elif [ -d "$repodir" ] && [ $# -lt 6 ]; then
|
|
git -C "$repodir" pull || sleep 3 || git -C "$repodir" pull \
|
|
|| sleep 3 || git -C "$repodir" pull || :
|
|
fi
|
|
(
|
|
[ $# -gt 5 ] || git clone "$repodir" "$3" || err "!clone $repodir $3"
|
|
git -C "$3" reset --hard "$4" || err "!reset $1 $2 $3 $4 $5"
|
|
fx_ "eval x_ git -C \"$3\" am" find "$5" -type f
|
|
) || repofail="y"
|
|
|
|
[ "$repofail" = "y" ] && [ $# -lt 6 ] && tmpclone "$@" retry
|
|
[ "$repofail" = "y" ] && err "!clone $1 $2 $3 $4 $5"; :
|
|
}
|
|
|
|
nuke()
|
|
{
|
|
e "config/${1%/}/nuke.list" f missing || while read -r nukefile; do
|
|
rmf="src/${2%/}/$nukefile" && [ -L "$rmf" ] && continue
|
|
e "$rmf" e missing || rm -Rf "$rmf" || err "!rm $rmf, ${2%/}"
|
|
done < "config/${1%/}/nuke.list"; :
|
|
}
|