safe-replace
A micro-module for safely replacing a file.
This is intended to be generally safe even when a function that writes a file is accidentally called twice (as may happen with node cluster).
Commandline Reference
If I want to safely replace a file with a new version, I would do so like this:
# create the new version touch keep.txt.RANDOM.tmp # remove the previous backup rm -f keep.txt.bak # move the current version to the backup mv keep.txt keep.txt.bak # move the new version to the current mv keep.txt.RANDOM.tmp keep.txt
If keep.txt
became corrupt and I wanted to use the backup,
I would do this:
# copy the backup to the new version rsync keep.txt.bak keep.txt
In Node
I ported that proccess to node.
sfs.writeFileAsync
sfs.stageAsync
sfs.commitAsync
sfs.revertAsync
// default behavior is to concat (filename + '.' + rnd() + '.tmp')var safeReplace = ; var data = 'A priceless document';safeReplace; // let's say I want to write a tmp file and not commit it... weirdsafeReplace; // let's say I wrote keep.txt.x7t7sq926.tmp with my own mechanismsafeReplace; // let's say I want to revert the file from the '.bak'safeReplace;