<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/bec110b652af67e1887faeb5ab66dcd07b04752d">https://github.com/macports/macports-base/commit/bec110b652af67e1887faeb5ab66dcd07b04752d</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 bec110b65 upgrade: refresh metadata for ports if not outdated
</span>bec110b65 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit bec110b652af67e1887faeb5ab66dcd07b04752d
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Sat Nov 25 03:16:13 2023 +1100

<span style='display:block; white-space:pre;color:#404040;'>    upgrade: refresh metadata for ports if not outdated
</span>---
 src/macports1.0/macports.tcl      | 102 +++++++++++++++++++++++++++++++++++++-
 src/registry2.0/registry_util.tcl |  26 ++++++++++
 2 files changed, 127 insertions(+), 1 deletion(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/macports.tcl b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 45913ba8d..19c1f97f1 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -4450,7 +4450,9 @@ proc macports::_upgrade {portname dspec variationslist optionslist {depscachenam
</span>     }
 
     if {!$will_install} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # nothing to do for this port, so just check if we have to do dependents
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # not upgrading this port, so just update its metadata
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        _upgrade_metadata $mport $regref $is_dryrun
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # check if we have to do dependents
</span>         if {[info exists options(ports_do_dependents)]} {
             # We do dependents ..
             set options(ports_nodeps) 1
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -4809,6 +4811,104 @@ proc macports::_upgrade_dependencies {portinfoname depscachename variationslistn
</span>     return $status
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# update certain metadata if changed in the portfile since installation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc macports::_upgrade_metadata {mport regref is_dryrun} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set workername [ditem_key $mport workername]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    array set portinfo [mportinfo $mport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Sanity check
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$portinfo(canonical_active_variants) ne [$regref variants]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_debug "$portinfo(name): Registry variants '[$regref variants]' don't match port variants '$portinfo(canonical_active_variants)'"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_debug "Not attempting to update metadata for $portinfo(name)"
</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;'>+    # Update runtime dependencies if needed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # First get the deps from the Portfile and from the registry.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    array set deps_in_tree {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach dtype [list depends_lib depends_run] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[info exists portinfo($dtype)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach dep $portinfo($dtype) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set dname [$workername eval [list _get_dep_port $dep]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {$dname ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set deps_in_tree($dname) 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;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    array set deps_in_reg {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach dep_regref [$regref dependencies] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set deps_in_reg([$dep_regref name]) 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;'>+    # Find the differences.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set removed [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach d [array names deps_in_reg] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {![info exists deps_in_tree($d)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend removed $d
</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 added [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach d [array names deps_in_tree] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {![info exists deps_in_reg($d)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend added $d
</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;'>+    # Update the registry.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $removed] > 0 || [llength $added] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$is_dryrun} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_info "Not updating dependencies for $portinfo(name) @$portinfo(version)_$portinfo(revision)$portinfo(canonical_active_variants) (dry run)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_info "Updating dependencies for $portinfo(name) @$portinfo(version)_$portinfo(revision)$portinfo(canonical_active_variants)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[llength $removed] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                registry::delete_dependencies $regref $removed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[llength $added] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                registry::write {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    foreach d $added {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        $regref depends $d
</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><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;'>+    # Update platform if it been corrected to 'any' (indicating
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # compatibility with multiple platforms or versions).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # The opposite case requires a rev bump so is not handled here.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lassign [$workername eval [list _get_compatible_platform]] os_platform os_major
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$os_major eq "any" && $os_major ne [$regref os_major]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$is_dryrun} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_info "Not updating platform for $portinfo(name) @$portinfo(version)_$portinfo(revision)$portinfo(canonical_active_variants) (dry run)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_info "Updating platform for $portinfo(name) @$portinfo(version)_$portinfo(revision)$portinfo(canonical_active_variants)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            registry::write {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                $regref os_major $os_major
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                # No need to check for a completely different platform, since
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                # the port would be considered actually outdated in that case.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {$os_platform ne [$regref os_platform]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    $regref os_platform $os_platform
</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><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Update archs if it has been corrected to 'noarch'.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Like platforms above, the opposite case requires a rev bump.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set archs [$workername eval [list get_canonical_archs]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$archs eq "noarch" && $archs ne [$regref archs]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$is_dryrun} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_info "Not updating archs for $portinfo(name) @$portinfo(version)_$portinfo(revision)$portinfo(canonical_active_variants) (dry run)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_info "Updating archs for $portinfo(name) @$portinfo(version)_$portinfo(revision)$portinfo(canonical_active_variants)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            registry::write {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                $regref archs $archs
</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><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # mportselect
 #   * command: The only valid commands are list, set, show and summary
 #   * group: This argument should correspond to a directory under
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/registry2.0/registry_util.tcl b/src/registry2.0/registry_util.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 4f467cc0f..d10ed4e7f 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/registry2.0/registry_util.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/registry2.0/registry_util.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -33,6 +33,7 @@
</span> package provide registry_util 2.0
 
 package require registry2 2.0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+package require tdbc::sqlite3
</span> 
 namespace eval registry {
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -169,4 +170,29 @@ proc run_target {port target options} {
</span>     return 0
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+## Create and configure a tdbc connection to the registry
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc tdbc_connect {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global registry::tdbc_connection
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set reg_path [::file join ${macports::registry.path} registry registry.db]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set tdbc_connection [tdbc::sqlite3::connection new $reg_path]
</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;'>+## Delete the given dependencies for the given entry
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+## @return   true if successful, false otherwise
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc delete_dependencies {entry deplist} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global registry::tdbc_connection
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![info exists tdbc_connection]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        tdbc_connect
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set stmt [$tdbc_connection prepare {DELETE FROM dependencies WHERE id = :id AND name = :name}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set id [$entry id]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    $tdbc_connection transaction {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach name $deplist {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            $stmt execute
</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;'>+    $stmt close
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> }
</pre><pre style='margin:0'>

</pre>