From 7effa83470019f75931296c6a5d07a5932c69df8 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 1 Aug 2014 17:52:09 -0400 Subject: fix example external remote script to write files atomically --- doc/special_remotes/external/example.sh | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'doc/special_remotes/external') diff --git a/doc/special_remotes/external/example.sh b/doc/special_remotes/external/example.sh index 5152ccc28..8fed9f4aa 100755 --- a/doc/special_remotes/external/example.sh +++ b/doc/special_remotes/external/example.sh @@ -128,14 +128,25 @@ while read line; do STORE) # Store the file to a location # based on the key. - # XXX when possible, send PROGRESS + # XXX when at all possible, send PROGRESS calclocation "$key" mkdir -p "$(dirname "$LOC")" - if runcmd cp "$file" "$LOC"; then + # Store in temp file first, so that + # CHECKPRESENT does not see it + # until it is all stored. + mkdir -p "$mydirectory/tmp" + tmp="$mydirectory/tmp/$key" + if runcmd cp "$file" "$tmp" \ + && runcmd mv -f "$tmp" "$LOC"; then echo TRANSFER-SUCCESS STORE "$key" else echo TRANSFER-FAILURE STORE "$key" fi + + mkdir -p "$(dirname "$LOC")" + # The file may already exist, so + # make sure we can overwrite it. + chmod 644 "$LOC" 2>/dev/null || true ;; RETRIEVE) # Retrieve from a location based on -- cgit v1.2.3