use defer to call Builder.Finish

This ensures cleanup. If the cleanup does not happen, an indexing site
may repeated leave unfinished shards in the index directory, filling up
the disk.

Fixes #94.

Change-Id: I3055f7c66586c4e44a7dd44810c3f8fa9fed847b
diff --git a/cmd/zoekt-index/main.go b/cmd/zoekt-index/main.go
index 7cf2a73..becd59f 100644
--- a/cmd/zoekt-index/main.go
+++ b/cmd/zoekt-index/main.go
@@ -106,6 +106,7 @@
 	if err != nil {
 		return err
 	}
+	defer builder.Finish()
 
 	comm := make(chan fileInfo, 100)
 	agg := fileAggregator{
diff --git a/cmd/zoekt-repo-index/main.go b/cmd/zoekt-repo-index/main.go
index 3977676..fcb1de3 100644
--- a/cmd/zoekt-repo-index/main.go
+++ b/cmd/zoekt-repo-index/main.go
@@ -281,7 +281,8 @@
 
 		doc.Branches = append(doc.Branches, branches...)
 		if err := builder.Add(doc); err != nil {
-			log.Fatalf("Add(%s): %v", doc.Name, err)
+			log.Printf("Add(%s): %v", doc.Name, err)
+			break
 		}
 	}
 	if err := builder.Finish(); err != nil {
diff --git a/gitindex/index.go b/gitindex/index.go
index 1301ac7..3bac00f 100644
--- a/gitindex/index.go
+++ b/gitindex/index.go
@@ -459,6 +459,7 @@
 	if err != nil {
 		return err
 	}
+	defer builder.Finish()
 
 	var names []string
 	fileKeys := map[string][]fileKey{}