-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathatomic-write.cabal
117 lines (104 loc) · 4.67 KB
/
atomic-write.cabal
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.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: [email protected]
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.6
, 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: [email protected]:stackbuilders/atomic-write.git