aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpacien2020-02-03 15:10:58 +0100
committerpacien2020-02-03 21:19:56 +0100
commitc22ea3de0fc5a42449b4bae80afa1a94c7afa41e (patch)
tree29175ed4e1caee581bf77f1f7200a05b3b8eda71
parentb757ee814c01c83b17b495c4805fcc70d7e08c89 (diff)
downloadldgallery-c22ea3de0fc5a42449b4bae80afa1a94c7afa41e.tar.gz
compiler: reject input and output directories that coincide
GitHub: closes #80
-rw-r--r--compiler/app/Main.hs24
-rw-r--r--ldgallery.1.md7
2 files changed, 20 insertions, 11 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 =
diff --git a/ldgallery.1.md b/ldgallery.1.md
index 5612cbf..8928693 100644
--- a/ldgallery.1.md
+++ b/ldgallery.1.md
@@ -25,10 +25,13 @@ ldgallery [\--input-dir _./_] [\--output-dir _./out_] [\--with-viewer]
25Available options are: 25Available options are:
26 26
27-i, \--input-dir _DIR_ 27-i, \--input-dir _DIR_
28: Gallery source directory. Defaults to the current directory. 28: Gallery source directory.
29 Defaults to the current directory.
29 30
30-o, \--output-dir _DIR_ 31-o, \--output-dir _DIR_
31: Generated gallery output path. Defaults to ./out. 32: Generated gallery output path.
33 Must be distinct from the source directory.
34 Defaults to ./out.
32 35
33-r, \--rebuild-all 36-r, \--rebuild-all
34: Invalidate cache and recompile everything. 37: Invalidate cache and recompile everything.