aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/Compiler.hs
diff options
context:
space:
mode:
authorpacien2020-01-30 16:03:54 +0100
committerpacien2020-01-31 18:09:50 +0100
commit4fde03c7654dcdad11a8c91ba2bcbb2706695e11 (patch)
tree704f521b3c55c1753fef25d7e81c733692dae40e /compiler/src/Compiler.hs
parent245fee3fe5abdc6ad14513ef6522446aba4c905a (diff)
downloadldgallery-4fde03c7654dcdad11a8c91ba2bcbb2706695e11.tar.gz
compiler: properly exclude out directory
Use canonical paths to exclude the output directory if it is located inside the input directory instead of guessing based on special files. GitHub: closes #54
Diffstat (limited to 'compiler/src/Compiler.hs')
-rw-r--r--compiler/src/Compiler.hs20
1 files changed, 9 insertions, 11 deletions
diff --git a/compiler/src/Compiler.hs b/compiler/src/Compiler.hs
index 8819ffc..d392f74 100644
--- a/compiler/src/Compiler.hs
+++ b/compiler/src/Compiler.hs
@@ -26,6 +26,7 @@ import Control.Monad (liftM2)
26import Data.List (any) 26import Data.List (any)
27import System.FilePath ((</>)) 27import System.FilePath ((</>))
28import qualified System.FilePath.Glob as Glob 28import qualified System.FilePath.Glob as Glob
29import System.Directory (canonicalizePath)
29 30
30import Data.Aeson (ToJSON) 31import Data.Aeson (ToJSON)
31import qualified Data.Aeson as JSON 32import qualified Data.Aeson as JSON
@@ -52,9 +53,6 @@ galleryConf = "gallery.yaml"
52indexFile :: String 53indexFile :: String
53indexFile = "index.json" 54indexFile = "index.json"
54 55
55viewerMainFile :: String
56viewerMainFile = "index.html"
57
58viewerConfFile :: String 56viewerConfFile :: String
59viewerConfFile = "viewer.json" 57viewerConfFile = "viewer.json"
60 58
@@ -72,11 +70,11 @@ writeJSON outputPath object =
72 ensureParentDir JSON.encodeFile outputPath object 70 ensureParentDir JSON.encodeFile outputPath object
73 71
74 72
75galleryDirFilter :: CompilerConfig -> FSNode -> Bool 73galleryDirFilter :: CompilerConfig -> FilePath -> FSNode -> Bool
76galleryDirFilter config = 74galleryDirFilter config outputDir =
77 (not . isHidden) 75 (not . isHidden)
76 &&& (not . isOutputGallery)
78 &&& (not . matchesFile (== galleryConf)) 77 &&& (not . matchesFile (== galleryConf))
79 &&& (not . containsOutputGallery)
80 &&& ((matchesDir $ anyPattern $ includedDirectories config) ||| 78 &&& ((matchesDir $ anyPattern $ includedDirectories config) |||
81 (matchesFile $ anyPattern $ includedFiles config)) 79 (matchesFile $ anyPattern $ includedFiles config))
82 &&& (not . ((matchesDir $ anyPattern $ excludedDirectories config) ||| 80 &&& (not . ((matchesDir $ anyPattern $ excludedDirectories config) |||
@@ -97,10 +95,9 @@ galleryDirFilter config =
97 anyPattern :: [String] -> FileName -> Bool 95 anyPattern :: [String] -> FileName -> Bool
98 anyPattern patterns filename = any (flip Glob.match filename) (map Glob.compile patterns) 96 anyPattern patterns filename = any (flip Glob.match filename) (map Glob.compile patterns)
99 97
100 containsOutputGallery :: FSNode -> Bool 98 isOutputGallery :: FSNode -> Bool
101 containsOutputGallery File{} = False 99 isOutputGallery Dir{canonicalPath} = canonicalPath == outputDir
102 containsOutputGallery Dir{items} = 100 isOutputGallery File{} = False
103 any (matchesFile (== indexFile) ||| matchesFile (== viewerMainFile)) items
104 101
105 102
106compileGallery :: FilePath -> FilePath -> Bool -> Bool -> IO () 103compileGallery :: FilePath -> FilePath -> Bool -> Bool -> IO ()
@@ -110,7 +107,8 @@ compileGallery inputDirPath outputDirPath rebuildAll cleanOutput =
110 let config = compiler fullConfig 107 let config = compiler fullConfig
111 108
112 inputDir <- readDirectory inputDirPath 109 inputDir <- readDirectory inputDirPath
113 let sourceFilter = galleryDirFilter config 110 canonicalOutPath <- canonicalizePath outputDirPath
111 let sourceFilter = galleryDirFilter config canonicalOutPath
114 let sourceTree = filterDir sourceFilter inputDir 112 let sourceTree = filterDir sourceFilter inputDir
115 inputTree <- readInputTree sourceTree 113 inputTree <- readInputTree sourceTree
116 114