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("Data last updated at UCSC: %s
\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];