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