diff --git a/pkgs/applications/science/math/sage/patches/revert-269c1e1551285.patch b/pkgs/applications/science/math/sage/patches/revert-269c1e1551285.patch deleted file mode 100644 index b57e48b86dec..000000000000 --- a/pkgs/applications/science/math/sage/patches/revert-269c1e1551285.patch +++ /dev/null @@ -1,14 +0,0 @@ -reverted: ---- b/src/sage/geometry/polyhedron/backend_cdd.py -+++ a/src/sage/geometry/polyhedron/backend_cdd.py -@@ -154,7 +154,9 @@ - ... [0.62, -1.38, 0.38],[0.144, -1.04, 0.04], - ... [0.1309090909, -1.0290909091, 0.04]] - sage: Polyhedron(point_list) -+ Traceback (most recent call last): -+ ... -+ ValueError: *Error: Numerical inconsistency is found. Use the GMP exact arithmetic. -- A 3-dimensional polyhedron in RDF^3 defined as the convex hull of 14 vertices - sage: Polyhedron(point_list, base_ring=QQ) - A 3-dimensional polyhedron in QQ^3 defined as the convex hull of 14 vertices - """ diff --git a/pkgs/applications/science/math/sage/sage-src.nix b/pkgs/applications/science/math/sage/sage-src.nix index d342fba21164..c97785c574cb 100644 --- a/pkgs/applications/science/math/sage/sage-src.nix +++ b/pkgs/applications/science/math/sage/sage-src.nix @@ -156,7 +156,12 @@ stdenv.mkDerivation rec { sha256 = "0fmw7pzbaxs2dshky6iw9pr8i23p9ih2y2lw661qypdrxh5xw03k"; stripLen = 1; }) - ./patches/revert-269c1e1551285.patch + (fetchpatch { + name = "revert-cddlib-doctest-changes.patch"; + url = "https://git.sagemath.org/sage.git/patch/?id=269c1e1551285566b8ba7a2b890989e5590e9f11"; + sha256 = "12bcjhq7hm2pmmj2bgjvcffjyls2x7q61ivlnaj5v5bsvhc183iy"; + revert = true; + }) # Only formatting changes. diff --git a/pkgs/build-support/fetchpatch/default.nix b/pkgs/build-support/fetchpatch/default.nix index c185497e6913..40a7675b7ac5 100644 --- a/pkgs/build-support/fetchpatch/default.nix +++ b/pkgs/build-support/fetchpatch/default.nix @@ -5,11 +5,15 @@ # stripLen acts as the -p parameter when applying a patch. { lib, fetchurl, patchutils }: -{ stripLen ? 0, extraPrefix ? null, excludes ? [], ... }@args: +{ stripLen ? 0, extraPrefix ? null, excludes ? [], includes ? [], revert ? false, ... }@args: fetchurl ({ postFetch = '' 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" \ | sort -u | sed -e 's/[*?]/\\&/g' \ | xargs -I{} \ @@ -21,10 +25,29 @@ fetchurl ({ --addnewprefix=b/${extraPrefix} \ ''} \ --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 \ -p1 \ - ${builtins.toString (builtins.map (x: "-x ${x}") excludes)} \ + ${builtins.toString (builtins.map (x: "-x ${lib.escapeShellArg x}") excludes)} \ + ${builtins.toString (builtins.map (x: "-i ${lib.escapeShellArg x}") includes)} \ "$tmpfile" > "$out" - ${args.postFetch or ""} - ''; -} // builtins.removeAttrs args ["stripLen" "extraPrefix" "excludes" "postFetch"]) + + 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 + '' + lib.optionalString revert '' + ${patchutils}/bin/interdiff "$out" /dev/null > "$tmpfile" + mv "$tmpfile" "$out" + '' + (args.postFetch or ""); + meta.broken = excludes != [] && includes != []; +} // builtins.removeAttrs args ["stripLen" "extraPrefix" "excludes" "includes" "revert" "postFetch"])