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/trackHub.c src/hg/lib/trackHub.c
index 9c79295079b..a5530f56e15 100644
--- src/hg/lib/trackHub.c
+++ src/hg/lib/trackHub.c
@@ -1768,15 +1768,57 @@
 
 FILE *f = mustOpen(filename, "a");
 chmod(filename, 0666);
 
 walkTree(f, db, cart, tdbList, visDy);
 fclose(f);
 
 return cloneString(filename);
 }
 
 struct grp *trackHubGetGrps()
 /* Get the groups defined by attached track hubs. */
 {
 return trackHubGrps;
 }
+
+struct trackDb *trackHubAddTracksGenome(struct trackHubGenome *hubGenome)
+/* Load up stuff from data hub and return list. */
+{
+/* Load trackDb.ra file and make it into proper trackDb tree */
+struct trackDb *tdbList = NULL;
+
+if (hubGenome != NULL)
+    {
+    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 != NULL)
+                return cacheTdb;
+            }
+
+        memCheckPoint(); // we want to know how much memory is used to build the tdbList
+        }
+
+    struct dyString *incFiles = newDyString(4096);
+    boolean foundFirstGenome = FALSE;
+    tdbList = trackHubTracksForGenome(hubGenome->trackHub, hubGenome, incFiles, &foundFirstGenome);
+    tdbList = trackDbLinkUpGenerations(tdbList);
+    tdbList = trackDbPolishAfterLinkup(tdbList, hubGenome->name);
+    trackDbPrioritizeContainerItems(tdbList);
+    trackHubPolishTrackNames(hubGenome->trackHub, tdbList);
+
+    if (doCache)
+        trackDbHubCloneTdbListToSharedMem(hubGenome->trackDbFile, tdbList, memCheckPoint(), incFiles->string);
+    }
+return tdbList;
+}