0faea16954ed530c537f5aa5d0cf8e0e33441b8a hiram Fri May 20 17:21:22 2022 -0700 now correctly show alias names on hgTracks chromInfoPage when using chromAliasBb file refs #26360 diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index 0e0064b..118b8cd 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -10135,40 +10135,56 @@ cgiTableFieldEnd(); cgiTableFieldStartAlignRight(); printLongWithCommas(stdout, total); puts(" "); cgiTableFieldEnd(); if (hasAlias) { cgiSimpleTableFieldStart(); puts(" "); cgiTableFieldEnd(); } cgiTableRowEnd(); } static char *chrAliases(struct slName *names, char *sequenceName) -/* lookup the sequenceName in the aliasHash and return csv string - * of alias names +/* names is already a list of aliases, return csv string + * of alias names and avoid reproducing the sequenceName */ { +/* to avoid duplicate names in the returned list, remember them */ +struct hash *nameHash = newHashExt(8, TRUE); /* TRUE == on stack memory */ if (NULL == names) return NULL; +if (isNotEmpty(sequenceName)) + hashAddInt(nameHash, sequenceName, 1); struct dyString *returned = dyStringNew(512); -dyStringPrintf(returned, "%s", names->name); -for(names = names->next; names; names = names->next) +int wordCount = 0; +for( ; names; names = names->next) + { + if (hashLookup(nameHash, names->name) != NULL) + continue; + if (isNotEmpty(names->name)) + { + if (wordCount) dyStringPrintf(returned, ", %s",names->name); + else + dyStringPrintf(returned, "%s", names->name); + ++wordCount; + hashAddInt(nameHash, names->name, 1); + } + } return dyStringCannibalize(&returned); } void chromInfoRowsChromExt(char *sortType) /* Make table rows of chromosomal chromInfo name & size, sorted by name. */ { struct slName *chromList = hAllChromNames(database); struct slName *chromPtr = NULL; long long total = 0; boolean hasAlias = hTableExists(database, "chromAlias"); /* key is database sequence name, value is an alias name, can be multiple * entries for the same sequence name. NULL if no chromAlias available */ if (sameString(sortType,"default"))