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 >= 1.0.0.0 && < 1.5 ,
|
||||||
aeson-pretty < 0.9 ,
|
aeson-pretty < 0.9 ,
|
||||||
ansi-terminal >= 0.6.3.1 && < 0.11,
|
ansi-terminal >= 0.6.3.1 && < 0.11,
|
||||||
|
atomic-write >= 0.2.0.7 && < 0.3 ,
|
||||||
bytestring < 0.11,
|
bytestring < 0.11,
|
||||||
case-insensitive < 1.3 ,
|
case-insensitive < 1.3 ,
|
||||||
cborg >= 0.2.0.0 && < 0.3 ,
|
cborg >= 0.2.0.0 && < 0.3 ,
|
||||||
|
|
|
@ -179,18 +179,18 @@ import Dhall.Import.Types
|
||||||
import Dhall.Parser (Parser(..), ParseError(..), Src(..), SourcedException(..))
|
import Dhall.Parser (Parser(..), ParseError(..), Src(..), SourcedException(..))
|
||||||
import Lens.Family.State.Strict (zoom)
|
import Lens.Family.State.Strict (zoom)
|
||||||
|
|
||||||
import qualified Codec.CBOR.Encoding as Encoding
|
import qualified Codec.CBOR.Encoding as Encoding
|
||||||
import qualified Codec.CBOR.Write as Write
|
import qualified Codec.CBOR.Write as Write
|
||||||
import qualified Codec.Serialise
|
import qualified Codec.Serialise
|
||||||
import qualified Control.Monad.Trans.Maybe as Maybe
|
import qualified Control.Monad.Trans.Maybe as Maybe
|
||||||
import qualified Control.Monad.Trans.State.Strict as State
|
import qualified Control.Monad.Trans.State.Strict as State
|
||||||
import qualified Data.ByteString
|
import qualified Data.ByteString
|
||||||
import qualified Data.ByteString.Lazy
|
import qualified Data.ByteString.Lazy
|
||||||
import qualified Data.CaseInsensitive
|
import qualified Data.CaseInsensitive
|
||||||
import qualified Data.Foldable
|
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.Encoding
|
||||||
import qualified Data.Text as Text
|
import qualified Data.Text as Text
|
||||||
import qualified Data.Text.IO
|
import qualified Data.Text.IO
|
||||||
import qualified Dhall.Binary
|
import qualified Dhall.Binary
|
||||||
import qualified Dhall.Core
|
import qualified Dhall.Core
|
||||||
|
@ -199,11 +199,12 @@ import qualified Dhall.Map
|
||||||
import qualified Dhall.Parser
|
import qualified Dhall.Parser
|
||||||
import qualified Dhall.Pretty.Internal
|
import qualified Dhall.Pretty.Internal
|
||||||
import qualified Dhall.TypeCheck
|
import qualified Dhall.TypeCheck
|
||||||
|
import qualified System.AtomicWrite.Writer.ByteString.Binary as AtomicWrite.Binary
|
||||||
import qualified System.Environment
|
import qualified System.Environment
|
||||||
import qualified System.Info
|
import qualified System.Info
|
||||||
import qualified System.IO
|
import qualified System.IO
|
||||||
import qualified System.Directory as Directory
|
import qualified System.Directory as Directory
|
||||||
import qualified System.FilePath as FilePath
|
import qualified System.FilePath as FilePath
|
||||||
import qualified Text.Megaparsec
|
import qualified Text.Megaparsec
|
||||||
import qualified Text.Parser.Combinators
|
import qualified Text.Parser.Combinators
|
||||||
import qualified Text.Parser.Token
|
import qualified Text.Parser.Token
|
||||||
|
@ -554,7 +555,7 @@ writeToSemanticCache :: Dhall.Crypto.SHA256Digest -> Data.ByteString.ByteString
|
||||||
writeToSemanticCache hash bytes = do
|
writeToSemanticCache hash bytes = do
|
||||||
_ <- Maybe.runMaybeT $ do
|
_ <- Maybe.runMaybeT $ do
|
||||||
cacheFile <- getCacheFile "dhall" hash
|
cacheFile <- getCacheFile "dhall" hash
|
||||||
liftIO (Data.ByteString.writeFile cacheFile bytes)
|
liftIO (AtomicWrite.Binary.atomicWriteFile cacheFile bytes)
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
-- Check the "semi-semantic" disk cache, otherwise typecheck and normalise from
|
-- 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
|
writeToSemisemanticCache semisemanticHash bytes = do
|
||||||
_ <- Maybe.runMaybeT $ do
|
_ <- Maybe.runMaybeT $ do
|
||||||
cacheFile <- getCacheFile "dhall-haskell" semisemanticHash
|
cacheFile <- getCacheFile "dhall-haskell" semisemanticHash
|
||||||
liftIO (Data.ByteString.writeFile cacheFile bytes)
|
liftIO (AtomicWrite.Binary.atomicWriteFile cacheFile bytes)
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
-- Fetch source code directly from disk/network
|
-- 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
|
- aeson-pretty-0.8.7
|
||||||
- ansi-terminal-0.9.1
|
- ansi-terminal-0.9.1
|
||||||
- ansi-wl-pprint-0.6.8.2
|
- ansi-wl-pprint-0.6.8.2
|
||||||
|
- atomic-write-0.2.0.7@sha256:3b626dfbc288cd070f1ac31b1c15ddd49822a923778ffe21f92b2116ffc72dc3,4584
|
||||||
- attoparsec-0.13.2.2
|
- attoparsec-0.13.2.2
|
||||||
- base-compat-0.10.5
|
- base-compat-0.10.5
|
||||||
- base-orphans-0.8.1
|
- base-orphans-0.8.1
|
||||||
|
|
|
@ -24,6 +24,7 @@ extra-deps:
|
||||||
- lsp-test-0.6.1.0@sha256:df0fc403c03b6d036be13de3ff23d9951ae2506080135cd6862eded2c969a6da,3483
|
- lsp-test-0.6.1.0@sha256:df0fc403c03b6d036be13de3ff23d9951ae2506080135cd6862eded2c969a6da,3483
|
||||||
- aeson-yaml-1.0.4.0@sha256:72d91a4a2ade87b8a4bdf73937d2c62bd2c60053df1841f8bf1e6204387959b8,1975
|
- aeson-yaml-1.0.4.0@sha256:72d91a4a2ade87b8a4bdf73937d2c62bd2c60053df1841f8bf1e6204387959b8,1975
|
||||||
- prettyprinter-1.5.1@sha256:fca87c3e2611d3499a0341a59857e9b424a23f31646e4737d535a18582284f96,5375
|
- prettyprinter-1.5.1@sha256:fca87c3e2611d3499a0341a59857e9b424a23f31646e4737d535a18582284f96,5375
|
||||||
|
- atomic-write-0.2.0.7@sha256:3b626dfbc288cd070f1ac31b1c15ddd49822a923778ffe21f92b2116ffc72dc3,4584
|
||||||
nix:
|
nix:
|
||||||
packages:
|
packages:
|
||||||
- ncurses
|
- ncurses
|
||||||
|
|
Loading…
Reference in New Issue