b02d20dede590203b6ecca10be473e7e22179a51
braney
  Thu Jan 12 13:12:53 2023 -0800
deal with some weird edge cases in hub that Hiram's hub illicit.   Don't
read a single trackDb.txt file more than once even if it's referenced
from mulitple hubs.  Also, only the first time a genome is defined does
it get to populate its own groups.  Subsequent examples get put into
their own group, just like a normal track hub does.

diff --git src/hg/hgTracks/searchTracks.c src/hg/hgTracks/searchTracks.c
index f6b3441..9bcb722 100644
--- src/hg/hgTracks/searchTracks.c
+++ src/hg/hgTracks/searchTracks.c
@@ -285,31 +285,33 @@
         {
         pfd = slPopHead(&pfdList);
         pfd->threadId = threadParam;
         slAddHead(&pfdRunning, pfd);
         }
     pthread_mutex_unlock(&pfdMutex);
     if (allDone)
         return NULL;
     struct hubSearchTracks *hst = pfd->hst;
     struct track *tracksToAdd = NULL;
     long startTime = clock1000();
     struct errCatch *errCatch = errCatchNew();
     if (errCatchStart(errCatch))
         {
         pfd->done = FALSE;
-        struct trackDb *tdbList = hubAddTracks(hst->hub, database);
+        boolean foundFirstGenome = FALSE;
+        struct hash *trackDbNameHash = newHash(5);
+        struct trackDb *tdbList = hubAddTracks(hst->hub, database, &foundFirstGenome, trackDbNameHash);
         if (measureTiming)
             measureTime("After connecting to hub %s: '%d': ", hst->hubUrl, hst->hubId);
         // get composite and subtracks into trackList
         hubTdbListToTrackList(tdbList, &tracksToAdd, hst->searchedTracks);
         hubTdbListAddSupers(tdbList, &tracksToAdd, hst->searchedTracks);
         pfd->done = TRUE;
         pfd->tlist = tracksToAdd;
         pfd->searchTime = clock1000() - startTime;;
         }
     errCatchEnd(errCatch);
     pthread_mutex_lock(&pfdMutex);
     slRemoveEl(&pfdRunning, pfd);
     slAddHead(&pfdDone, pfd);
     if (measureTiming)
         measureTime("Finished finding tracks for hub '%s': ", pfd->hubName);