<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/6b5f407cbffb56ca31e7b79b4655d0d5d402dd2e">https://github.com/macports/macports-base/commit/6b5f407cbffb56ca31e7b79b4655d0d5d402dd2e</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 6b5f407cbffb56ca31e7b79b4655d0d5d402dd2e
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Mon May 12 02:36:48 2025 +1000

<span style='display:block; white-space:pre;color:#404040;'>    reclaim: offer to delete old snapshots
</span>---
 src/macports1.0/reclaim.tcl  | 45 ++++++++++++++++++++++++++++++++++++++++++++
 src/macports1.0/snapshot.tcl |  5 ++---
 2 files changed, 47 insertions(+), 3 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/reclaim.tcl b/src/macports1.0/reclaim.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index b19a41935..be033e12a 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/reclaim.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/reclaim.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -77,6 +77,7 @@ namespace eval reclaim {
</span>         remove_distfiles
         remove_builds
         remove_ccache
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        remove_snapshots
</span> 
         if {![macports::global_option_isset ports_dryrun]} {
             set last_run_contents [read_last_run_file]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -181,6 +182,50 @@ namespace eval reclaim {
</span>         }
     }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    proc remove_snapshots {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Delete registry snapshots older than 30 days
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[macports::global_option_isset ports_dryrun]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_msg "Deleting snapshots... (dry run)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_info "Skipping deletion of registry snapshots older than 30 days (dry run)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return
</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;'>+        set now [clock seconds]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set old_snapshot_info {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set snapshots [lmap snap [registry::snapshot get_all] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set created_at_seconds [clock scan [$snap created_at] -timezone :UTC -format "%Y-%m-%d %T"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {($now - $created_at_seconds) <= 2592000} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend old_snapshot_info "[clock format $created_at_seconds -format "%Y-%m-%d %T%z"] [$snap note]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            string cat $snap
</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 {[llength $snapshots] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_info "No registry snapshots older than 30 days to delete"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return
</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;'>+        global macports::ui_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set retval 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[info exists ui_options(questions_yesno)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set retval [$ui_options(questions_yesno) "Registry snapshots older than 30 days found:" "" [list "" {*}$old_snapshot_info] "y" 0 "Would you like to delete them?"]
</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 {${retval} == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_info "Deleting old registry snapshots"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            macports_try -pass_signal {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                foreach snap $snapshots {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    snapshot::delete_snapshot [$snap id]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } on error {eMessage} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug "$::errorInfo"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_error "$eMessage"
</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;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     proc walk_files {dir files_in_use unused_name} {
         # Recursively walk the given directory $dir and build a list of all files that are present on-disk but not listed in $files_in_use.
         # The list of unused files will be stored in the variable given by $unused_name
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/snapshot.tcl b/src/macports1.0/snapshot.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 48e198a68..50e5142d4 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/snapshot.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/snapshot.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -189,7 +189,7 @@ namespace eval snapshot {
</span>                 return 0
             }
             "delete" {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                return [delete_snapshot $opts]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return [delete_snapshot [dict get $opts ports_snapshot_delete]]
</span>             }
             "export" {
                 if {[catch {set snapshot [registry::snapshot get_by_id [dict get $opts ports_snapshot_export]]} result]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -482,9 +482,8 @@ namespace eval snapshot {
</span> 
     # Remove a snapshot from the registry. Not called 'delete' to avoid
     # confusion with the proc in portutil.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc delete_snapshot {opts} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    proc delete_snapshot {snapshot_id} {
</span>         global registry::tdbc_connection
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set snapshot_id [dict get $opts ports_snapshot_delete]
</span>         if {[catch {registry::snapshot get_by_id $snapshot_id}]} {
             ui_error "No such snapshot ID: $snapshot_id"
             return 1
</pre><pre style='margin:0'>

</pre>