From a2a2e1d4663c69e379ca2cfe83cf9d074a4c0724 Mon Sep 17 00:00:00 2001
From: Jakob Borg <jakob@nym.se>
Date: Mon, 30 Dec 2013 22:04:30 -0500
Subject: [PATCH] Atomically replace local index cache

---
 main.go | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/main.go b/main.go
index eadaf9a14..c49b7652f 100644
--- a/main.go
+++ b/main.go
@@ -304,13 +304,15 @@ func updateLocalModel(m *Model) {
 }
 
 func saveIndex(m *Model) {
-	fname := fmt.Sprintf("%x.idx", sha1.Sum([]byte(m.Dir())))
-	idxf, err := os.Create(path.Join(ConfDir, fname))
+	name := fmt.Sprintf("%x.idx", sha1.Sum([]byte(m.Dir())))
+	fullName := path.Join(ConfDir, name)
+	idxf, err := os.Create(fullName + ".tmp")
 	if err != nil {
 		return
 	}
 	protocol.WriteIndex(idxf, m.ProtocolIndex())
 	idxf.Close()
+	os.Rename(fullName+".tmp", fullName)
 }
 
 func loadIndex(m *Model) {
-- 
GitLab