Hi Jon, looks very useful. Just a little question: Does this only work when using ptxdist together with git?
Kind regards Michael -----Ursprüngliche Nachricht----- Von: ptxdist [mailto:[email protected]] Im Auftrag von [email protected] Gesendet: Freitag, 3. August 2018 10:00 An: [email protected] Cc: Jon Ringle <[email protected]> Betreff: [ptxdist] [PATCH v2] Detect changes in package patch series From: Jon Ringle <[email protected]> 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 <[email protected]> --- scripts/git-ptx-patches | 38 +++++++++++++++++++++++++++------- scripts/lib/ptxd_make_world_patchin.sh | 22 ++++++++++++++++++++ 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/scripts/git-ptx-patches b/scripts/git-ptx-patches index f2568f9..d37c936 100755 --- a/scripts/git-ptx-patches +++ b/scripts/git-ptx-patches @@ -2,9 +2,31 @@ PTX_PATCHES_HEADER="# generated by git-ptx-patches" -function _md5sum() { - local sum=$(md5sum) - echo "# $sum git-ptx-patches magic" +function _gitsha1sum() { + local sha1=$(git rev-parse HEAD) + echo "# $sha1 git-ptx-patches magic" +} + +update_series_sha256() { + local makefile="$(readlink -f .ptxdist/rule.make)" + source .ptxdist/rule.env + set -- $(sha256sum .ptxdist/series) + local sha256="${1}" + + local count=$(grep "^${PKG}_SERIES_SHA256[ ]*:=" "${makefile}" 2> /dev/null | wc -l) + if [ "${count}" -gt 1 ]; then + echo "Error: Could not update patch series sha256sum for '${pkg_label}': ${PKG}_SERIES_SHA256 found ${count} times in '${makefile}'." + exit 1 + fi + local current_sha256=$(grep "^${PKG}_SERIES_SHA256[ ]*:= " "${makefile}" |cut -f2 -d=|xargs) + if [ "${current_sha256}" != "${sha256}" ]; then + sed -i "s/^\(\<${PKG}_SERIES_SHA256[ ]*:=\) *[a-f0-9]*\$/\1 ${sha256}/" "${makefile}" + if ! grep -q "${sha256}\$" "${makefile}"; then + echo "Warning: ${PKG}_SERIES_SHA256 is missing from '${makefile}'." + else + echo "New patch series checksum for '${pkg_label}': ${sha256} in '${makefile}'." + fi + fi } if [ ! -L .ptxdist/patches ]; then @@ -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 | _gitsha1sum >> .ptxdist/series + +update_series_sha256 # 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 [email protected] _______________________________________________ ptxdist mailing list [email protected]
