51dfe6b3d4acfb1caafbee15bfdba3ea1f18fd43
braney
  Mon Jun 30 15:55:01 2025 -0700
ongoing work on liftOver

diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c
index 82b2e1a258f..654abadb5b0 100644
--- src/hg/lib/trackHub.c
+++ src/hg/lib/trackHub.c
@@ -1681,42 +1681,43 @@
     {
     dyStringPrintf(dy, "superTrack on show\n");
     }
 
 if (!isVetted(track))
     dyStringPrintf(dy, "avoidHandler on\n");
     
 dumpTdbAndChildren(cart, dy, tdb);
 
 return dy;
 }
 
 static boolean validateOneTdb(char *db, struct trackDb *tdb, struct trackDb **badList)
 /* Make sure the tdb is a track type we grok. */
 {
-if (sameString("cytoBandIdeo", tdb->track) || !( startsWith("bigBed", tdb->type) || \
+if (sameString("cytoBandIdeo", tdb->track) || 
+    !( startsWith("bigBed", tdb->type) || \
        startsWith("bigWig", tdb->type) || \
        startsWith("bigDbSnp", tdb->type) || \
        startsWith("bigGenePred", tdb->type) || \
        startsWith("gvf", tdb->type) || \
        startsWith("genePred", tdb->type) || \
        startsWith("narrowPeak", tdb->type) || \
        startsWith("bigLolly", tdb->type) || \
        sameString("bed", tdb->type) ||
        startsWith("bed ", tdb->type)))
     {
-    printf("%s %s<BR>\n",tdb->track,tdb->type);
+    slAddHead(badList, tdb);
     return FALSE;
     }
 
 // make sure we have a bigDataUrl
 if (startsWith("bigBed", tdb->type) || \
        startsWith("bigWig", tdb->type))
     {
     char *fileName = cloneString(trackDbSetting(tdb, "bigDataUrl"));
 
     if (fileName == NULL)
         {
         struct sqlConnection *conn = hAllocConnTrack(db, tdb);
         fileName = bbiNameFromSettingOrTable(tdb, conn, tdb->table);
         hashAdd(tdb->settingsHash, "bigDataUrl", fileName);
         hFreeConn(&conn);
@@ -1797,33 +1798,36 @@
 }
 
 static boolean checkCartVisibility(struct cart *cart, struct trackDb *tdb)
 {
 char *cartVis = cartOptionalString(cart, tdb->track);
 if (cartVis != NULL)
     tdb->visibility = hTvFromString(cartVis);
 return (tdb->visibility != tvHide);
 }
 
 static void walkTree(FILE *f, char *db, struct cart *cart,  struct trackDb *tdb, struct dyString *visDy, struct trackDb **badList)
 /* walk tree looking for visible tracks to output to hub. */
 {
 unsigned priority = 1;
 struct hash *haveSuper = newHash(0);
+struct trackDb *tdbNext = NULL;
 
-for(; tdb; tdb = tdb->next)
+for(; tdb; tdb = tdbNext)
     {
+    tdbNext = tdb->next;
+
     boolean isVisible =  FALSE;
 
     if (tdb->parent == NULL)
         isVisible = checkCartVisibility(cart, tdb);
     else if (isParentVisible(cart, tdb) &&  isSubtrackVisible(cart, tdb)) // child of supertrack
         {
         if (hashLookup(haveSuper, tdb->parent->track) == NULL)  // output yet?
             {
             //if (checkCartVisibility(cart, tdb->parent))
                 {
                 tdb->parent->visibility = hTvFromString("tvShow");
                 outTrack(f, cart, tdb->parent, priority++);
 
                 hashStore(haveSuper, tdb->parent->track);
                 }