Skip to content

Commit

Permalink
File.hs: +symlink-based static file compiler; for multi-gigabyte site…
Browse files Browse the repository at this point in the history
…s, this can be a major speedup (see #786) (#810)

Co-authored-by: gwern <[email protected]>
  • Loading branch information
Minoru and gwern authored Nov 12, 2020
1 parent ab9eea7 commit 8415767
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions lib/Hakyll/Core/File.hs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ module Hakyll.Core.File
, copyFileCompiler
, TmpFile (..)
, newTmpFile
, SymlinkFile (..)
, symlinkFileCompiler
) where


Expand All @@ -20,6 +22,7 @@ import System.Directory (copyFileWithMetadata)
import System.Directory (copyFile)
#endif
import System.Directory (doesFileExist,
createFileLink,
renameFile)
import System.FilePath ((</>))
import System.Random (randomIO)
Expand Down Expand Up @@ -56,6 +59,19 @@ copyFileCompiler = do
provider <- compilerProvider <$> compilerAsk
makeItem $ CopyFile $ resourceFilePath provider identifier

--------------------------------------------------------------------------------
-- | This will not copy a file but create a symlink, which can save space & time for static sites with many large static files which would normally be handled by copyFileCompiler. (Note: the user will need to make sure their sync method handles symbolic links correctly!)
newtype SymlinkFile = SymlinkFile FilePath
deriving (Binary, Eq, Ord, Show, Typeable)
--------------------------------------------------------------------------------
instance Writable SymlinkFile where
write dst (Item _ (SymlinkFile src)) = createFileLink src dst
--------------------------------------------------------------------------------
symlinkFileCompiler :: Compiler (Item SymlinkFile)
symlinkFileCompiler = do
identifier <- getUnderlying
provider <- compilerProvider <$> compilerAsk
makeItem $ SymlinkFile $ resourceFilePath provider identifier

--------------------------------------------------------------------------------
newtype TmpFile = TmpFile FilePath
Expand Down

0 comments on commit 8415767

Please sign in to comment.