<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/c82a2699117181b1fedd490c62a3efffca7c8947">https://github.com/macports/macports-base/commit/c82a2699117181b1fedd490c62a3efffca7c8947</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new c82a26991 Only vacuum registry if it saves significant space
</span>c82a26991 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit c82a2699117181b1fedd490c62a3efffca7c8947
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Fri Sep 15 08:47:41 2023 +1000

<span style='display:block; white-space:pre;color:#404040;'>    Only vacuum registry if it saves significant space
</span>---
 src/cregistry/registry.c | 38 ++++++++++++++++++++++++++++++--------
 1 file changed, 30 insertions(+), 8 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/registry.c b/src/cregistry/registry.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 07d2f248a..d50cbf951 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/registry.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/registry.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -497,6 +497,8 @@ int reg_vacuum(char *db_path) {
</span>     sqlite3_stmt* stmt = NULL;
     int result = 0;
     reg_error err;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    int r;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    sqlite3_int64 dbsize, freesize;
</span> 
     if (sqlite3_open(db_path, &db) == SQLITE_OK) {
         if (!init_db(db, &err)) {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -507,20 +509,40 @@ int reg_vacuum(char *db_path) {
</span>         return 0;
     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (sqlite3_prepare_v2(db, "VACUUM", -1, &stmt, NULL) == SQLITE_OK) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        int r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        /* XXX: Busy waiting, consider using sqlite3_busy_handler/timeout */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        do {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    sqlite3_busy_timeout(db, 25);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Get db size & size of unused space */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if (sqlite3_prepare_v2(db, "SELECT page_count * page_size AS dbsize,"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            " freelist_count * page_size AS freesize FROM pragma_page_count(),"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            " pragma_freelist_count(), pragma_page_size()",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            -1, &stmt, NULL) == SQLITE_OK) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        r = sqlite3_step(stmt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (r == SQLITE_ROW) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            dbsize = sqlite3_column_int64(stmt, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            freesize = sqlite3_column_int64(stmt, 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            result = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if (stmt) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        sqlite3_finalize(stmt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Don't vacuum unless free space is at least 1 MB and also at
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       least 1% of the total db size. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if (result && freesize >= 1000000 && dbsize > 0 && ((double)freesize / (double)dbsize) >= 0.01) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        result = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (sqlite3_prepare_v2(db, "VACUUM", -1, &stmt, NULL) == SQLITE_OK) {
</span>             sqlite3_step(stmt);
             r = sqlite3_reset(stmt);
             if (r == SQLITE_OK) {
                 result = 1;
             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        } while (r == SQLITE_BUSY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (stmt) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sqlite3_finalize(stmt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (stmt) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            sqlite3_finalize(stmt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span>     }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     sqlite3_close(db);
     return result;
 }
</pre><pre style='margin:0'>

</pre>