aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetter Rasmussen2016-02-13 18:56:31 +0100
committerPetter Rasmussen2016-02-13 18:56:31 +0100
commit6d78f27d416bae8d446f495ca5414894410d5e5b (patch)
treea306048c435fed7252e9cce9519e2adeddcba40b
parent03384c697930351faae77ab6e750a67ce501641d (diff)
downloadgdrive-6d78f27d416bae8d446f495ca5414894410d5e5b.tar.bz2
Download to tmp file and rename on success
-rw-r--r--drive/revision_download.go19
1 files changed, 11 insertions, 8 deletions
diff --git a/drive/revision_download.go b/drive/revision_download.go
index f06dac3..be64187 100644
--- a/drive/revision_download.go
+++ b/drive/revision_download.go
@@ -49,25 +49,28 @@ func (self *Drive) DownloadRevision(args DownloadRevisionArgs) (err error) {
return fmt.Errorf("File '%s' already exists, use --force to overwrite", rev.OriginalFilename)
}
+ // Download to tmp file
+ tmpPath := rev.OriginalFilename + ".incomplete"
+
// Create new file
- outFile, err := os.Create(rev.OriginalFilename)
+ outFile, err := os.Create(tmpPath)
if err != nil {
return fmt.Errorf("Unable to create new file: %s", err)
}
- // Close file on function exit
- defer outFile.Close()
-
// Save file to disk
bytes, err := io.Copy(outFile, srcReader)
if err != nil {
+ outFile.Close()
+ os.Remove(tmpPath)
return fmt.Errorf("Failed saving file: %s", err)
}
fmt.Fprintf(args.Out, "Downloaded '%s' at %s, total %d\n", rev.OriginalFilename, "x/s", bytes)
- //if deleteSourceFile {
- // self.Delete(args.Id)
- //}
- return
+ // Close File
+ outFile.Close()
+
+ // Rename tmp file to proper filename
+ return os.Rename(tmpPath, rev.OriginalFilename)
}