diff options
-rw-r--r-- | src/libstore/gc.cc | 3 | ||||
-rw-r--r-- | src/libstore/local-store.cc | 7 | ||||
-rw-r--r-- | src/libstore/local-store.hh | 2 |
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; |