summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2024-07-17 17:01:15 +0100
committerLeah Rowe <leah@libreboot.org>2024-07-17 17:09:34 +0100
commit4d5385a14de8f74a54877ec91a877b4f01cf472f (patch)
tree09346c0b90b154beae3e9228fc26d378d42c5e95
parent0cd52fc7fda7557079cdbe1e107e6448e00a0ada (diff)
git.sh: try direct clone if cached git fails
normally, a project is cached at repo/PROJECT/, and cloned from there to the final destination. errors lead to a calling of $err, but this will result in a return if done from inside a subshell, of non-zero value, so use this to re-try with a 6th argument when calling tmpclone(). in most cases, this fallback will never kick in, but it will kick in resetting or patching the cached clone fails; specifically, we are interested in the reset part. a given project name may change repositories in lbmk at a given time. if this happens, and the old one is cached, the overall result of this patch is that lbmk will fall back to the old behaviour, where git urls are tried directly, without caching. Signed-off-by: Leah Rowe <leah@libreboot.org>
-rw-r--r--include/git.sh8
1 files changed, 5 insertions, 3 deletions
diff --git a/include/git.sh b/include/git.sh
index ba58a5ba..ff8b0d97 100644
--- a/include/git.sh
+++ b/include/git.sh
@@ -100,18 +100,20 @@ fetch_submodule()
tmpclone()
{
- repodir="repo/${1##*/}"
+ repodir="repo/${1##*/}" && [ $# -gt 5 ] && repodir="$3"
x_ mkdir -p "repo"
- if [ -d "$repodir" ]; then
+ 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
- git clone "$repodir" "$3" || $err "!clone $repodir $3"
+ (
+ [ $# -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"
+ ) || [ $# -gt 5 ] || tmpclone $@ retry; :
}
git_am_patches()