aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 dc1de48ea..4a025a8fe 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 bd63ce55d..793ec89d9 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 ba0582922..d2b13d6a9 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;