haskellPackages.gitit: unbreak

pandoc 2.12 changed and removed a few exports gitit used. I procured a
patch which fixes those without any refactoring by vendoring in the
removed function from pandoc which is no problem as they are both
available under the GPL 2.0.
This commit is contained in:
sternenseemann 2021-04-02 15:25:51 +02:00
parent d5eac5c07f
commit 8babfa7fa5
2 changed files with 70 additions and 4 deletions

View File

@ -1165,10 +1165,11 @@ self: super: {
# $HOME, which we don't have in our build sandbox.
cabal-install-parsers = dontCheck super.cabal-install-parsers;
# version constraints break the build, so we jailbreak
# can be removed at a new release which also fixes
# https://github.com/jgm/gitit/issues/665
gitit = doJailbreak super.gitit;
# * jailbreak can be removed at the next release (current is 0.13.0.0)
# * patch fixes compilation with pandoc >= 2.12, can be removed if a
# release contains https://github.com/jgm/gitit/pull/670 or equivalent.
# Patch is vendored in as it may change upstream in the future.
gitit = doJailbreak (appendPatch super.gitit ./patches/gitit-pandoc-2.12.patch);
# Test suite requires database
persistent-mysql = dontCheck super.persistent-mysql;

View File

@ -0,0 +1,65 @@
commit a03d3b043458f45d29ba32068a77c0d3b8a4223f
Author: sternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org>
Date: Fri Apr 2 15:14:02 2021 +0200
Allow compilation with pandoc 2.12 and 2.13
pandoc 2.13 introduced the following breakages for gitit:
* UTF8.readFile now returns a Text which is actually ideal for gitit.
If pandoc is new enough we just make readFileUTF8 an alias for
UTF8.readFile.
* Text.Pandoc.Shared no longer exports substitute. In order to be
conservative I've chosen to just copy the substitute function from
pandoc 2.11.4. I need this patch kind of urgently so I didn't want to
make any changes or refactors independently from upstream if
avoidable. However, I'd be happy to rebase this PR branch to adopt a
different solution to just copying the function.
diff --git a/src/Network/Gitit/Authentication.hs b/src/Network/Gitit/Authentication.hs
index 4c240e7..c0f92fd 100644
--- a/src/Network/Gitit/Authentication.hs
+++ b/src/Network/Gitit/Authentication.hs
@@ -44,7 +44,7 @@ import System.Exit
import System.Log.Logger (logM, Priority(..))
import Data.Char (isAlphaNum, isAlpha)
import qualified Data.Map as M
-import Text.Pandoc.Shared (substitute)
+import Data.List (stripPrefix)
import Data.Maybe (isJust, fromJust, isNothing, fromMaybe)
import Network.URL (exportURL, add_param, importURL)
import Network.BSD (getHostName)
@@ -54,6 +54,16 @@ import Codec.Binary.UTF8.String (encodeString)
import Data.ByteString.UTF8 (toString)
import Network.Gitit.Rpxnow as R
+-- | Replace each occurrence of one sublist in a list with another.
+-- Vendored in from pandoc 2.11.4 as 2.12 removed this function.
+substitute :: (Eq a) => [a] -> [a] -> [a] -> [a]
+substitute _ _ [] = []
+substitute [] _ xs = xs
+substitute target replacement lst@(x:xs) =
+ case stripPrefix target lst of
+ Just lst' -> replacement ++ substitute target replacement lst'
+ Nothing -> x : substitute target replacement xs
+
data ValidationType = Register
| ResetPassword
deriving (Show,Read)
diff --git a/src/Network/Gitit/Util.hs b/src/Network/Gitit/Util.hs
index c5e9fe5..067130a 100644
--- a/src/Network/Gitit/Util.hs
+++ b/src/Network/Gitit/Util.hs
@@ -45,7 +45,11 @@ import Network.URL (encString)
-- | Read file as UTF-8 string. Encode filename as UTF-8.
readFileUTF8 :: FilePath -> IO Text
+#if MIN_VERSION_pandoc(2,12,0)
+readFileUTF8 = UTF8.readFile
+#else
readFileUTF8 = fmap T.pack . UTF8.readFile
+#endif
-- | Perform a function a directory and return to working directory.
inDir :: FilePath -> IO a -> IO a