Write cache files atomically (#1544)
Fixes https://github.com/dhall-lang/dhall-haskell/issues/1540.
This commit is contained in:
parent
a41be1a742
commit
3b222cda91
|
@ -405,6 +405,7 @@ Library
|
|||
aeson >= 1.0.0.0 && < 1.5 ,
|
||||
aeson-pretty < 0.9 ,
|
||||
ansi-terminal >= 0.6.3.1 && < 0.11,
|
||||
atomic-write >= 0.2.0.7 && < 0.3 ,
|
||||
bytestring < 0.11,
|
||||
case-insensitive < 1.3 ,
|
||||
cborg >= 0.2.0.0 && < 0.3 ,
|
||||
|
|
|
@ -179,18 +179,18 @@ import Dhall.Import.Types
|
|||
import Dhall.Parser (Parser(..), ParseError(..), Src(..), SourcedException(..))
|
||||
import Lens.Family.State.Strict (zoom)
|
||||
|
||||
import qualified Codec.CBOR.Encoding as Encoding
|
||||
import qualified Codec.CBOR.Write as Write
|
||||
import qualified Codec.CBOR.Encoding as Encoding
|
||||
import qualified Codec.CBOR.Write as Write
|
||||
import qualified Codec.Serialise
|
||||
import qualified Control.Monad.Trans.Maybe as Maybe
|
||||
import qualified Control.Monad.Trans.State.Strict as State
|
||||
import qualified Control.Monad.Trans.Maybe as Maybe
|
||||
import qualified Control.Monad.Trans.State.Strict as State
|
||||
import qualified Data.ByteString
|
||||
import qualified Data.ByteString.Lazy
|
||||
import qualified Data.CaseInsensitive
|
||||
import qualified Data.Foldable
|
||||
import qualified Data.List.NonEmpty as NonEmpty
|
||||
import qualified Data.List.NonEmpty as NonEmpty
|
||||
import qualified Data.Text.Encoding
|
||||
import qualified Data.Text as Text
|
||||
import qualified Data.Text as Text
|
||||
import qualified Data.Text.IO
|
||||
import qualified Dhall.Binary
|
||||
import qualified Dhall.Core
|
||||
|
@ -199,11 +199,12 @@ import qualified Dhall.Map
|
|||
import qualified Dhall.Parser
|
||||
import qualified Dhall.Pretty.Internal
|
||||
import qualified Dhall.TypeCheck
|
||||
import qualified System.AtomicWrite.Writer.ByteString.Binary as AtomicWrite.Binary
|
||||
import qualified System.Environment
|
||||
import qualified System.Info
|
||||
import qualified System.IO
|
||||
import qualified System.Directory as Directory
|
||||
import qualified System.FilePath as FilePath
|
||||
import qualified System.Directory as Directory
|
||||
import qualified System.FilePath as FilePath
|
||||
import qualified Text.Megaparsec
|
||||
import qualified Text.Parser.Combinators
|
||||
import qualified Text.Parser.Token
|
||||
|
@ -554,7 +555,7 @@ writeToSemanticCache :: Dhall.Crypto.SHA256Digest -> Data.ByteString.ByteString
|
|||
writeToSemanticCache hash bytes = do
|
||||
_ <- Maybe.runMaybeT $ do
|
||||
cacheFile <- getCacheFile "dhall" hash
|
||||
liftIO (Data.ByteString.writeFile cacheFile bytes)
|
||||
liftIO (AtomicWrite.Binary.atomicWriteFile cacheFile bytes)
|
||||
return ()
|
||||
|
||||
-- Check the "semi-semantic" disk cache, otherwise typecheck and normalise from
|
||||
|
@ -669,7 +670,7 @@ writeToSemisemanticCache :: Dhall.Crypto.SHA256Digest -> Data.ByteString.ByteStr
|
|||
writeToSemisemanticCache semisemanticHash bytes = do
|
||||
_ <- Maybe.runMaybeT $ do
|
||||
cacheFile <- getCacheFile "dhall-haskell" semisemanticHash
|
||||
liftIO (Data.ByteString.writeFile cacheFile bytes)
|
||||
liftIO (AtomicWrite.Binary.atomicWriteFile cacheFile bytes)
|
||||
return ()
|
||||
|
||||
-- Fetch source code directly from disk/network
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
{ mkDerivation, base, bytestring, directory, filepath, hspec
|
||||
, stdenv, temporary, text, unix-compat
|
||||
}:
|
||||
mkDerivation {
|
||||
pname = "atomic-write";
|
||||
version = "0.2.0.7";
|
||||
sha256 = "b5f5c77884bc0332306fab89acf1c8a8582d76eabaa303c91b1c4072621c960d";
|
||||
libraryHaskellDepends = [
|
||||
base bytestring directory filepath temporary text unix-compat
|
||||
];
|
||||
testHaskellDepends = [
|
||||
base bytestring filepath hspec temporary text unix-compat
|
||||
];
|
||||
homepage = "https://github.com/stackbuilders/atomic-write";
|
||||
description = "Atomically write to a file";
|
||||
license = stdenv.lib.licenses.mit;
|
||||
}
|
|
@ -12,6 +12,7 @@ extra-deps:
|
|||
- aeson-pretty-0.8.7
|
||||
- ansi-terminal-0.9.1
|
||||
- ansi-wl-pprint-0.6.8.2
|
||||
- atomic-write-0.2.0.7@sha256:3b626dfbc288cd070f1ac31b1c15ddd49822a923778ffe21f92b2116ffc72dc3,4584
|
||||
- attoparsec-0.13.2.2
|
||||
- base-compat-0.10.5
|
||||
- base-orphans-0.8.1
|
||||
|
|
|
@ -24,6 +24,7 @@ extra-deps:
|
|||
- lsp-test-0.6.1.0@sha256:df0fc403c03b6d036be13de3ff23d9951ae2506080135cd6862eded2c969a6da,3483
|
||||
- aeson-yaml-1.0.4.0@sha256:72d91a4a2ade87b8a4bdf73937d2c62bd2c60053df1841f8bf1e6204387959b8,1975
|
||||
- prettyprinter-1.5.1@sha256:fca87c3e2611d3499a0341a59857e9b424a23f31646e4737d535a18582284f96,5375
|
||||
- atomic-write-0.2.0.7@sha256:3b626dfbc288cd070f1ac31b1c15ddd49822a923778ffe21f92b2116ffc72dc3,4584
|
||||
nix:
|
||||
packages:
|
||||
- ncurses
|
||||
|
|
Loading…
Reference in New Issue