aa122cbae7
This CL can be used to compare the style of nixpkgs-fmt against other formatters (nixpkgs, alejandra). Change-Id: I87c6abff6bcb546b02ead15ad0405f81e01b6d9e Reviewed-on: https://cl.tvl.fyi/c/depot/+/4397 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: lukegb <lukegb@tvl.fyi> Reviewed-by: wpcarro <wpcarro@gmail.com> Reviewed-by: Profpatsch <mail@profpatsch.de> Reviewed-by: kanepyork <rikingcoding@gmail.com> Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: cynthia <cynthia@tvl.fyi> Reviewed-by: edef <edef@edef.eu> Reviewed-by: eta <tvl@eta.st> Reviewed-by: grfn <grfn@gws.fyi>
29 lines
711 B
Nix
29 lines
711 B
Nix
{ 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
|