fetchpatch: fail on empty patch

Since this is probably never the desired case and has led to actual
issues, see the comments at:

af1313e915

This might also happen when pulling a patch from GitHub or a similar web
interface without explicitly selecting the "raw" format.
This commit is contained in:
Timo Kaufmann 2018-07-15 13:57:37 +02:00
parent 1ddab0efb1
commit 8f9b985e60

View File

@ -10,6 +10,10 @@
fetchurl ({ fetchurl ({
postFetch = '' postFetch = ''
tmpfile="$TMPDIR/${args.sha256}" tmpfile="$TMPDIR/${args.sha256}"
if [ ! -s "$out" ]; then
echo "error: Fetched patch file '$out' is empty!" 1>&2
exit 1
fi
"${patchutils}/bin/lsdiff" "$out" \ "${patchutils}/bin/lsdiff" "$out" \
| sort -u | sed -e 's/[*?]/\\&/g' \ | sort -u | sed -e 's/[*?]/\\&/g' \
| xargs -I{} \ | xargs -I{} \
@ -21,12 +25,26 @@ fetchurl ({
--addnewprefix=b/${extraPrefix} \ --addnewprefix=b/${extraPrefix} \
''} \ ''} \
--clean "$out" > "$tmpfile" --clean "$out" > "$tmpfile"
if [ ! -s "$tmpfile" ]; then
echo "error: Normalized patch '$tmpfile' is empty (while the fetched file was not)!" 1>&2
echo "Did you maybe fetch a HTML representation of a patch instead of a raw patch?" 1>&2
echo "Fetched file was:" 1>&2
cat "$out" 1>&2
exit 1
fi
${patchutils}/bin/filterdiff \ ${patchutils}/bin/filterdiff \
-p1 \ -p1 \
${builtins.toString (builtins.map (x: "-x ${lib.escapeShellArg x}") excludes)} \ ${builtins.toString (builtins.map (x: "-x ${lib.escapeShellArg x}") excludes)} \
${builtins.toString (builtins.map (x: "-i ${lib.escapeShellArg x}") includes)} \ ${builtins.toString (builtins.map (x: "-i ${lib.escapeShellArg x}") includes)} \
"$tmpfile" > "$out" "$tmpfile" > "$out"
${args.postFetch or ""} ${args.postFetch or ""}
if [ ! -s "$out" ]; then
echo "error: Filtered patch '$out$' is empty (while the original patch file was not)!" 1>&2
echo "Check your includes and excludes." 1>&2
echo "Normalizd patch file was:" 1>&2
cat "$tmpfile" 1>&2
exit 1
fi
''; '';
meta.broken = excludes != [] && includes != []; meta.broken = excludes != [] && includes != [];
} // builtins.removeAttrs args ["stripLen" "extraPrefix" "excludes" "includes" "postFetch"]) } // builtins.removeAttrs args ["stripLen" "extraPrefix" "excludes" "includes" "postFetch"])