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("&nbsp");
     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"))