Index: server/teapot_index ================================================================== --- server/teapot_index +++ server/teapot_index @@ -494,30 +494,49 @@ file rename -force -- $tmpindexfile $indexfile } proc create_all_entity_files {dstdir pkginfo_arrlist} { set entfields $::entity_definition(package) + + for {set idx 0} {$idx < [llength $entfields]} {incr idx} { + set fieldname [lindex $entfields $idx] + set fieldname_to_idx($fieldname) $idx + } + + set enttypes_list [list] + for {set idx 1} {$idx < int(pow(2, [llength $entfields]))} {incr idx} { + set enttypes_list_cur [list] + + for {set subidx 0} {$subidx < [llength $entfields]} {incr subidx} { + if {$idx & (1 << $subidx)} { + lappend enttypes_list_cur [lindex $entfields $subidx] + } + } + + lappend enttypes_list $enttypes_list_cur + } array set pkginfo $pkginfo_arrlist set seen_entities [list] foreach pkgdata [lsort -dictionary [array names pkginfo]] { - unset -nocomplain entity - lappend entity entity package - - for {set endidx 0} {$endidx < [llength $entfields]} {incr endidx} { - set enttype [lindex $entfields $endidx] - set entval [lindex $pkgdata $endidx] - lappend entity $enttype - lappend entity $entval - - if {[lsearch -exact $seen_entities $entity] != -1} { - continue - } - lappend seen_entities $entity - - create_entity_file $entity $dstdir $pkginfo_arrlist + foreach enttypes $enttypes_list { + unset -nocomplain entity + lappend entity entity package + + foreach enttype $enttypes { + set entval [lindex $pkgdata $fieldname_to_idx($enttype)] + lappend entity $enttype + lappend entity $entval + + if {[lsearch -exact $seen_entities $entity] != -1} { + continue + } + lappend seen_entities $entity + + create_entity_file $entity $dstdir $pkginfo_arrlist + } } } } set pkginfo [teapot_index $srcdir]