summaryrefslogtreecommitdiff
path: root/include/git.sh
diff options
context:
space:
mode:
Diffstat (limited to 'include/git.sh')
-rw-r--r--[-rwxr-xr-x]include/git.sh138
1 files changed, 57 insertions, 81 deletions
diff --git a/include/git.sh b/include/git.sh
index c1e7b4ba..f8441f33 100755..100644
--- a/include/git.sh
+++ b/include/git.sh
@@ -2,77 +2,43 @@
# Copyright (c) 2020-2021,2023-2024 Leah Rowe <leah@libreboot.org>
# Copyright (c) 2022 Caleb La Grange <thonkpeasant@protonmail.com>
-eval "$(setvars "" _target rev _xm loc url bkup_url depend tree_depend xtree \
- mdir subhash subrepo subrepo_bkup subfile subfile_bkup)"
+eval `setvars "" loc url bkup_url subfile subhash subrepo subrepo_bkup \
+ depend subfile_bkup repofail`
-fetch_project_trees()
+fetch_targets()
{
- _target="$target"
- [ ! -d "src/$project/$project" ] && x_ mkdir -p "src/$project" \
- && fetch_project_repo "$project"
- fetch_config
- e "src/$project/$tree" d || prepare_new_tree; return 0
-}
-
-fetch_config()
-{
- rm -f "$cfgsdir/"*/seen || $err "fetch_config $cfgsdir: !rm seen"
- eval "$(setvars "" xtree tree_depend)"
- while true; do
- eval "$(setvars "" rev tree)"
- _xm="fetch_config $project/$_target"
- load_target_config "$_target"
- [ "$_target" = "$tree" ] && break
- _target="$tree"
- done
[ -n "$tree_depend" ] && [ "$tree_depend" != "$tree" ] && \
- x_ ./update trees -f "$project" "$tree_depend"; return 0
-}
-
-load_target_config()
-{
- [ -f "$cfgsdir/$1/target.cfg" ] || $err "$1: target.cfg missing"
- [ -f "$cfgsdir/$1/seen" ] && $err "$_xm cfg: infinite loop in trees"
-
- . "$cfgsdir/$1/target.cfg" || $err "load_target_config !$cfgsdir/$1"
- touch "$cfgsdir/$1/seen" || $err "load_config $cfgsdir/$1: !mk seen"
-}
+ x_ ./update trees -f "$project" "$tree_depend"
+ e "src/$project/$tree" d && return 0
-prepare_new_tree()
-{
- printf "Creating %s tree %s (%s)\n" "$project" "$tree" "$_target"
-
- git_prep "src/$project/$project" "src/$project/$project" \
- "$PWD/$cfgsdir/$tree/patches" "src/$project/$tree" "update"
- nuke "$project/$tree" "$project/$tree"
+ printf "Creating %s tree %s\n" "$project" "$tree"
+ git_prep "$loc" "$loc" "$PWD/$configdir/$tree/patches" \
+ "src/$project/$tree" u; nuke "$project/$tree" "$project/$tree"
}
-fetch_project_repo()
+fetch_project()
{
- eval "$(setvars "" xtree tree_depend)"
+ eval `setvars "" xtree tree_depend`
+ eval `setcfg "config/git/$project/pkg.cfg"`
- scan_config "$project" "config/git"
- chkvars loc url
+ chkvars url
- [ -n "$xtree" ] && [ ! -d "src/coreboot/$xtree" ] && \
- x_ ./update trees -f coreboot "$xtree"
+ [ -n "$xtree" ] && x_ ./update trees -f coreboot "$xtree"
[ -z "$depend" ] || for d in $depend ; do
- printf "'%s' needs dependency '%s'; grabbing '%s' now\n" \
- "$project" "$d" "$d"
+ printf "'%s' needs '%s'; grabbing '%s'\n" "$project" "$d" "$d"
x_ ./update trees -f $d
done
clone_project
for x in config/git/*; do
- [ -f "$x" ] && nuke "${x##*/}" "src/${x##*/}" 2>/dev/null; \
- continue
- done
+ [ -d "$x" ] && nuke "${x##*/}" "src/${x##*/}" 2>/dev/null
+ done; return 0
}
clone_project()
{
- loc="${loc#src/}"
- loc="src/$loc"
+ loc="$XBMK_CACHE/repo/$project" && singletree "$project" && \
+ loc="src/$project"
printf "Downloading project '%s' to '%s'\n" "$project" "$loc"
e "$loc" d && return 0
@@ -96,17 +62,15 @@ git_prep()
[ "$project" = "coreboot" ] && [ -n "$xtree" ] && [ $# -gt 2 ] && \
[ "$xtree" != "$tree" ] && link_crossgcc "$_loc"
- [ "$xbmk_release" = "y" ] && [ "$_loc" != "src/$project/$project" ] \
- && rmgit "$tmpgit"
+ [ "$XBMK_RELEASE" = "y" ] && \
+ [ "$_loc" != "$XBMK_CACHE/repo/$project" ] && \
+ rmgit "$tmpgit"
move_repo "$_loc"
}
prep_submodules()
{
- mdir="$PWD/config/submodule/$project"
- [ -n "$tree" ] && mdir="$mdir/$tree"
-
[ -f "$mdir/module.list" ] && while read -r msrcdir; do
fetch_submodule "$msrcdir"
done < "$mdir/module.list"; return 0
@@ -115,48 +79,60 @@ prep_submodules()
fetch_submodule()
{
mcfgdir="$mdir/${1##*/}"
- eval "$(setvars "" subhash subrepo subrepo_bkup subfile subfile_bkup)"
+ eval `setvars "" subhash subrepo subrepo_bkup subfile subfile_bkup st`
[ ! -f "$mcfgdir/module.cfg" ] || . "$mcfgdir/module.cfg" || \
$err "! . $mcfgdir/module.cfg"
- st=""
- for _st in repo file; do
- _seval="if [ -n \"\$sub$_st\" ] || [ -n \"\$sub${_st}_bkup\" ]"
- eval "$_seval; then st=\"\$st \$_st\"; fi"
+ 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 both defined"
- [ -z "$st" ] && return 0 # subrepo/subfile not defined
+ st="${st# }" && [ "$st" = "repo file" ] && $err "$mdir: repo+file"
+ [ -z "$st" ] && return 0 # subrepo/subfile not defined
chkvars "sub${st}" "sub${st}_bkup" "subhash"
- if [ "$st" = "repo" ]; then
- rm -Rf "$tmpgit/$1" || $err "!rm '$mdir' '$1'"
- tmpclone "$subrepo" "$subrepo_bkup" "$tmpgit/$1" "$subhash" \
- "$mdir/${1##*/}/patches"
- else
- download "$subfile" "$subfile_bkup" "$tmpgit/$1" "$subhash"
- fi
+ [ "$st" = "file" ] && download "$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()
{
- git clone $1 "$3" || git clone $2 "$3" || $err "!clone $1 $2 $3 $4 $5"
+ [ "$repofail" = "y" ] && \
+ printf "Cached clone failed; trying online.\n" 1>&2
+ 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 [ -d "$repodir" ] && [ $# -lt 6 ]; then
+ git -C "$repodir" pull || sleep 3 || git -C "$repodir" pull \
+ || sleep 3 || git -C "$repodir" pull || :
+ else
+ git clone $1 "$repodir" || git clone $2 "$repodir" || \
+ $err "!clone $1 $2 $repodir $4 $5"
+ fi
+ (
+ [ $# -gt 5 ] || git clone "$repodir" "$3" || $err "!clone $repodir $3"
git -C "$3" reset --hard "$4" || $err "!reset $1 $2 $3 $4 $5"
git_am_patches "$3" "$5"
+ ) || repofail="y"
+
+ [ "$repofail" = "y" ] && [ $# -lt 6 ] && tmpclone $@ retry
+ [ "$repofail" = "y" ] && $err "!clone $1 $2 $3 $4 $5"; :
}
git_am_patches()
{
- for _patch in "$2/"*; do
- [ -L "$_patch" ] || [ ! -f "$_patch" ] || git -C "$1" am \
- "$_patch" || $err "$1 $2: !git am $_patch"; continue
- done
- for _patches in "$2/"*; do
- [ ! -L "$_patches" ] && [ -d "$_patches" ] && \
- git_am_patches "$1" "$_patches"; continue
- done
+ for p in "$2/"*; do
+ [ -L "$p" ] && continue; [ -e "$p" ] || continue
+ [ -d "$p" ] && git_am_patches "$1" "$p" && continue
+ [ ! -f "$p" ] || git -C "$1" am "$p" || $err "$1 $2: !am $p"
+ done; return 0
}
link_crossgcc()