Write template result to temporary file and move

This prevents problems with programs which watch the file for changes and will
first be presented an empty file.
One such example which will show a notification message about an empty config
file is Alacritty.
By writing to a tempory file and then moving it (atomically?) to the real
location this problem is mitigated.
This commit is contained in:
jonasc 2019-02-09 15:38:14 +01:00 committed by Tim Byrne
parent 09a018ea5a
commit a1845c6e8a
No known key found for this signature in database
GPG Key ID: 14DB4FC2465A4B12
1 changed files with 3 additions and 1 deletions

4
yadm
View File

@ -208,6 +208,7 @@ function alt() {
#; loop over all "tracked" files #; loop over all "tracked" files
#; for every file which is a *##yadm.j2 create a real file #; for every file which is a *##yadm.j2 create a real file
local temp="$(mktemp)"
local IFS=$'\n' local IFS=$'\n'
local match="^(.+)##yadm\\.j2$" local match="^(.+)##yadm\\.j2$"
for tracked_file in $("$GIT_PROGRAM" ls-files | sort) "${ENCRYPT_INCLUDE_FILES[@]}"; do for tracked_file in $("$GIT_PROGRAM" ls-files | sort) "${ENCRYPT_INCLUDE_FILES[@]}"; do
@ -223,7 +224,8 @@ function alt() {
YADM_HOSTNAME="$local_host" \ YADM_HOSTNAME="$local_host" \
YADM_USER="$local_user" \ YADM_USER="$local_user" \
YADM_DISTRO=$(query_distro) \ YADM_DISTRO=$(query_distro) \
"$ENVTPL_PROGRAM" < "$tracked_file" > "$real_file" "$ENVTPL_PROGRAM" < "$tracked_file" > "$temp"
mv "$temp" "$real_file"
else else
debug "envtpl not available, not creating $real_file from template $tracked_file" debug "envtpl not available, not creating $real_file from template $tracked_file"
[ -n "$loud" ] && echo "envtpl not available, not creating $real_file from template $tracked_file" [ -n "$loud" ] && echo "envtpl not available, not creating $real_file from template $tracked_file"