atomic-write-0.2.0.6: atomic-write.cabal
name: atomic-write
version: 0.2.0.6
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-2018 Stack Builders Inc.
category: System
build-type: Simple
cabal-version: >=1.10
bug-reports: https://github.com/stackbuilders/atomic-write/issues
library
exposed-modules: System.AtomicWrite.Writer.ByteString
, System.AtomicWrite.Writer.ByteStringBuilder
, System.AtomicWrite.Writer.LazyByteString
, System.AtomicWrite.Writer.String
, System.AtomicWrite.Writer.Text
, System.AtomicWrite.Writer.LazyText
other-modules: System.AtomicWrite.Internal
build-depends: base >= 4.5 && < 5.0
, temporary
, unix-compat
, directory
, filepath
, text
, bytestring >= 0.10.4
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.ByteStringBuilderSpec
, System.AtomicWrite.Writer.LazyByteStringSpec
, System.AtomicWrite.Writer.StringSpec
, System.AtomicWrite.Writer.TextSpec
, System.AtomicWrite.Writer.LazyTextSpec
build-depends: base >= 4.5 && < 5.0
, atomic-write
, temporary
, unix-compat
, filepath
, text
, bytestring >= 0.10.4
, hspec
default-language: Haskell2010
ghc-options: -Wall
source-repository head
type: git
location: git@github.com:stackbuilders/atomic-write.git