diff options
author | pacien | 2020-02-03 15:10:58 +0100 |
---|---|---|
committer | pacien | 2020-02-03 21:19:56 +0100 |
commit | c22ea3de0fc5a42449b4bae80afa1a94c7afa41e (patch) | |
tree | 29175ed4e1caee581bf77f1f7200a05b3b8eda71 | |
parent | b757ee814c01c83b17b495c4805fcc70d7e08c89 (diff) | |
download | ldgallery-c22ea3de0fc5a42449b4bae80afa1a94c7afa41e.tar.gz |
compiler: reject input and output directories that coincide
GitHub: closes #80
-rw-r--r-- | compiler/app/Main.hs | 24 | ||||
-rw-r--r-- | ldgallery.1.md | 7 |
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 | ||
21 | import GHC.Generics (Generic) | 21 | import GHC.Generics (Generic) |
22 | import Paths_ldgallery_compiler (version, getDataFileName) | 22 | import Paths_ldgallery_compiler (version, getDataFileName) |
23 | import Control.Monad (when) | ||
23 | import Data.Version (showVersion) | 24 | import Data.Version (showVersion) |
24 | import Data.Int (Int64) | 25 | import Data.Int (Int64) |
25 | import Data.Aeson (ToJSON) | 26 | import Data.Aeson (ToJSON) |
26 | import Data.Time.Clock.System (getSystemTime, systemSeconds) | 27 | import Data.Time.Clock.System (getSystemTime, systemSeconds) |
27 | import System.FilePath ((</>)) | 28 | import System.FilePath ((</>)) |
29 | import System.Directory (canonicalizePath) | ||
28 | import System.Console.CmdArgs | 30 | import System.Console.CmdArgs |
29 | 31 | ||
30 | import Compiler | 32 | import 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] | |||
25 | Available options are: | 25 | Available 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. |