feat(users/Profpatsch): add atomically-write
A little shell script to atomically write stdout to a file. Change-Id: Icca58909c9ad3f92d69af2f5e20c08d69878a77c Reviewed-on: https://cl.tvl.fyi/c/depot/+/3264 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
This commit is contained in:
parent
1fbb960acf
commit
28bed07694
1 changed files with 28 additions and 0 deletions
28
users/Profpatsch/atomically-write.nix
Normal file
28
users/Profpatsch/atomically-write.nix
Normal file
|
@ -0,0 +1,28 @@
|
|||
{ depot, pkgs, ... }:
|
||||
# Atomically write a file (just `>` redirection in bash
|
||||
# empties a file even if the command crashes).
|
||||
#
|
||||
# Maybe there is an existing tool for that?
|
||||
# But it’s easy enough to implement.
|
||||
#
|
||||
# Example:
|
||||
# atomically-write
|
||||
# ./to
|
||||
# echo "foo"
|
||||
#
|
||||
# will atomically write the string "foo" into ./to
|
||||
let
|
||||
atomically-write = pkgs.writers.writeDash "atomically-write" ''
|
||||
set -e
|
||||
to=$1
|
||||
shift
|
||||
# assumes that the tempfile is on the same file system, (or in memory)
|
||||
# for the `mv` at the end to be more-or-less atomic.
|
||||
tmp=$(${pkgs.coreutils}/bin/mktemp -d)
|
||||
trap 'rm -r "$tmp"' EXIT
|
||||
"$@" \
|
||||
> "$tmp/out"
|
||||
mv "$tmp/out" "$to"
|
||||
'';
|
||||
|
||||
in atomically-write
|
Loading…
Reference in a new issue