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;