git.sh: allow patching submodules

for single-tree project (e.g. flashprog):
config/submodule/PROJECT/MODNAME/patches

for multi-tree project (e.g. coreboot):
config/submodule/PROJECT/TREE/MODNAME/patches

MODNAME is e.g.:
3rdparty/vboot directory in coreboot: would become vboot
(the submodule codepath is filtered to up to the final slash)

another example:
submodire src dir 3rdparty/foo/bar
MODNAME would be "bar"

Add whatever patches you like to a given submodule.

An example patch is included in this commit.

Signed-off-by: Leah Rowe <leah@libreboot.org>
20240612_branch
Leah Rowe 2024-05-20 00:10:27 +01:00
parent 00e00a18d0
commit 1e54db2989
2 changed files with 47 additions and 0 deletions

View File

@ -0,0 +1,26 @@
From 68f99140dda455a4f4e9d73df6d7b0a504494e95 Mon Sep 17 00:00:00 2001
From: Leah Rowe <info@minifree.org>
Date: Sun, 19 May 2024 23:35:52 +0100
Subject: [PATCH 1/1] test patch
Signed-off-by: Leah Rowe <info@minifree.org>
---
Makefile | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Makefile b/Makefile
index 4cb265b2..ef29489f 100644
--- a/Makefile
+++ b/Makefile
@@ -2,6 +2,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+# test
+
# This Makefile normally builds in a 'build' subdir, but use
#
# make BUILD=<dir>
--
2.39.2

View File

@ -93,6 +93,9 @@ git_prep()
if [ "$project" != "coreboot" ] || [ $# -gt 2 ]; then
[ ! -f "$tmpgit/.gitmodules" ] || git -C "$tmpgit" submodule \
update --init --checkout || $err "git_prep $_loc: !submod"
patch_submodules
if [ "$project" = "coreboot" ] && [ -n "$xtree" ] && \
[ "$xtree" != "$tree" ]; then
(
@ -114,6 +117,24 @@ git_prep()
x_ ./update project trees -f coreboot "$xtree"; return 0
}
patch_submodules()
{
moddir="${PWD}/config/submodule/$project"
[ -n "$tree" ] && moddir="$moddir/$tree"
[ -d "$moddir" ] || return 0
git -C "$tmpgit" submodule status | awk '{print $2}' > \
"$tmpdir/modules" || $err "$moddir: cannot list submodules"
while read -r modsrcdir; do
modname="${modsrcdir##*/}"
modpatchdir="$moddir/$modname/patches"
[ -d "$modpatchdir" ] || continue
git_am_patches "$tmpgit/$modsrcdir" "$modpatchdir"
done < "$tmpdir/modules"
}
git_am_patches()
{
for _patch in "$2/"*; do