Skip to content
Permalink
Browse files

Various improvements to sorting script

Use ni operator instead of lsearch.
Normalise all port names to lower case to prevent duplicates.
Only check if each port is in the list once.
Ensure that subports are only added once.
  • Loading branch information
jmroot committed Mar 14, 2018
1 parent 97f4db4 commit 2e1395ef0a3c5fed103c6ba8d0f717c572388746
Showing with 21 additions and 19 deletions.
  1. +21 −19 tools/sort-with-subports.tcl
@@ -49,12 +49,10 @@ proc ui_channels {priority} {
proc process_port_deps {portname portdeps_in portlist_in} {
upvar $portdeps_in portdeps
upvar $portlist_in portlist
if {[lsearch -exact $portlist $portname] == -1} {
if {[info exists portdeps($portname)]} {
foreach portdep $portdeps($portname) {
if {[lsearch -exact $portlist $portdep] == -1} {
process_port_deps $portdep portdeps portlist
}
if {[info exists portdeps($portname)]} {
foreach portdep $portdeps($portname) {
if {$portdep ni $portlist} {
process_port_deps $portdep portdeps portlist
}
}
lappend portlist $portname
@@ -71,10 +69,12 @@ array set portdepinfo {}
set todo [list]
if {[lindex $argv 0] eq "-"} {
while {[gets stdin line] >= 0} {
lappend todo [string trim $line]
lappend todo [string tolower [string trim $line]]
}
} else {
set todo $argv
foreach p $argv {
lappend todo [string tolower $p]
}
}
# save the ones that the user actually wants to know about
foreach p $todo {
@@ -96,32 +96,34 @@ while {$todo ne {}} {
}

array set portinfo [lindex $result 1]
set portname $portinfo(name)
if {[info exists inputports($portname)] && [info exists portinfo(subports)]} {
foreach subport $portinfo(subports) {
lappend todo $subport
set outputports($subport) 1
if {![info exists portdepinfo($p)]} {
if {[info exists inputports($p)] && [info exists portinfo(subports)]} {
foreach subport $portinfo(subports) {
set splower [string tolower $subport]
lappend todo $splower
set outputports($splower) 1
}
}
}
if {![info exists portdepinfo($portname)]} {
set deplist [list]
foreach depstype $depstypes {
if {[info exists portinfo($depstype)] && $portinfo($depstype) != ""} {
if {[info exists portinfo($depstype)] && $portinfo($depstype) ne ""} {
foreach onedep $portinfo($depstype) {
set depname [lindex [split [lindex $onedep 0] :] end]
set depname [string tolower [lindex [split [lindex $onedep 0] :] end]]
lappend deplist $depname
lappend todo $depname
}
}
}
set portdepinfo($portname) $deplist
set portdepinfo($p) $deplist
}
array unset portinfo
}

set portlist [list]
foreach portname [lsort -dictionary [array names portdepinfo]] {
process_port_deps $portname portdepinfo portlist
if {$portname ni $portlist} {
process_port_deps $portname portdepinfo portlist
}
}

foreach portname $portlist {

0 comments on commit 2e1395e

Please sign in to comment.
You can’t perform that action at this time.