about summary refs log tree commit diff
path: root/src/libstore
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/gc.cc3
-rw-r--r--src/libstore/local-store.cc7
-rw-r--r--src/libstore/local-store.hh2
3 files changed, 12 insertions, 0 deletions
diff --git a/src/libstore/gc.cc b/src/libstore/gc.cc
index dc1de48ea605..4a025a8feb92 100644
--- a/src/libstore/gc.cc
+++ b/src/libstore/gc.cc
@@ -740,6 +740,9 @@ void LocalStore::collectGarbage(const GCOptions & options, GCResults & results)
         printMsg(lvlError, format("deleting unused links..."));
         removeUnusedLinks(state);
     }
+
+    /* While we're at it, vacuum the database. */
+    if (options.action == GCOptions::gcDeleteDead) vacuumDB();
 }
 
 
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index bd63ce55d095..793ec89d918b 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -1703,4 +1703,11 @@ void LocalStore::upgradeStore6()
 }
 
 
+void LocalStore::vacuumDB()
+{
+    if (sqlite3_exec(db, "vacuum;", 0, 0, 0) != SQLITE_OK)
+        throwSQLiteError(db, "vacuuming SQLite database");
+}
+
+
 }
diff --git a/src/libstore/local-store.hh b/src/libstore/local-store.hh
index ba0582922121..d2b13d6a9028 100644
--- a/src/libstore/local-store.hh
+++ b/src/libstore/local-store.hh
@@ -195,6 +195,8 @@ public:
 
     void clearFailedPaths(const PathSet & paths);
 
+    void vacuumDB();
+
 private:
 
     Path schemaPath;