svn commit: r533459 - head/Mk/Scripts
Bryan Drewery
bdrewery at FreeBSD.org
Mon May 4 17:49:45 UTC 2020
On 4/30/2020 7:48 AM, Mathieu Arnold wrote:
> Author: mat
> Date: Thu Apr 30 14:48:22 2020
> New Revision: 533459
> URL: https://svnweb.freebsd.org/changeset/ports/533459
>
> Log:
> When one patch fails, continue with appling patches.
>
> This makes the process of make patch, fix fallout, make makepatch much
> easier as only one iteration is required.
>
> While there, refactor things around, and streamline messages passed
> between functions.
>
> PR: 244626
> Reported by: cem
>
Will this fail between stages? If a files/patch-* patch fails it should
not move on to extra patches as then makepatch / diffing will be wrong.
Even patch-* can lead to being wrong when considering local (not in
ports tree) patches.
I don't think this is good default behavior.
> Modified:
> head/Mk/Scripts/do-patch.sh (contents, props changed)
>
> Modified: head/Mk/Scripts/do-patch.sh
> ==============================================================================
> --- head/Mk/Scripts/do-patch.sh Thu Apr 30 14:47:59 2020 (r533458)
> +++ head/Mk/Scripts/do-patch.sh Thu Apr 30 14:48:22 2020 (r533459)
> @@ -17,6 +17,28 @@ validate_env dp_BZCAT dp_CAT dp_DISTDIR dp_ECHO_MSG dp
>
> set -u
>
> +has_failed=""
> +
> +cat_file() {
> + case "$1" in
> + *.Z|*.gz)
> + ${dp_GZCAT} "$1"
> + ;;
> + *.bz2)
> + ${dp_BZCAT} "$1"
> + ;;
> + *.xz)
> + ${dp_XZCAT} "$1"
> + ;;
> + *.zip)
> + ${dp_UNZIP_NATIVE_CMD} -p "$1"
> + ;;
> + *)
> + ${dp_CAT} "$1"
> + ;;
> + esac
> +}
> +
> apply_one_patch() {
> local file="$1"
> local msg="$2"
> @@ -31,26 +53,13 @@ apply_one_patch() {
> esac
>
> if [ -n "${msg}" ]; then
> - ${dp_ECHO_MSG} "===> ${msg} ${file}${patch_strip:+ with ${patch_strip}}"
> + ${dp_ECHO_MSG} "===> Applying ${msg} ${file}${patch_strip:+ with ${patch_strip}}"
> fi
>
> - case "${file}" in
> - *.Z|*.gz)
> - ${dp_GZCAT} "${file}"
> - ;;
> - *.bz2)
> - ${dp_BZCAT} "${file}"
> - ;;
> - *.xz)
> - ${dp_XZCAT} "${file}"
> - ;;
> - *.zip)
> - ${dp_UNZIP_NATIVE_CMD} -p "${file}"
> - ;;
> - *)
> - ${dp_CAT} "${file}"
> - ;;
> - esac | do_patch "$@" ${patch_strip}
> + if ! cat_file "$file" | do_patch "$@" ${patch_strip}; then
> + ${dp_ECHO_MSG} "===> FAILED Applying ${msg} ${file}${patch_strip:+ with ${patch_strip}}"
> + has_failed=1
> + fi
> }
>
> do_patch() {
> @@ -61,6 +70,7 @@ patch_from_directory() {
> local dir="$1"
> local msg="$2"
> local patches_applied=""
> + local patches_failed=""
>
> if [ -d "${dir}" ]; then
> cd "${dir}"
> @@ -73,24 +83,29 @@ patch_from_directory() {
> for i in patch-*; do
> case ${i} in
> *.orig|*.rej|*~|*,v)
> - ${dp_ECHO_MSG} "===> Ignoring patchfile ${i}"
> + ${dp_ECHO_MSG} "====> IGNORING patchfile ${i}"
> ;;
> *)
> if [ -n "${dp_PATCH_DEBUG_TMP}" ]; then
> - ${dp_ECHO_MSG} "===> Applying ${msg} patch ${i}"
> + ${dp_ECHO_MSG} "====> Applying ${msg} patch ${i}"
> fi
> - if do_patch ${dp_PATCH_ARGS} < ${i}; then
> + if cat_file "$i" | do_patch ${dp_PATCH_ARGS}; then
> patches_applied="${patches_applied} ${i}"
> else
> - ${dp_ECHO_MSG} "=> ${msg} patch ${i} failed to apply cleanly."
> - if [ -n "${patches_applied}" -a "${dp_PATCH_SILENT}" != "yes" ]; then
> - ${dp_ECHO_MSG} "=> Patch(es) ${patches_applied} applied cleanly."
> - fi
> - false
> + ${dp_ECHO_MSG} "====> FAILED Applying ${msg} patch ${i}"
> + patches_failed="${patches_failed} ${i}"
> fi
> ;;
> esac
> done
> +
> + if [ -n "${patches_applied}" -a "${dp_PATCH_SILENT}" != "yes" ]; then
> + ${dp_ECHO_MSG} "===> Cleanly applied ${msg} patch(es) ${patches_applied}"
> + fi
> + if [ -n "${patches_failed}" -a "${dp_PATCH_SILENT}" != "yes" ]; then
> + ${dp_ECHO_MSG} "===> FAILED to apply cleanly ${msg} patch(es) ${patches_failed}"
> + has_failed=1
> + fi
> fi
> fi
> }
> @@ -100,7 +115,7 @@ if [ -n "${dp_PATCHFILES}" ]; then
> cd "${dp_DISTDIR}"
> for i in ${dp_PATCHFILES}; do
> apply_one_patch "${i}" \
> - "${dp_PATCH_DEBUG_TMP:+ Applying distribution patch}" \
> + "${dp_PATCH_DEBUG_TMP:+ distribution patch}" \
> ${dp_PATCH_DIST_ARGS}
> done
> fi
> @@ -112,7 +127,7 @@ if [ -n "${dp_EXTRA_PATCHES}" ]; then
> "extra patch"
> else
> apply_one_patch "${i}" \
> - "Applying extra patch" \
> + "extra patch" \
> ${dp_PATCH_ARGS}
> fi
> done
> @@ -122,5 +137,11 @@ patch_from_directory "${dp_PATCHDIR}" "${dp_OPSYS}"
>
> if [ -n "${dp_EXTRA_PATCH_TREE}" ]; then
> patch_from_directory "${dp_EXTRA_PATCH_TREE}/${dp_PKGORIGIN}" "local"
> +fi
> +
> +if [ -n "$has_failed" ]; then
> + ${dp_ECHO_MSG} "==> SOME PATCHES FAILED TO APPLY CLEANLY."
> + ${dp_ECHO_MSG} "==> Look for FAILED messages above."
> + false
> fi
>
>
--
Regards,
Bryan Drewery
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 618 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freebsd.org/pipermail/svn-ports-all/attachments/20200504/e39c462f/attachment.sig>
More information about the svn-ports-all
mailing list