diff options
author | Leah Rowe <leah@libreboot.org> | 2024-07-17 17:01:15 +0100 |
---|---|---|
committer | Leah Rowe <leah@libreboot.org> | 2024-07-17 17:09:34 +0100 |
commit | 4d5385a14de8f74a54877ec91a877b4f01cf472f (patch) | |
tree | 09346c0b90b154beae3e9228fc26d378d42c5e95 | |
parent | 0cd52fc7fda7557079cdbe1e107e6448e00a0ada (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.sh | 8 |
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() |