1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
name: atomic-write
version: 0.2.1.0
synopsis: Atomically write to a file
homepage: https://github.com/stackbuilders/atomic-write
description:
.
Atomically write to a file on POSIX-compliant systems while preserving
permissions.
.
On most Unix systems, `mv` is an atomic operation. This makes it simple to write
to a file atomically just by using the mv operation. However, this will
destroy the permissions on the original file. This library does the following
to preserve permissions while atomically writing to a file:
.
* If an original file exists, take those permissions and apply them to the
temp file before `mv`ing the file into place.
.
* If the original file does not exist, create a following with default
permissions (based on the currently-active umask).
.
This way, when the file is `mv`'ed into place, the permissions will be the ones
held by the original file.
.
This library is based on similar implementations found in common libraries in
Ruby and Python:
.
* <http://apidock.com/rails/File/atomic_write/class Ruby on Rails includes a similar method called atomic_write>
.
* <https://github.com/chef/chef/blob/c4631816132fcfefaba3d123a1d0dfe8bc2866bb/lib/chef/file_content_management/deploy/mv_unix.rb#L23:L71 Chef includes atomic update functionality>
.
* <https://github.com/sashka/atomicfile There is a python library for atomically updating a file>
.
To use `atomic-write`, import the module corresponding to the type you wish to
write atomically, e.g., to write a (strict) ByteString atomically:
.
> import System.AtomicWrite.Writer.ByteString
.
Then you can use the atomicWriteFile function that accepts a `FilePath` and a
`ByteString`, e.g.:
.
> atomicWriteFile myFilePath myByteString
license: MIT
license-file: LICENSE
author: Justin Leitgeb
maintainer: support@stackbuilders.com
copyright: 2015-2019 Stack Builders Inc.
category: System
build-type: Simple
cabal-version: >=1.10
tested-with:
GHC ==8.4.3, GHC ==8.10.7, GHC ==9.4.7
bug-reports: https://github.com/stackbuilders/atomic-write/issues
library
exposed-modules: System.AtomicWrite.Writer.ByteString
, System.AtomicWrite.Writer.ByteString.Binary
, System.AtomicWrite.Writer.ByteStringBuilder
, System.AtomicWrite.Writer.LazyByteString
, System.AtomicWrite.Writer.LazyByteString.Binary
, System.AtomicWrite.Writer.String
, System.AtomicWrite.Writer.String.Binary
, System.AtomicWrite.Writer.Text
, System.AtomicWrite.Writer.Text.Binary
, System.AtomicWrite.Writer.LazyText
, System.AtomicWrite.Writer.LazyText.Binary
other-modules: System.AtomicWrite.Internal
build-depends: base >= 4.5 && < 5.0
, temporary >= 1.3 && < 1.4
, unix-compat >= 0.5 && < 1.0
, directory >= 1.3 && < 1.4
, filepath >= 1.4 && < 1.5
, text >= 1.2 && < 3.0
, bytestring >= 0.10.4 && < 0.13.0
hs-source-dirs: src
default-language: Haskell2010
ghc-options: -Wall
test-suite atomic-write-test
type: exitcode-stdio-1.0
hs-source-dirs: spec
main-is: Spec.hs
other-modules: System.AtomicWrite.Writer.ByteStringSpec
, System.AtomicWrite.Writer.ByteString.BinarySpec
, System.AtomicWrite.Writer.ByteStringBuilderSpec
, System.AtomicWrite.Writer.LazyByteStringSpec
, System.AtomicWrite.Writer.LazyByteString.BinarySpec
, System.AtomicWrite.Writer.StringSpec
, System.AtomicWrite.Writer.String.BinarySpec
, System.AtomicWrite.Writer.TextSpec
, System.AtomicWrite.Writer.Text.BinarySpec
, System.AtomicWrite.Writer.LazyTextSpec
, System.AtomicWrite.Writer.LazyText.BinarySpec
build-depends: base >= 4.5 && < 5.0
, atomic-write
, temporary
, unix-compat
, filepath
, text
, bytestring
, hspec >= 2.5 && < 2.12
build-tools: hspec-discover >= 2.0 && < 3.0
default-language: Haskell2010
ghc-options: -Wall
source-repository head
type: git
location: git@github.com:stackbuilders/atomic-write.git
|