<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>