summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2024-07-17 13:01:12 +0100
committerLeah Rowe <leah@libreboot.org>2024-07-17 13:01:12 +0100
commit9f09728acac7e36404cfd8c6b03a38281d47b75b (patch)
treef9a022ad74ca863bfab7f425907ec26ee45e5470 /include
parentf367afabc1a9c35cee749efe5540af09914f14e2 (diff)
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>
Diffstat (limited to 'include')
-rw-r--r--include/git.sh10
1 files changed, 9 insertions, 1 deletions
diff --git a/include/git.sh b/include/git.sh
index 58f62ef3..25db40b8 100644
--- a/include/git.sh
+++ b/include/git.sh
@@ -103,7 +103,15 @@ fetch_submodule()
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_am_patches "$3" "$5"
}