diff options
author | Phil Sutter <phil@nwl.cc> | 2021-11-02 03:15:41 +0100 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2021-11-04 02:09:55 +0100 |
commit | 20c8ea7097cea73196ca97cb7c939c43b43b047b (patch) | |
tree | 48485e3bb8da6fd2e415503f01744724e25e08e3 /scripts | |
parent | e56d72d71632eddf2f005debf56073349c011daf (diff) |
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 <phil@nwl.cc>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/patch_git.sh | 32 | ||||
-rw-r--r-- | scripts/update-patches-git | 27 |
2 files changed, 26 insertions, 33 deletions
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 <phil@nwl.cc> +# (c) 2021 Phil Sutter <phil@nwl.cc> # # 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 <wbx@openadk.org>" \ - -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 <wbx@openadk.org>" \ + -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 <wbx@openadk.org>\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 <wbx@openadk.org>" + 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 <wbx@openadk.org>" \ - -m "OpenADK patch marker: $patch_series" diff --git a/scripts/update-patches-git b/scripts/update-patches-git index 8337fa847..6f0bbfedb 100644 --- a/scripts/update-patches-git +++ b/scripts/update-patches-git @@ -3,29 +3,20 @@ # Update patches using git-format-patch from a source tree prepared by # patch_git.sh. # -# (c) 2016 Phil Sutter <phil@nwl.cc> +# (c) 2021 Phil Sutter <phil@nwl.cc> wrkdist=$1 wd=$(pwd) cd "$wrkdist" -top="" -top_series="" -git log --grep="^OpenADK patch marker:" --oneline | while read hash subject; do - [ -n "$top" ] || { - top=$hash - top_series="${subject#OpenADK patch marker: }" - continue - } - bottom=$hash - bottom_series="${subject#OpenADK patch marker: }" - - patchdir=$(<.git/patch_tmp/${top_series}/__patchdir__) +top="HEAD" +git log --grep='^OpenADK patch marker:' --format='%H %s'$logopt | \ + while read hash o p m series; do + patchdir=$(<.git/patch_tmp/${series}/__patchdir__) while read patchfile; do rm ${patchdir}/$patchfile - done < .git/patch_tmp/${top_series}/__patchfiles__ - git format-patch -N -o "$patchdir" ${bottom}..${top} - - top=$bottom - top_series=$bottom_series + done < .git/patch_tmp/${series}/__patchfiles__ + git format-patch --no-numbered --no-signoff --no-cover-letter \ + --no-signature -o "$patchdir" ${hash}..${top} + top=${hash}^ done |