Fix Text.Pandoc.Data.getDataFileNames with -embed_data_files.

Previously it was not looking in the right directory
and not recursing.

The function now alphabetizes its results so that test output
is the same with or without `embed_data_files`.
This commit is contained in:
John MacFarlane
2026-09-01 22:45:21 -07:00
parent dfcc4c1680
commit 3b91fcdd2c
2 changed files with 17 additions and 6 deletions
+14 -3
View File
@@ -25,6 +25,7 @@ import Data.Time.Clock.POSIX (utcTimeToPOSIXSeconds)
import qualified Data.ByteString.Lazy as BL
import qualified Data.ByteString as B
import Codec.Archive.Zip
import Data.List (sort)
import qualified Data.Text as T
import Control.Monad.Except (throwError)
import Text.Pandoc.Error (PandocError(..))
@@ -220,10 +221,20 @@ getDataFileNames = do
#ifdef EMBED_DATA_FILES
let allDataFiles = map fst dataFiles
#else
allDataFiles <- filter (\x -> x /= "." && x /= "..") <$>
(getDataDir >>= getDirectoryContents)
let listDirectoryRecursive d = do
xs <- listDirectory d
concat <$>
mapM (\f -> do
isdir <- doesDirectoryExist (d </> f)
if isdir
then map (f </>) <$> listDirectoryRecursive (d </> f)
else pure [f]) xs
ddir <- getDataDir
allDataFiles <- ("MANUAL.txt" :) <$>
listDirectoryRecursive (ddir </> "data")
#endif
return $ "reference.docx" : "reference.odt" : "reference.pptx" : allDataFiles
return $ sort $
"reference.docx" : "reference.odt" : "reference.pptx" : allDataFiles
-- | Return appropriate user data directory for platform. We use
-- XDG_DATA_HOME (or its default value), but for backwards compatibility,
File diff suppressed because one or more lines are too long