5aed2d465f12c3b82dbb6ae78b3bf5529fd0a2ba
braney
  Mon Apr 20 17:13:12 2026 -0700
hgc/hgTrackUi: populate quickLift source track description when the source assembly is a hub or GenArk. getTrackHtml() had an empty TODO branch for trackHubDatabase(db) || isGenArk(db); wire it up to open the source hub (via the connected hub or genarkUrl), load its trackDb list, find the track by bare name, and call trackHubAddDescription to fill tdb->html. refs #37389

diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index b88a66bed70..cac6a74ed83 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -10201,38 +10201,76 @@
     }
 else
     {
     tableName = hTableForTrack(database, tdb->table);
     conn = hAllocConnTrack(database, tdb);
     }
 if (tableName)
     {
     char *date = firstWordInLine(sqlTableUpdate(conn, tableName));
     if (date != NULL)
 	printf("<B>Data last updated at UCSC:&nbsp;</B>%s<BR>\n", date);
     }
 hFreeConn(&conn);
 }
 
+static struct trackDb *findTdbByBareName(struct trackDb *tdbList, char *bareName)
+/* Recursively search tdbList (and subtracks) for a tdb whose bare track name matches. */
+{
+struct trackDb *tdb;
+for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
+    {
+    if (sameString(trackHubSkipHubName(tdb->track), bareName))
+        return tdb;
+    struct trackDb *found = findTdbByBareName(tdb->subtracks, bareName);
+    if (found != NULL)
+        return found;
+    }
+return NULL;
+}
+
 char *getTrackHtml(char *db, char *trackName)
 /* Grab HTML from trackDb in native database for quickLift tracks. */
 {
 char *html = NULL;
 
 if (trackHubDatabase(db) || isGenArk(db))
     {
-    // somehow get to the HTML that's not in the quickLift hub, but in the original hub
+    struct trackHub *hub = NULL;
+    struct trackHubGenome *hubGenome = trackHubGetGenome(db);
+    if (hubGenome != NULL)
+        hub = hubGenome->trackHub;
+    else if (isGenArk(db))
+        {
+        char *hubUrl = genarkUrl(db);
+        if (hubUrl != NULL)
+            {
+            hub = trackHubOpen(hubUrl, "");
+            if (hub != NULL)
+                hubGenome = trackHubFindGenome(hub, db);
+            }
+        }
+    if (hubGenome != NULL)
+        {
+        struct trackDb *tdbList = trackHubAddTracksGenome(hubGenome);
+        struct trackDb *tdb = findTdbByBareName(tdbList, trackHubSkipHubName(trackName));
+        if (tdb != NULL)
+            {
+            trackHubAddDescription(hubGenome->trackDbFile, tdb);
+            html = tdb->html;
+            }
+        }
     }
 else
     {
     char query[4096];
 
     sqlSafef(query, sizeof query,  "tableName = '%s'", trackHubSkipHubName(trackName));
     struct trackDb *loadTrackDb(char *db, char *where);
     struct trackDb *tdb = loadTrackDb(db, query);
 
     html = tdb->html;
     //char *html = tdb->html;
     if (isEmpty(tdb->html))
         {
         char *parent = trackDbSetting(tdb, "parent");
         char *words[10];