From 20c8ea7097cea73196ca97cb7c939c43b43b047b Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Tue, 2 Nov 2021 03:15:41 +0100 Subject: scripts: Review patch_git.sh and update-patches-git Fix git-backed package patching and patch updating scripts: * patch_git.sh was entirely broken (since forever?!) due to a missing 'cd' call * update-patches-git formatted the marker commit as patch instead of ignoring it The major improvement of this review is the elimination of the mandatory final marker commit. Putting it before the series being applied works well and allows to add a patch to the series without demanding a git-rebase call to get the marker back on top. While being at it: * Call 'git am --abort' only if there was a git repo already * Call git-commit and git-format-patch with extra options to avoid side-effects from a user's .gitconfig * Explicitly specify output format in git-log to avoid surprises, also split output properly with 'read' * Eliminate fake_hdr variable Signed-off-by: Phil Sutter --- scripts/patch_git.sh | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'scripts/patch_git.sh') diff --git a/scripts/patch_git.sh b/scripts/patch_git.sh index 36a2d6af8..40653a576 100644 --- a/scripts/patch_git.sh +++ b/scripts/patch_git.sh @@ -3,7 +3,7 @@ # Patch sources using git-am, aligning things to use git-format-patch for # update-patches. # -# (c) 2016 Phil Sutter +# (c) 2021 Phil Sutter # # Based on the classic patch.sh, written by: # @@ -36,14 +36,11 @@ if [ ! -d .git ]; then find . -name .gitignore -delete git init git add . - git commit -a --allow-empty \ - --author="OpenADK " \ - -m "OpenADK patch marker: 0000" +elif [ -e .git/rebase-apply ]; then + git am --abort fi -[ -e .git/rebase-apply ] && \ - git am --abort -i=1 +i=0 patch_tmp=$(printf ".git/patch_tmp/%04d" $i) while [ -d $patch_tmp ]; do let "i++" @@ -52,6 +49,10 @@ done mkdir -p $patch_tmp patch_series=$(printf "%04d" $i) +git commit --allow-empty --no-signoff --no-gpg-sign \ + --author="OpenADK " \ + -m "OpenADK patch marker: $patch_series" + cd $wd cd $patchdir for i in $(eval echo ${patchpattern}); do @@ -74,12 +75,15 @@ for i in $(eval echo ${patchpattern}); do esac [ -d "${i}" ] && echo "Ignoring subdirectory ${i}" && continue echo "$(basename $i)" >>${targetdir}/${patch_tmp}/__patchfiles__ - fake_hdr="" patchname="$(basename -s .gz -s .bz -s .bz2 -s .zip -s .Z -s .patch $i)" - if ! grep -q '^Subject: ' ${i}; then - fake_hdr="From: OpenADK \nSubject: [PATCH] ${patchname#[0-9]*-}\n\n" - fi - { echo -en $fake_hdr; ${uncomp} ${i}; } >${targetdir}/${patch_tmp}/${patchname}.patch + { + if ! grep -q '^Subject: ' ${i}; then + echo "From: OpenADK " + echo "Subject: [PATCH] ${patchname#[0-9]*-}" + echo "" + fi + ${uncomp} ${i} + } >${targetdir}/${patch_tmp}/${patchname}.patch cd $patchdir done @@ -93,6 +97,7 @@ done # XXX: this is unsafe and should be dropped at some point am_opts="-C1" +cd ${wd} realpath $patchdir >${targetdir}/${patch_tmp}/__patchdir__ cd ${targetdir} git am $am_opts ${patch_tmp}/*.patch @@ -100,6 +105,3 @@ if [ $? != 0 ] ; then echo "git-am failed! Please fix patches!" exit 1 fi -git commit -a --allow-empty \ - --author="OpenADK " \ - -m "OpenADK patch marker: $patch_series" -- cgit v1.2.3