name:                atomic-write
version:             0.2.0.7
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
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
                       , 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.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 >= 0.10.4
                     , hspec

  default-language:    Haskell2010
  ghc-options:         -Wall


source-repository head
  type:     git
  location: git@github.com:stackbuilders/atomic-write.git