git.sh: cache git downloads to repo/

do it based on the URL, e.g. https://review.coreboot.org/coreboot
becomes repo/coreboot

the downside is if you have two projects with repo urls specifying
the same string at the end, but this isn't the case at the moment
and likely won't be the case, but it's a theoretical issue.

this saves on bandwidth when downloading identical submodule repos
between multiple trees within the same multi-tree project

for example, coreboot 3rdparty/vboot is no longer downloaded more
than once, instead cloned locally on subsequent downloads.

if repo/DIR exists, git-pull is attempted, but errors do not result
in a non-zero exit, by design.

Signed-off-by: Leah Rowe <leah@libreboot.org>
audit2
Leah Rowe 2024-07-17 13:01:12 +01:00 committed by Leah Rowe
parent 2823ccc438
commit 3590a53ed1
2 changed files with 10 additions and 1 deletions

1
.gitignore vendored
View File

@ -1,6 +1,7 @@
*~ *~
*.o *.o
/cbmk.err.log /cbmk.err.log
/repo/
/docs/ /docs/
/util/dell-flash-unlock/dell_flash_unlock /util/dell-flash-unlock/dell_flash_unlock
/TODO /TODO

View File

@ -103,7 +103,15 @@ fetch_submodule()
tmpclone() tmpclone()
{ {
git clone $1 "$3" || git clone $2 "$3" || $err "!clone $1 $2 $3 $4 $5" repodir="repo/${1##*/}"
x_ mkdir -p "repo"
if [ -d "$repodir" ]; then
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"
git -C "$3" reset --hard "$4" || $err "!reset $1 $2 $3 $4 $5" git -C "$3" reset --hard "$4" || $err "!reset $1 $2 $3 $4 $5"
git_am_patches "$3" "$5" git_am_patches "$3" "$5"
} }