ae32a4a8f4fc23c2696f618a97f28a2360c3f038 braney Tue Mar 11 15:53:30 2025 -0700 ongoing work on quickLift. Deal correctly with views diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c index 8ce9a1cdc0b..9c79295079b 100644 --- src/hg/lib/trackHub.c +++ src/hg/lib/trackHub.c @@ -1516,31 +1516,36 @@ if (fd >= 0) close(fd); return hubName; } static void dumpTdbAndChildren(struct dyString *dy, struct trackDb *tdb) /* Put a trackDb entry into a dyString, stepping up the tree for some variables. */ { struct hashCookie cookie = hashFirst(tdb->settingsHash); struct hashEl *hel; while ((hel = hashNext(&cookie)) != NULL) { if (differentString(hel->name, "track")) - dyStringPrintf(dy, "%s %s\n", hel->name, (char *)hel->val); + { + if (sameString(hel->name, "parent") || sameString(hel->name, "html")) + dyStringPrintf(dy, "%s %s\n", hel->name, trackHubSkipHubName((char *)hel->val)); + else + dyStringPrintf(dy, "%s %s\n", hel->name, ((char *)hel->val)); + } } if (tdb->subtracks) { for (tdb = tdb->subtracks; tdb; tdb = tdb->next) { dyStringPrintf(dy, "\ntrack %s\nquickLifted on\navoidHandler on\n", trackHubSkipHubName(tdb->track)); dumpTdbAndChildren(dy, tdb); } } } static bool subtrackEnabledInTdb(struct trackDb *subTdb) /* Return TRUE unless the subtrack was declared with "subTrack ... off". */ { @@ -1633,39 +1638,44 @@ } } return TRUE; } static struct trackDb * validateTdbChildren(char *db, struct trackDb *tdb) /* return a list of the children that can be quick lifted */ { struct trackDb *validTdbs = NULL; struct trackDb *nextTdb; unsigned count = 0; if (tdb->subtracks) // this is a view, descend again { - tdb->subtracks = validateTdbChildren(db, tdb->subtracks); + struct trackDb *view = tdb; + for (; view; view = nextTdb) + { + nextTdb = view->next; + view->subtracks = validateTdbChildren(db,view->subtracks); - if (tdb->subtracks != NULL) + if (view->subtracks != NULL) { - slAddHead(&validTdbs, tdb); - if (tdb->visibility) + slAddHead(&validTdbs, view); + if (view->visibility) count++; } } + } else { for(; tdb; tdb = nextTdb) { nextTdb = tdb->next; if (validateOneTdb(db, tdb)) { slAddHead(&validTdbs, tdb); if (tdb->visibility) count++; } } } if (count) return validTdbs; @@ -1705,31 +1715,31 @@ } isVisible = tdb->visibility != tvHide; } else if (isParentVisible(cart, tdb) && isSubtrackVisible(cart, tdb)) // child of supertrack { char *cartVis = cartOptionalString(cart, tdb->parent->track); if (cartVis != NULL) tdb->visibility = hTvFromString(cartVis); else if (tdbIsSuperTrack(tdb->parent)) tdb->visibility = tdb->parent->isShow; isVisible = TRUE; } if (isVisible && validateTdb(db, tdb)) { - dyStringPrintf(visDy, "&%s=%s", tdb->track,hStringFromTv(tdb->visibility)); + dyStringPrintf(visDy, "&%s=%s", trackHubSkipHubName(tdb->track),hStringFromTv(tdb->visibility)); //if (hashLookup(tdb->settingsHash, "customized") == NULL) { hashRemove(tdb->settingsHash, "maxHeightPixels"); hashRemove(tdb->settingsHash, "superTrack"); hashRemove(tdb->settingsHash, "subGroups"); hashRemove(tdb->settingsHash, "polished"); hashRemove(tdb->settingsHash, "noInherit"); hashRemove(tdb->settingsHash, "group"); hashRemove(tdb->settingsHash, "parent"); } //hashReplace(tdb->settingsHash, "customized", "on"); // is this a custom track? char *tdbType = trackDbSetting(tdb, "tdbType");