<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/423f863f81885db84b822fb6498d650761b873d1">https://github.com/macports/macports-base/commit/423f863f81885db84b822fb6498d650761b873d1</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 423f863f8 restore: track opened mports and close when done
</span>423f863f8 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 423f863f81885db84b822fb6498d650761b873d1
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Thu Jun 6 05:43:45 2024 +1000
<span style='display:block; white-space:pre;color:#404040;'> restore: track opened mports and close when done
</span>---
src/macports1.0/migrate.tcl | 5 ++++-
src/macports1.0/restore.tcl | 52 +++++++++++++++++++++++++++++++--------------
2 files changed, 40 insertions(+), 17 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/migrate.tcl b/src/macports1.0/migrate.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index f1b4f44d8..f835d0814 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/migrate.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/migrate.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -154,9 +154,12 @@ namespace eval migrate {
</span> continue
}
set variations [restore::variants_to_variations_arr $requested_variants]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Set same options as restore code so it's more likely the open mports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # can be reused rather than having to be opened again.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set options [dict create ports_requested [$port requested] subport $portname]
</span> lassign [mportlookup $portname] portname portinfo
if {$portname eq "" ||
<span style='display:block; white-space:pre;background:#ffe0e0;'>- [catch {mportopen [dict get $portinfo porturl] [dict create subport $portname] $variations} mport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ [catch {mportopen [dict get $portinfo porturl] $options $variations} mport]
</span> } then {
incr portfile_counter
$progress update $portfile_counter $portfile_total
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/restore.tcl b/src/macports1.0/restore.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 96b328eea..e0ea3b08b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/restore.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/restore.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -42,6 +42,7 @@ package require lambda 1
</span>
namespace eval restore {
variable ui_prefix
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ variable mports
</span>
proc main {opts} {
# The main function. If the action is provided a snapshot id, then it deactivates
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -341,6 +342,7 @@ namespace eval restore {
</span> # The list in dependency-sorted order
# The dependency graph, to be destroyed by calling $dependencies destroy
proc resolve_dependencies {snapshot} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ variable mports
</span> set portlist [$snapshot ports]
set ports [dict create]
set dep_ports [dict create]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -415,6 +417,7 @@ namespace eval restore {
</span> $progress update $requested_counter $requested_total
continue
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ lassign $port portname portinfo
</span>
if {[dict exists $ports $portname]} {
lassign [dict get $ports $portname] requested _ variants
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -427,11 +430,17 @@ namespace eval restore {
</span> }
# Open the port with the requested variants from the snapshot
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set variations [variants_to_variations_arr $variants]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set portinfo [lindex $port 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {set mport [mportopen [dict get $portinfo porturl] [dict create subport [dict get $portinfo name]] $variations]} result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $progress intermission
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- error "Unable to open port '$portname': $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists $mports $portname $variants]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set options [dict create ports_requested $requested subport $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set variations [variants_to_variations_arr $variants]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {set mport [mportopen [dict get $portinfo porturl] $options $variations]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $progress intermission
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "Unable to open port '$portname' with variants '$variants': $result"
</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;'>+ dict set mports $portname $variants $mport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set mport [dict get $mports $portname $variants]
</span> }
set portinfo [mportinfo $mport]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -534,6 +543,7 @@ namespace eval restore {
</span> }
proc restore_state {snapshot} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ variable mports [dict create]
</span> lassign [resolve_dependencies $snapshot] sorted_snapshot_portlist dependencies
# map from port name to an entry describing why the port failed or was
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -585,28 +595,38 @@ namespace eval restore {
</span> _handle_failure failed $dependencies $name "port $name not found in the port index"
continue
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set portinfo [lindex $res 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set porturl [dict get $portinfo porturl]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set options [dict create ports_requested $requested subport [dict get $portinfo name]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set variations [variants_to_variations_arr $variants]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lassign $res portname portinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists $mports $portname $variants]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set porturl [dict get $portinfo porturl]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set options [dict create ports_requested $requested subport $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set variations [variants_to_variations_arr $variants]
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {set workername [mportopen $porturl $options $variations]} result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_msg $::errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- _handle_failure failed $dependencies $name "unable to open port $name: $result"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {set mport [mportopen $porturl $options $variations]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_debug $::errorInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _handle_failure failed $dependencies $name "unable to open port $name: $result"
</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;'>+ dict set mports $portname $variants $mport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set mport [dict get $mports $portname $variants]
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {set result [mportexec $workername $target]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {set result [mportexec $mport $target]} result]} {
</span> ui_msg "$::errorInfo"
_handle_failure failed $dependencies $name "Unable to execute target $target for port $name: $result"
} elseif {$result != 0} {
_handle_failure failed $dependencies $name "Failed to $target $name"
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- mportclose $workername
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mportclose $mport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict unset mports $portname $variants
</span> }
$dependencies destroy
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict for {pname sub} $mports {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict for {variants mport} $sub {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mportclose $mport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span>
return $failed
}
</pre><pre style='margin:0'>
</pre>