* [ptxdist] [PATCH] Detect changes in package patch series
@ 2018-08-03 1:49 jon
2018-08-03 7:19 ` Uwe Kleine-König
0 siblings, 1 reply; 4+ messages in thread
From: jon @ 2018-08-03 1:49 UTC (permalink / raw)
To: ptxdist; +Cc: Jon Ringle
From: Jon Ringle <jringle@gridpoint.com>
For a long time it has bothered me that if a package's patches were changed
ptxdist would not detect this change and I would often have old versions of
*-dev.tar.gz packages that got used because the packages patches were
updated.
This commit solves this problem.
Here's how it works:
1) In the package rule makefile add `${PKG}_SERIES_MD5 :=`
2) extract the package and from the packages src dir do `git ptx-patches`
This will populate the rule makefile _SERIES_MD5 value
3) Anytime you make a patch change to a package and do `git ptx-patches`
a new value gets populated in the rule makefile, which then causes the
package to be rebuilt and the *-dev.tar.gz package will have a different
sum in the filename
Signed-off-by: Jon Ringle <jringle@gridpoint.com>
---
scripts/git-ptx-patches | 36 +++++++++++++++++++++++++++-------
scripts/lib/ptxd_make_world_patchin.sh | 22 +++++++++++++++++++++
2 files changed, 51 insertions(+), 7 deletions(-)
diff --git a/scripts/git-ptx-patches b/scripts/git-ptx-patches
index f2568f9..738a4ac 100755
--- a/scripts/git-ptx-patches
+++ b/scripts/git-ptx-patches
@@ -2,11 +2,33 @@
PTX_PATCHES_HEADER="# generated by git-ptx-patches"
-function _md5sum() {
- local sum=$(md5sum)
+function _sha1sum() {
+ local sum=$(git rev-parse HEAD)
echo "# $sum git-ptx-patches magic"
}
+update_series_md5() {
+ local makefile="$(readlink -f .ptxdist/rule.make)"
+ source .ptxdist/rule.env
+ set -- $(md5sum .ptxdist/series)
+ local md5="${1}"
+
+ local count=$(grep "^${PKG}_SERIES_MD5[ ]*:=" "${makefile}" 2> /dev/null | wc -l)
+ if [ "${count}" -gt 1 ]; then
+ echo "Error: Could not update patch series md5sum for '${pkg_label}': ${PKG}_SERIES_MD5 found ${count} times in '${makefile}'."
+ exit 1
+ fi
+ local current_md5=$(grep "^PUGIXML_SERIES_MD5[ ]*:= " ${makefile} |cut -f2 -d=|xargs)
+ if [ "${current_md5}" != "${md5}" ]; then
+ sed -i "s/^\(\<${PKG}_SERIES_MD5[ ]*:=\) *[a-f0-9]*\$/\1 ${md5}/" "${makefile}"
+ if ! grep -q "${md5}\$" .ptxdist/rule.make; then
+ echo "Warning: ${PKG}_SERIES_MD5 is missing from '${makefile}'."
+ else
+ echo "New patch series checksum for '${pkg_label}': ${md5} in '${makefile}'."
+ fi
+ fi
+}
+
if [ ! -L .ptxdist/patches ]; then
echo "Error: This is not patched by ptxdist. Aborting."
exit 1
@@ -22,10 +44,8 @@ tag=base
if grep -q "$PTX_PATCHES_HEADER" .ptxdist/series; then
echo "Found series file generated by git-ptx-patches."
- lines=$(wc -l < .ptxdist/series)
- lines=$[lines-1]
- magic=$(head -n$lines .ptxdist/series | _md5sum)
- if grep -q "^$magic" .ptxdist/series; then
+ magic=$(git rev-parse HEAD)
+ if grep -q "^# $magic" .ptxdist/series; then
remove_old=yes
else
echo "Warning: .ptxdist/series was modified."
@@ -132,7 +152,9 @@ cat .ptxdist/series.0 > .ptxdist/series
git format-patch -M -N $GIT_EXTRA_ARGS ${tagopt} -o .ptxdist/patches/ ${range} | sed -e 's,^.ptxdist/patches/,,' > .ptxdist/series.auto
cat .ptxdist/series.auto >> .ptxdist/series
cat .ptxdist/series.1 >> .ptxdist/series
-cat .ptxdist/series | _md5sum >> .ptxdist/series
+cat .ptxdist/series | _sha1sum >> .ptxdist/series
+
+update_series_md5
# The first line of the patch is 'From <some-git-hash> ...'
# remove it to avoid unnecessary changes in the patch files.
diff --git a/scripts/lib/ptxd_make_world_patchin.sh b/scripts/lib/ptxd_make_world_patchin.sh
index e57da64..25decf0 100644
--- a/scripts/lib/ptxd_make_world_patchin.sh
+++ b/scripts/lib/ptxd_make_world_patchin.sh
@@ -221,6 +221,8 @@ ptxd_make_world_patchin_apply()
pkg_patch_series \
pkg_patch_tool
+ local PKG="$(ptxd_name_to_NAME "${pkg_label}")"
+
if [[ "${pkg_url}" =~ ^file:// ]]; then
local url="$(ptxd_file_url_path "${pkg_url}")"
# local directories are not intended to be patched
@@ -255,6 +257,16 @@ ptxd_make_world_patchin_apply()
mkdir "${pkg_patchin_dir}/.ptxdist" &&
#
+ # create a ".ptxdist/rule.make" link pointing to the packages rule makefile
+ #
+ ln -s "${pkg_makefile}" "${pkg_patchin_dir}/.ptxdist/rule.make" &&
+ (
+ cat <<-EOF
+ PKG=${PKG}
+ pkg_label=${pkg_label}
+ EOF
+ ) > "${pkg_patchin_dir}/.ptxdist/rule.env" &&
+ #
# create a ".ptxdist/patches" link pointing to the directory
# containing the patches
#
@@ -341,6 +353,7 @@ ptxd_make_world_patchin_apply()
echo
echo "pkg_patch_dir: '$(ptxd_print_path "${pkg_patch_dir:-<none>}")'"
echo "pkg_patch_series: '$(ptxd_print_path "${pkg_patch_series:-<none>}")'"
+ echo "pkg_makefile: '$(ptxd_print_path "${pkg_makefile:-<none>}")'"
echo
# apply patches if series file is available
@@ -437,6 +450,7 @@ export -f ptxd_make_world_autogen
# pkg_patchin_dir where to apply the patches
# pkg_patch_dir path to dir that contains the patches
# empty if no patches should be applied
+# pkg_makefile the package's rule makefile
#
ptxd_make_world_patchin_init()
{
@@ -463,6 +477,14 @@ ptxd_make_world_patchin_init()
return
fi
pkg_patch_dir="${ptxd_reply}"
+
+ #
+ # find rules make
+ #
+ if ! ptxd_find_pkg_makefile "${pkg_label}" ; then
+ return
+ fi
+ pkg_makefile="$(readlink -f "${ptxd_reply}")"
}
export -f ptxd_make_world_patchin_init
--
1.9.1
_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [ptxdist] [PATCH] Detect changes in package patch series
2018-08-03 1:49 [ptxdist] [PATCH] Detect changes in package patch series jon
@ 2018-08-03 7:19 ` Uwe Kleine-König
2018-08-03 7:36 ` Jon Ringle
0 siblings, 1 reply; 4+ messages in thread
From: Uwe Kleine-König @ 2018-08-03 7:19 UTC (permalink / raw)
To: ptxdist; +Cc: Jon Ringle
Hello Jon,
On Thu, Aug 02, 2018 at 09:49:59PM -0400, jon@ringle.org wrote:
> diff --git a/scripts/git-ptx-patches b/scripts/git-ptx-patches
> index f2568f9..738a4ac 100755
> --- a/scripts/git-ptx-patches
> +++ b/scripts/git-ptx-patches
> @@ -2,11 +2,33 @@
>
> PTX_PATCHES_HEADER="# generated by git-ptx-patches"
>
> -function _md5sum() {
> - local sum=$(md5sum)
> +function _sha1sum() {
> + local sum=$(git rev-parse HEAD)
> echo "# $sum git-ptx-patches magic"
> }
>
> +update_series_md5() {
> + local makefile="$(readlink -f .ptxdist/rule.make)"
> + source .ptxdist/rule.env
> + set -- $(md5sum .ptxdist/series)
> + local md5="${1}"
Is this better than:
local md5="$(md5sum .ptxdist/series)"
?
If I understand this right, this catches updates to the patch series
that change the series but if I only amend a patch this goes unnoticed.
Given that md5 is considered weak today, maybe use something more modern
instead (e.g. sha256?).
> + local count=$(grep "^${PKG}_SERIES_MD5[ ]*:=" "${makefile}" 2> /dev/null | wc -l)
> + if [ "${count}" -gt 1 ]; then
> + echo "Error: Could not update patch series md5sum for '${pkg_label}': ${PKG}_SERIES_MD5 found ${count} times in '${makefile}'."
> + exit 1
> + fi
> + local current_md5=$(grep "^PUGIXML_SERIES_MD5[ ]*:= " ${makefile} |cut -f2 -d=|xargs)
PUGIXML?
> + if [ "${current_md5}" != "${md5}" ]; then
> + sed -i "s/^\(\<${PKG}_SERIES_MD5[ ]*:=\) *[a-f0-9]*\$/\1 ${md5}/" "${makefile}"
> + if ! grep -q "${md5}\$" .ptxdist/rule.make; then
> + echo "Warning: ${PKG}_SERIES_MD5 is missing from '${makefile}'."
> + else
> + echo "New patch series checksum for '${pkg_label}': ${md5} in '${makefile}'."
> + fi
> + fi
> +}
> +
> if [ ! -L .ptxdist/patches ]; then
> echo "Error: This is not patched by ptxdist. Aborting."
> exit 1
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [ptxdist] [PATCH] Detect changes in package patch series
2018-08-03 7:19 ` Uwe Kleine-König
@ 2018-08-03 7:36 ` Jon Ringle
2018-08-03 7:57 ` Jon Ringle
0 siblings, 1 reply; 4+ messages in thread
From: Jon Ringle @ 2018-08-03 7:36 UTC (permalink / raw)
To: ptxdist
On Fri, Aug 3, 2018 at 3:19 AM Uwe Kleine-König
<u.kleine-koenig@pengutronix.de> wrote:
>
> Hello Jon,
>
> On Thu, Aug 02, 2018 at 09:49:59PM -0400, jon@ringle.org wrote:
> > diff --git a/scripts/git-ptx-patches b/scripts/git-ptx-patches
> > index f2568f9..738a4ac 100755
> > --- a/scripts/git-ptx-patches
> > +++ b/scripts/git-ptx-patches
> > @@ -2,11 +2,33 @@
> >
> > PTX_PATCHES_HEADER="# generated by git-ptx-patches"
> >
> > -function _md5sum() {
> > - local sum=$(md5sum)
> > +function _sha1sum() {
> > + local sum=$(git rev-parse HEAD)
> > echo "# $sum git-ptx-patches magic"
> > }
> >
> > +update_series_md5() {
> > + local makefile="$(readlink -f .ptxdist/rule.make)"
> > + source .ptxdist/rule.env
> > + set -- $(md5sum .ptxdist/series)
> > + local md5="${1}"
>
> Is this better than:
>
> local md5="$(md5sum .ptxdist/series)"
>
> ?
I was modeling the pattern found in `ptxd_make_world_update_md5()`
found in scripts/lib/ptxd_make_world_check_src.sh:
| ptxd_make_world_update_md5() {
| local PKG="$(ptxd_name_to_NAME "${pkg_label}")"
| set -- $(md5sum "${pkg_src}")
| local md5="${1}"
I can change it to the way you are suggesting, though
>
> If I understand this right, this catches updates to the patch series
> that change the series but if I only amend a patch this goes unnoticed.
There are two different sums going on here. This one captures the sum
of the series file, but in the next 2 hunks that you trimmed from your
response is the embedded in the series file the sha1 of the HEAD git
commit obtained via `git rev-parse HEAD` in the function _sha1sum.
This will also capture changes to commits in the git repo where the
subject line stays the same and therefore doesn't change the series
patch filename, but does change the HEAD sha1:
@@ -22,10 +44,8 @@ tag=base
if grep -q "$PTX_PATCHES_HEADER" .ptxdist/series; then
echo "Found series file generated by git-ptx-patches."
- lines=$(wc -l < .ptxdist/series)
- lines=$[lines-1]
- magic=$(head -n$lines .ptxdist/series | _md5sum)
- if grep -q "^$magic" .ptxdist/series; then
+ magic=$(git rev-parse HEAD)
+ if grep -q "^# $magic" .ptxdist/series; then
remove_old=yes
else
echo "Warning: .ptxdist/series was modified."
@@ -132,7 +152,9 @@ cat .ptxdist/series.0 > .ptxdist/series
git format-patch -M -N $GIT_EXTRA_ARGS ${tagopt} -o .ptxdist/patches/
${range} | sed -e 's,^.ptxdist/patches/,,' > .ptxdist/series.auto
cat .ptxdist/series.auto >> .ptxdist/series
cat .ptxdist/series.1 >> .ptxdist/series
-cat .ptxdist/series | _md5sum >> .ptxdist/series
+cat .ptxdist/series | _sha1sum >> .ptxdist/series
+
+update_series_md5
>
> Given that md5 is considered weak today, maybe use something more modern
> instead (e.g. sha256?).
>
> > + local count=$(grep "^${PKG}_SERIES_MD5[ ]*:=" "${makefile}" 2> /dev/null | wc -l)
> > + if [ "${count}" -gt 1 ]; then
> > + echo "Error: Could not update patch series md5sum for '${pkg_label}': ${PKG}_SERIES_MD5 found ${count} times in '${makefile}'."
> > + exit 1
> > + fi
> > + local current_md5=$(grep "^PUGIXML_SERIES_MD5[ ]*:= " ${makefile} |cut -f2 -d=|xargs)
>
> PUGIXML?
Opps... that was a local package I was testing the feature with. I will fix :)
-Jon
_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [ptxdist] [PATCH] Detect changes in package patch series
2018-08-03 7:36 ` Jon Ringle
@ 2018-08-03 7:57 ` Jon Ringle
0 siblings, 0 replies; 4+ messages in thread
From: Jon Ringle @ 2018-08-03 7:57 UTC (permalink / raw)
To: ptxdist
On Fri, Aug 3, 2018 at 3:36 AM Jon Ringle <jon@ringle.org> wrote:
>
> On Fri, Aug 3, 2018 at 3:19 AM Uwe Kleine-König
> <u.kleine-koenig@pengutronix.de> wrote:
> >
> > Hello Jon,
> >
> > On Thu, Aug 02, 2018 at 09:49:59PM -0400, jon@ringle.org wrote:
> > > diff --git a/scripts/git-ptx-patches b/scripts/git-ptx-patches
> > > index f2568f9..738a4ac 100755
> > > --- a/scripts/git-ptx-patches
> > > +++ b/scripts/git-ptx-patches
> > > @@ -2,11 +2,33 @@
> > >
> > > PTX_PATCHES_HEADER="# generated by git-ptx-patches"
> > >
> > > -function _md5sum() {
> > > - local sum=$(md5sum)
> > > +function _sha1sum() {
> > > + local sum=$(git rev-parse HEAD)
> > > echo "# $sum git-ptx-patches magic"
> > > }
> > >
> > > +update_series_md5() {
> > > + local makefile="$(readlink -f .ptxdist/rule.make)"
> > > + source .ptxdist/rule.env
> > > + set -- $(md5sum .ptxdist/series)
> > > + local md5="${1}"
> >
> > Is this better than:
> >
> > local md5="$(md5sum .ptxdist/series)"
> >
> > ?
>
> I was modeling the pattern found in `ptxd_make_world_update_md5()`
> found in scripts/lib/ptxd_make_world_check_src.sh:
> | ptxd_make_world_update_md5() {
> | local PKG="$(ptxd_name_to_NAME "${pkg_label}")"
> | set -- $(md5sum "${pkg_src}")
> | local md5="${1}"
>
> I can change it to the way you are suggesting, though
local sha256="$(sha256sum .ptxdist/series)"
does not work, because this assigns to sha256 the value
"36169a70924328a204978a3bee7100efa526059b41a11572bdf210048109a808
.ptxdist/series"
_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-08-03 7:58 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-08-03 1:49 [ptxdist] [PATCH] Detect changes in package patch series jon
2018-08-03 7:19 ` Uwe Kleine-König
2018-08-03 7:36 ` Jon Ringle
2018-08-03 7:57 ` Jon Ringle
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox