aboutsummaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorpacien2020-02-03 15:10:58 +0100
committerpacien2020-02-03 21:19:56 +0100
commitc22ea3de0fc5a42449b4bae80afa1a94c7afa41e (patch)
tree29175ed4e1caee581bf77f1f7200a05b3b8eda71 /compiler
parentb757ee814c01c83b17b495c4805fcc70d7e08c89 (diff)
downloadldgallery-c22ea3de0fc5a42449b4bae80afa1a94c7afa41e.tar.gz
compiler: reject input and output directories that coincide
GitHub: closes #80
Diffstat (limited to 'compiler')
-rw-r--r--compiler/app/Main.hs24
1 files changed, 15 insertions, 9 deletions
diff --git a/compiler/app/Main.hs b/compiler/app/Main.hs
index 1864dee..594a5b7 100644
--- a/compiler/app/Main.hs
+++ b/compiler/app/Main.hs
@@ -20,11 +20,13 @@ module Main where
20 20
21import GHC.Generics (Generic) 21import GHC.Generics (Generic)
22import Paths_ldgallery_compiler (version, getDataFileName) 22import Paths_ldgallery_compiler (version, getDataFileName)
23import Control.Monad (when)
23import Data.Version (showVersion) 24import Data.Version (showVersion)
24import Data.Int (Int64) 25import Data.Int (Int64)
25import Data.Aeson (ToJSON) 26import Data.Aeson (ToJSON)
26import Data.Time.Clock.System (getSystemTime, systemSeconds) 27import Data.Time.Clock.System (getSystemTime, systemSeconds)
27import System.FilePath ((</>)) 28import System.FilePath ((</>))
29import System.Directory (canonicalizePath)
28import System.Console.CmdArgs 30import System.Console.CmdArgs
29 31
30import Compiler 32import Compiler
@@ -88,11 +90,9 @@ main =
88 do 90 do
89 opts <- cmdArgs options 91 opts <- cmdArgs options
90 buildGallery opts 92 buildGallery opts
91 if (withViewer opts) then do 93 when (withViewer opts) $ do
92 copyViewer (outputDir opts) 94 copyViewer (outputDir opts)
93 writeViewerConfig (outputDir opts </> "config.json") 95 writeViewerConfig (outputDir opts </> "config.json")
94 else
95 return ()
96 96
97 where 97 where
98 gallerySubdir :: String 98 gallerySubdir :: String
@@ -100,12 +100,18 @@ main =
100 100
101 buildGallery :: Options -> IO () 101 buildGallery :: Options -> IO ()
102 buildGallery opts = 102 buildGallery opts =
103 compileGallery 103 checkDistinctPaths (inputDir opts) (outputDir opts)
104 (inputDir opts) 104 >> compileGallery
105 (galleryOutputDir opts) 105 (inputDir opts)
106 [outputDir opts] 106 (galleryOutputDir opts)
107 (rebuilAll opts) 107 [outputDir opts]
108 (cleanOutput opts) 108 (rebuilAll opts)
109 (cleanOutput opts)
110 where
111 checkDistinctPaths a b = do
112 canonicalA <- canonicalizePath a
113 canonicalB <- canonicalizePath b
114 when (canonicalA == canonicalB) $ error "Input and output paths refer to the same location."
109 115
110 galleryOutputDir :: Options -> FilePath 116 galleryOutputDir :: Options -> FilePath
111 galleryOutputDir opts = 117 galleryOutputDir opts =