<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/5def6d355b055c32deda01ee443885b4dcd00931">https://github.com/macports/macports-base/commit/5def6d355b055c32deda01ee443885b4dcd00931</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 5def6d35 Only access the registry from the main interpreter
</span>5def6d35 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 5def6d355b055c32deda01ee443885b4dcd00931
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Tue Aug 30 23:04:10 2022 +1000

<span style='display:block; white-space:pre;color:#404040;'>    Only access the registry from the main interpreter
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Fixes: https://trac.macports.org/ticket/24857
</span>---
 src/macports1.0/macports.tcl  |   8 +--
 src/port1.0/portinstall.tcl   | 132 ++++++++++++++++--------------------------
 src/port1.0/tests/library.tcl |   1 +
 src/registry2.0/portimage.tcl |  69 ++++++++++++++++++++++
 4 files changed, 122 insertions(+), 88 deletions(-)

<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 022f749a..f80ed3ad 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;'>@@ -1572,6 +1572,7 @@ proc macports::worker_init {workername portpath porturl portbuildpath options va
</span>     $workername alias registry_activate portimage::activate
     $workername alias registry_deactivate portimage::deactivate
     $workername alias registry_deactivate_composite portimage::deactivate_composite
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    $workername alias registry_install portimage::install
</span>     $workername alias registry_uninstall registry_uninstall::uninstall
     $workername alias registry_register_deps registry::register_dependencies
     $workername alias registry_fileinfo_for_index registry::fileinfo_for_index
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2263,8 +2264,6 @@ proc _mportexec {target mport} {
</span>             catch {cd $portpath}
             $workername eval {eval_targets clean}
         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # XXX hack to avoid running out of fds due to sqlite temp files, ticket #24857
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        interp delete $workername
</span>         macports::pop_log
         return 0
     } else {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3467,10 +3466,7 @@ proc mportclose {mport} {
</span>     if {$refcnt == 0} {
         dlist_delete macports::open_mports $mport
         set workername [ditem_key $mport workername]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # the hack in _mportexec might have already deleted the worker
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[interp exists $workername]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            interp delete $workername
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        interp delete $workername
</span>         set porturl [ditem_key $mport porturl]
         #if {[info exists macports::extracted_portdirs($porturl)]} {
             # TODO port.tcl calls mportopen multiple times on the same port to
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portinstall.tcl b/src/port1.0/portinstall.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index d60c40eb..fcd40ce1 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portinstall.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portinstall.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -33,7 +33,6 @@
</span> 
 package provide portinstall 1.0
 package require portutil 1.0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-package require registry2 2.0
</span> package require machista 1.0
 
 set org.macports.install [target_new org.macports.install portinstall::install_main]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -55,7 +54,7 @@ set_ui_prefix
</span> 
 proc portinstall::install_start {args} {
     global UI_PREFIX subport version revision portvariants \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-           prefix_frozen registry_open registry.path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           prefix_frozen
</span>     ui_notice "$UI_PREFIX [format [msgcat::mc "Installing %s @%s_%s%s"] $subport $version $revision $portvariants]"
     
     # start gsoc08-privileges
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -66,11 +65,6 @@ proc portinstall::install_start {args} {
</span>         elevateToRoot "install"
     }
     # end gsoc08-privileges
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![info exists registry_open]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        registry::open [file join ${registry.path} registry registry.db]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set registry_open yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span> 
     # create any users and groups needed by the port
     handle_add_users
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -334,7 +328,7 @@ proc portinstall::extract_contents {location type} {
</span> proc portinstall::install_main {args} {
     global subport version portpath depends_run revision user_options \
     portvariants requested_variants depends_lib PortInfo epoch \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    os.platform os.major portarchivetype installPlist registry.path porturl \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    os.platform os.major portarchivetype installPlist porturl \
</span>     portinstall::file_is_binary portinstall::actual_cxx_stdlib portinstall::cxx_stdlib_overridden
 
     set oldpwd [pwd]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -376,88 +370,62 @@ proc portinstall::install_main {args} {
</span>         }
     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    registry::write {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set regref [registry::entry create $subport $version $revision $portvariants $epoch]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend regref name $subport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend regref version $version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend regref revision $revision
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend regref variants $portvariants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend regref epoch $epoch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists user_options(ports_requested)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend regref requested $user_options(ports_requested)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend regref requested 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend regref os_platform ${os.platform}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend regref os_major ${os.major}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend regref archs [get_canonical_archs]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${portinstall::actual_cxx_stdlib} ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend regref cxx_stdlib ${portinstall::actual_cxx_stdlib}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend regref cxx_stdlib_overridden ${portinstall::cxx_stdlib_overridden}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # no info in the archive
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        global configure.cxx_stdlib cxx_stdlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend regref cxx_stdlib_overridden [expr {${configure.cxx_stdlib} ne $cxx_stdlib}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Trick to have a portable GMT-POSIX epoch-based time.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend regref date [expr {[clock scan now -gmt true] - [clock scan "1970-1-1 00:00:00" -gmt true]}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists requested_variants]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend regref requested_variants $requested_variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists user_options(ports_requested)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            $regref requested $user_options(ports_requested)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            $regref requested 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $regref os_platform ${os.platform}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $regref os_major ${os.major}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $regref archs [get_canonical_archs]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {${portinstall::actual_cxx_stdlib} ne ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            $regref cxx_stdlib ${portinstall::actual_cxx_stdlib}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            $regref cxx_stdlib_overridden ${portinstall::cxx_stdlib_overridden}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # no info in the archive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            global configure.cxx_stdlib cxx_stdlib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            $regref cxx_stdlib_overridden [expr {${configure.cxx_stdlib} ne $cxx_stdlib}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Trick to have a portable GMT-POSIX epoch-based time.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $regref date [expr {[clock scan now -gmt true] - [clock scan "1970-1-1 00:00:00" -gmt true]}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists requested_variants]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            $regref requested_variants $requested_variants
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend regref depends $dep_portnames
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach dep_portname $dep_portnames {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            $regref depends $dep_portname
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend regref location $location
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        $regref installtype image
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $regref state imaged
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $regref location $location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists installPlist]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # register files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            $regref map $installPlist
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach f [array names portinstall::file_is_binary] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set fileref [registry::file open [$regref id] $f]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                $fileref binary $portinstall::file_is_binary($f)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                registry::file close $fileref
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists installPlist]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend regref files $installPlist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend regref binary [array get portinstall::file_is_binary]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # store portfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portfile_path [file join $portpath Portfile]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portfile_sha256 [sha256 file $portfile_path]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portfile_size [file size $portfile_path]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portfile_reg_dir [file join ${registry.path} registry portfiles ${subport}-${version}_${revision} ${portfile_sha256}-${portfile_size}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        file mkdir $portfile_reg_dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portfile_reg_path ${portfile_reg_dir}/Portfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {![file isfile $portfile_reg_path] || [file size $portfile_reg_path] != $portfile_size || [sha256 file $portfile_reg_path] ne $portfile_sha256} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            file copy -force $portfile_path $portfile_reg_dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            file attributes $portfile_reg_path -permissions 0644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        $regref portfile ${portfile_sha256}-${portfile_size}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # store portgroups
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists PortInfo(portgroups)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach pg $PortInfo(portgroups) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set pgname [lindex $pg 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set pgversion [lindex $pg 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set groupFile [lindex $pg 2]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[file isfile $groupFile]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set pgsha256 [sha256 file $groupFile]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set pgsize [file size $groupFile]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set pg_reg_dir [file join ${registry.path} registry portgroups ${pgsha256}-${pgsize}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set pg_reg_path ${pg_reg_dir}/${pgname}-${pgversion}.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {![file isfile $pg_reg_path] || [file size $pg_reg_path] != $pgsize || [sha256 file $pg_reg_path] ne $pgsha256} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        file mkdir $pg_reg_dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        file copy -force $groupFile $pg_reg_dir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    file attributes $pg_reg_path -permissions 0644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    $regref addgroup $pgname $pgversion $pgsha256 $pgsize
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ui_debug "install_main: no portgroup ${pgname}-${pgversion}.tcl found"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # portfile info
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend regref portfile_path [file join $portpath Portfile]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # portgroup info
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists PortInfo(portgroups)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set regref_pgs [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach pg $PortInfo(portgroups) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set pgname [lindex $pg 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set pgversion [lindex $pg 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set groupFile [lindex $pg 2]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[file isfile $groupFile]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend regref_pgs $pgname $pgversion $groupFile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug "install_main: no portgroup ${pgname}-${pgversion}.tcl found"
</span>             }
         }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend regref portgroups $regref_pgs
</span>     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    #registry::entry close $regref
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    registry_install $regref
</span> 
     _cd $oldpwd
     return 0
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/tests/library.tcl b/src/port1.0/tests/library.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 0203d85c..c86e0009 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/tests/library.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/tests/library.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -33,6 +33,7 @@ proc macports_worker_init {} {
</span>     interp alias {} registry_activate               {} portimage::activate
     interp alias {} registry_deactivate             {} portimage::deactivate
     interp alias {} registry_deactivate_composite   {} portimage::deactivate_composite
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    interp alias {} registry_install                {} portimage::install
</span>     interp alias {} registry_uninstall              {} registry_uninstall::uninstall
     interp alias {} registry_register_deps          {} registry::register_dependencies
     interp alias {} registry_fileinfo_for_index     {} registry::fileinfo_for_index
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/registry2.0/portimage.tcl b/src/registry2.0/portimage.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index fb8748d0..fdd9024f 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/registry2.0/portimage.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/registry2.0/portimage.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -838,5 +838,74 @@ proc _deactivate_contents {port imagefiles {force 0} {rollback 0}} {
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Create a new registry entry using the given metadata array
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc install {metadata} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global macports::registry.path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    array set m $metadata
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    registry::write {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # store portfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set portfile_sha256 [sha256 file $m(portfile_path)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set portfile_size [file size $m(portfile_path)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set portfile_reg_dir [file join ${registry.path} registry portfiles $m(name)-$m(version)_$m(revision) ${portfile_sha256}-${portfile_size}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set portfile_reg_path ${portfile_reg_dir}/Portfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        file mkdir $portfile_reg_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {![file isfile $portfile_reg_path] || [file size $portfile_reg_path] != $portfile_size
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                || [sha256 file $portfile_reg_path] ne $portfile_sha256} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            file copy -force $m(portfile_path) $portfile_reg_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            file attributes $portfile_reg_path -permissions 0644
</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;'>+        # store portgroups
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[info exists m(portgroups)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach {pgname pgversion groupFile} $m(portgroups) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set pgsha256 [sha256 file $groupFile]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set pgsize [file size $groupFile]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set pg_reg_dir [file join ${registry.path} registry portgroups ${pgsha256}-${pgsize}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set pg_reg_path ${pg_reg_dir}/${pgname}-${pgversion}.tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend portgroups [list $pgname $pgversion $pgsha256 $pgsize]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {![file isfile $pg_reg_path] || [file size $pg_reg_path] != $pgsize || [sha256 file $pg_reg_path] ne $pgsha256} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    file mkdir $pg_reg_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    file copy -force $groupFile $pg_reg_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                file attributes $pg_reg_path -permissions 0644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            unset m(portgroups)
</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 regref [registry::entry create $m(name) $m(version) $m(revision) $m(variants) $m(epoch)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        $regref installtype image
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        $regref state imaged
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        $regref portfile ${portfile_sha256}-${portfile_size}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[info exists portgroups]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach p $portgroups {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                $regref addgroup {*}$p
</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;'>+        foreach dep_portname $m(depends) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            $regref depends $dep_portname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[info exists m(files)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # register files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            $regref map $m(files)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            unset m(files)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[info exists m(binary)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach {f isbinary} $m(binary) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set fileref [registry::file open [$regref id] $f]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                $fileref binary $isbinary
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                registry::file close $fileref
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            unset m(binary)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        unset m(name) m(version) m(revision) m(variants) m(epoch) m(depends) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              m(portfile_path)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # remaining metadata maps directly to reg entry fields
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach key [array names m] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            $regref $key $m($key)
</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> # End of portimage namespace
 }
</pre><pre style='margin:0'>

</pre>