f9f813c4330857fed2ed6008e6d6e9eb54d2474a
galt
  Fri Mar 28 04:51:53 2025 -0700
fixing slNameSort in list.c for hubApi, refreshed expected output lists. fixes #26947

diff --git src/hg/lib/hubConnect.c src/hg/lib/hubConnect.c
index ac3cb827f49..38a2f70c5c5 100644
--- src/hg/lib/hubConnect.c
+++ src/hg/lib/hubConnect.c
@@ -921,85 +921,54 @@
     {
     safef(buffer, sizeof buffer, "%s_%s", hub->name, grpList->name);
     grpList->name = cloneString(buffer);
     safef(buffer, sizeof buffer, "Hub: %s : %s", hub->shortLabel, grpList->label);
     grpList->label = cloneString(buffer);
     }
 }
 
 struct trackDb *hubAddTracks(struct hubConnectStatus *hub, char *database, boolean *foundFirstGenome, struct hash *trackDbNameHash, struct grp **hubGroups)
 /* Load up stuff from data hub and append to list. The hubUrl points to
  * a trackDb.ra format file. Only the first example of a genome gets to 
  * populate groups, the others get a group for the trackHub.  A particular 
  * trackDb is only read once even if referenced from more than one hub.  */
 {
 struct trackDb *tdbList = NULL;
+/* Load trackDb.ra file and make it into proper trackDb tree */
 struct trackHub *trackHub = hub->trackHub;
 
 if (trackHub != NULL)
     {
     struct trackHubGenome *hubGenome = trackHubFindGenome(trackHub, database);
     if ((hubGenome == NULL) || hashLookup(trackDbNameHash,  hubGenome->trackDbFile))
         hubGenome = NULL; // we already saw this trackDb, so ignore this stanza
     else
         hashStore(trackDbNameHash,  hubGenome->trackDbFile);
 
     if (hubGenome != NULL)
 	{
         // add groups
 	if ((hubGenome->groups != NULL) && hubsCanAddGroups())
             {
             struct grp *list = readGroupRa(hubGenome->groups);
             grpListAddHubName(list, hub->trackHub);
 
             if (hubGroups)
                 *hubGroups = slCat(*hubGroups, list);
             }
 
-        // now grab tracks
-        boolean doCache = trackDbCacheOn();
-
-        if (doCache)
-            {
-            // we have to open the trackDb file to get the udc cache to check for an update
-            struct udcFile *checkCache = udcFileMayOpen(hubGenome->trackDbFile, NULL);
-            if (checkCache != NULL)
-                {
-                time_t time = udcUpdateTime(checkCache);
-                udcFileClose(&checkCache);
-
-                struct trackDb *cacheTdb = trackDbHubCache(hubGenome->trackDbFile, time);
-
-                if (cacheTdb && hubGenome->quickLiftChain)
-                    cacheTdb = fixForQuickLift(cacheTdb, hubGenome, hub);
-
-                if (cacheTdb != NULL)
-                    return cacheTdb;
-                }
-
-            memCheckPoint(); // we want to know how much memory is used to build the tdbList
-            }
-
-        struct dyString *incFiles = dyStringNew(4096);
-        tdbList = trackHubTracksForGenome(trackHub, hubGenome, incFiles, foundFirstGenome);
-        tdbList = trackDbLinkUpGenerations(tdbList);
-        tdbList = trackDbPolishAfterLinkup(tdbList, database);
-        trackDbPrioritizeContainerItems(tdbList);
-        trackHubPolishTrackNames(trackHub, tdbList);
-
-        if (doCache)
-            trackDbHubCloneTdbListToSharedMem(hubGenome->trackDbFile, tdbList, memCheckPoint(), incFiles->string);
+        tdbList = trackHubAddTracksGenome(hubGenome);
 
         if (tdbList && hubGenome->quickLiftChain)
             tdbList = fixForQuickLift(tdbList, hubGenome, hub);
 	}
     }
 return tdbList;
 }
 
 static struct grp *grpFromHub(struct hubConnectStatus *hub)
 /* Make up a grp structur from hub */
 {
 struct grp *grp;
 AllocVar(grp);
 char name[16];
 safef(name, sizeof(name), "hub_%d", hub->id);