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>
This commit is contained in:
Leah Rowe
2024-05-20 00:10:27 +01:00
parent 00e00a18d0
commit 1e54db2989
2 changed files with 47 additions and 0 deletions
+21
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