12d0c48ad disabled silent output for eapply, in order to obtain fuzz
factors in build logs.  However, this also causes eapply to report all
patched files which can make logs unreadable when there are no fuzz
factors to be reported.  Instead, use verbose output only when applying
the patch with -F0 fails.

To achieve that, attempt to apply each patch with -F0 --dry-run first.
If this succeeds, just silently apply the patch for real.  If it
doesn't, output an explicit eqawarn that the patch does not apply
cleanly and retry with the default fuzz factor and verbose output.
Non-silenced output applies both to successful application with fuzz
and to failure.

Signed-off-by: Michał Górny <mgo...@gentoo.org>
---
 bin/phase-helpers.sh | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

Changes in v2:
- added original path to output

diff --git a/bin/phase-helpers.sh b/bin/phase-helpers.sh
index 60f8d3243..b5691bd70 100644
--- a/bin/phase-helpers.sh
+++ b/bin/phase-helpers.sh
@@ -995,8 +995,20 @@ if ___eapi_has_eapply; then
                        # -f to avoid interactivity
                        # -g0 to guarantee no VCS interaction
                        # --no-backup-if-mismatch not to pollute the sources
-                       ${patch_cmd} -p1 -f -g0 --no-backup-if-mismatch \
-                               "${patch_options[@]}" < "${f}"
+                       local all_opts=(
+                               -p1 -f -g0 --no-backup-if-mismatch
+                               "${patch_options[@]}"
+                       )
+                       # try applying with -F0 first, output a verbose warning
+                       # if fuzz factor is necessary
+                       if ${patch_cmd} "${all_opts[@]}" --dry-run -s -F0 \
+                                       < "${f}" &>/dev/null; then
+                               all_opts+=( -s -F0 )
+                       else
+                               eqawarn "    ${f}: patch failed to apply 
without a fuzz factor, please rebase"
+                       fi
+
+                       ${patch_cmd} "${all_opts[@]}" < "${f}"
                        failed=${?}
                        if ! eend "${failed}"; then
                                __helpers_die "patch -p1 ${patch_options[*]} 
failed with ${f}"
-- 
2.24.0


Reply via email to