<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/2635edbca22e5dc4b280a02745767f057c95713f">https://github.com/macports/macports-base/commit/2635edbca22e5dc4b280a02745767f057c95713f</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 2635edbca portindex: modify tsv naming scheme
</span>2635edbca is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 2635edbca22e5dc4b280a02745767f057c95713f
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Tue Nov 1 08:05:03 2022 +1100

<span style='display:block; white-space:pre;color:#404040;'>    portindex: modify tsv naming scheme
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    With the former way, tsv values seemed to contain the wrong data
</span><span style='display:block; white-space:pre;color:#404040;'>    occasionally. (Which seems an awful lot like a bug in the thread
</span><span style='display:block; white-space:pre;color:#404040;'>    package...)
</span>---
 src/port/portindex.tcl | 75 +++++++++++++++++++++++++-------------------------
 1 file changed, 38 insertions(+), 37 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port/portindex.tcl b/src/port/portindex.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 0a0fe6a4c..31333612e 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port/portindex.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port/portindex.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -45,7 +45,7 @@ package require Thread
</span> 
 proc _read_index {idx} {
     set offset $::qindex($idx)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex lock [tsv::get PortIndex mutex]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    thread::mutex lock [tsv::get mutexes PortIndex]
</span>     try {
         seek $::oldfd $offset
         gets $::oldfd in_line
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -53,7 +53,7 @@ proc _read_index {idx} {
</span>         set len  [lindex $in_line 1]
         set out_line [read $::oldfd [expr {$len - 1}]]
     } finally {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        thread::mutex unlock [tsv::get PortIndex mutex]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        thread::mutex unlock [tsv::get mutexes PortIndex]
</span>     }
     set name [lindex $in_line 0]
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -110,22 +110,17 @@ proc _open_port {portinfo_name portdir absportdir port_options_name {subport {}}
</span>     set portinfo(portdir) $portdir
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc pindex {portdir {subport {}}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {$subport eq ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set tsv_varname $portdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set is_subport 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set tsv_varname ${portdir}/${subport}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set is_subport 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc pindex {portdir jobnum {subport {}}} {
</span>     try {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::set $tsv_varname status 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        tsv::set status $jobnum 1
</span>         set absportdir [file join $::directory $portdir]
         set portfile [file join $absportdir Portfile]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$is_subport} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$subport ne ""} {
</span>             set qname [string tolower $subport]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+            set is_subport 1
</span>         } else {
             set qname [string tolower [file tail $portdir]]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+            set is_subport 0
</span>         }
         # try to reuse the existing entry if it's still valid
         if {$::full_reindex != 1 && [info exists ::qindex($qname)]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -137,7 +132,7 @@ proc pindex {portdir {subport {}}} {
</span> 
                     # reuse entry if it was made from the same portdir
                     if {[info exists portinfo(portdir)] && $portinfo(portdir) eq $portdir} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        tsv::set $tsv_varname output [list $name $len $line]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        tsv::set output $jobnum [list $name $len $line]
</span> 
                         if {!$is_subport} {
                             if {[info exists ::ui_options(ports_debug)]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -146,11 +141,11 @@ proc pindex {portdir {subport {}}} {
</span> 
                             # report any subports
                             if {[info exists portinfo(subports)]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                                tsv::set $tsv_varname subports $portinfo(subports)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                tsv::set subports $jobnum $portinfo(subports)
</span>                             }
                         }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        tsv::set $tsv_varname status -1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        tsv::set status $jobnum -1
</span>                         return
                     }
                 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -170,12 +165,12 @@ proc pindex {portdir {subport {}}} {
</span>                 puts "Adding port $portdir"
             }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsv::set $tsv_varname output [_index_from_portinfo portinfo $is_subport]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            tsv::set $tsv_varname mtime [file mtime $portfile]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            tsv::set output $jobnum [_index_from_portinfo portinfo $is_subport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            tsv::set mtime $jobnum [file mtime $portfile]
</span> 
             # report this portfile's subports (if any)
             if {!$is_subport && [info exists portinfo(subports)]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                tsv::set $tsv_varname subports $portinfo(subports)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                tsv::set subports $jobnum $portinfo(subports)
</span>             }
         } on error {eMessage} {
             if {$is_subport} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -186,14 +181,14 @@ proc pindex {portdir {subport {}}} {
</span>             return
         }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::set $tsv_varname status 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        tsv::set status $jobnum 0
</span>         return
     } trap {POSIX SIG SIGINT} {} {
         puts stderr "SIGINT received, terminating."
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::set $tsv_varname status 99
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        tsv::set status $jobnum 99
</span>     } trap {POSIX SIG SIGTERM} {} {
         puts stderr "SIGTERM received, terminating."
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::set $tsv_varname status 99
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        tsv::set status $jobnum 99
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -224,15 +219,16 @@ proc init_threads {} {
</span>     set ::maxjobs [macports:get_parallel_jobs no]
     set ::poolid [tpool::create -minworkers $::maxjobs -maxworkers $::maxjobs -initcmd $::worker_init_script]
     array set ::pending_jobs {}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsv::set PortIndex mutex [thread::mutex create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set ::nextjobnum 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    tsv::set mutexes PortIndex [thread::mutex create]
</span> }
 
 proc handle_completed_jobs {} {
     set completed_jobs [tpool::wait $::poolid [array names ::pending_jobs]]
     foreach completed_job $completed_jobs {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portdir $::pending_jobs($completed_job)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lassign $::pending_jobs($completed_job) jobnum portdir subport
</span>         unset ::pending_jobs($completed_job)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::get $portdir status status
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        tsv::get status $jobnum status
</span>         # -1 = skipped, 0 = success, 1 = fail, 99 = exit
         if {$status == 99} {
             set ::exit_fail 1
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -243,27 +239,31 @@ proc handle_completed_jobs {} {
</span>             incr ::stats(total)
         } elseif {$status == 0 || $status == -1} {
             # queue jobs for subports
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[tsv::exists $portdir subports]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                foreach subport [tsv::get $portdir subports] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    tsv::set ${portdir}/${subport} status 99
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set jobid [tpool::post -nowait $::poolid [list pindex $portdir $subport]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set ::pending_jobs($jobid) ${portdir}/${subport}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {$subport eq "" && [tsv::exists subports $jobnum]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                foreach nextsubport [tsv::get subports $jobnum] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    tsv::set status $::nextjobnum 99
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set jobid [tpool::post -nowait $::poolid [list pindex $portdir $::nextjobnum $nextsubport]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set ::pending_jobs($jobid) [list $::nextjobnum $portdir $nextsubport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    incr ::nextjobnum
</span>                 }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                tsv::unset subports $jobnum
</span>             }
             if {$status == -1} {
                 incr ::stats(skipped)
             } else {
                 incr ::stats(total)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                tsv::get $portdir mtime mtime
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                tsv::get mtime $jobnum mtime
</span>                 if {$mtime > $::newest} {
                     set ::newest $mtime
                 }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                tsv::unset mtime $jobnum
</span>             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            _write_index {*}[tsv::get $portdir output]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            _write_index {*}[tsv::get output $jobnum]
</span>         } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            error "Unknown status for ${portdir}: $status"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            error "Unknown status for job $jobnum (${portdir} $subport): $status"
</span>         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        tsv::unset $portdir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        tsv::unset status $jobnum
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        tsv::unset output $jobnum
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -280,9 +280,10 @@ proc pindex_queue {portdir} {
</span>     # Now queue the new job.
     # Start with worst status so we get it when the thread
     # returns due to ctrl-c etc.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    tsv::set $portdir status 99
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set jobid [tpool::post -nowait $::poolid [list pindex $portdir {}]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ::pending_jobs($jobid) $portdir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    tsv::set status $::nextjobnum 99
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set jobid [tpool::post -nowait $::poolid [list pindex $portdir $::nextjobnum {}]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set ::pending_jobs($jobid) [list $::nextjobnum $portdir {}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    incr ::nextjobnum
</span> }
 
 proc process_remaining {} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -291,7 +292,7 @@ proc process_remaining {} {
</span>         handle_completed_jobs
     }
     tpool::release $::poolid
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    thread::mutex destroy [tsv::get PortIndex mutex]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    thread::mutex destroy [tsv::get mutexes PortIndex]
</span> }
 
 if {$argc > 8} {
</pre><pre style='margin:0'>

</pre>