e341c576504ab46af7ad7d7a28cd4f81369e0fea
braney
  Mon Sep 1 11:18:57 2025 -0700
working to get quickLifts from genark hubs to work

diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c
index d4767d51191..6eaeadf898e 100644
--- src/hg/lib/trackHub.c
+++ src/hg/lib/trackHub.c
@@ -146,30 +146,33 @@
 
 return (struct trackHubGenome *)hel->val;
 }
 
 struct trackHubGenome *trackHubGetGenome(char *database)
 /* get genome structure for an assembly in a trackHub */
 {
 if (hubAssemblyHash == NULL)
     errAbort("An error occurred while adding the custom track. This may be due to a mismatch"
 		    " between the db= parameter and the genome selected at the top of the page."
 		    " If you are having trouble resolving this error please contact us at"
 		    " genome-www@soe.ucsc.edu.");
 
 struct hashEl *hel = hashLookup(hubAssemblyHash, database);
 
+if (hel == NULL)
+    hel = hashLookup(hubAssemblyUndecoratedHash, database);
+
 if (hel == NULL)
     return NULL;
 
 return (struct trackHubGenome *)hel->val;
 }
 
 boolean trackHubDatabase(char *database)
 /* Is this an assembly from an Assembly Data hub? */
 {
 if (hubAssemblyHash == NULL)
     return FALSE;
 
 return trackHubGetGenome(database) != NULL;
 }
 
@@ -1628,34 +1631,34 @@
     dyStringPrintf(dy, "parent %s\n", tdb->parent->track);
 
 while ((hel = hashNext(&cookie)) != NULL)
     {   
     if (sameString(hel->name, "parent"))
         {
         char buffer[1024];
 
         safef(buffer, sizeof buffer, "%s_sel", tdb->track);
         char *cartSelected = cartOptionalString(cart, tdb->track);
         if (cartSelected != NULL)
             {
             char *str = "off";
             if (sameString(cartSelected, "1"))
                 str = "on";
-            dyStringPrintf(dy, "parent %s %s\n", tdb->parent->track, str);
+            dyStringPrintf(dy, "parent %s %s\n", trackHubSkipHubName(tdb->parent->track), str);
             }
         else
-            dyStringPrintf(dy, "%s %s\n", hel->name, ((char *)hel->val));
+            dyStringPrintf(dy, "%s %s\n", hel->name, trackHubSkipHubName(((char *)hel->val)));
         }
     else if (sameString(hel->name, "html"))
         dyStringPrintf(dy, "%s %s\n", hel->name, trackHubSkipHubName((char *)hel->val));
     else if (differentString(hel->name, "track") && differentString(hel->name, "visibility"))
         dyStringPrintf(dy, "%s %s\n", hel->name, ((char *)hel->val));
     }
 
 if (tdb->subtracks)
     {
     for (tdb = tdb->subtracks; tdb; tdb = tdb->next)
         {
         char *track =  trackHubSkipHubName(tdb->track);
         dyStringPrintf(dy, "\ntrack %s\nquickLifted on\n", track);
         if (!isVetted(track))
             dyStringPrintf(dy, "avoidHandler on\n");
@@ -1681,31 +1684,31 @@
     {
     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) || 
+if (sameString("cytoBandIdeo", trackHubSkipHubName(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)))
     {
     slAddHead(badList, tdb);
     return FALSE;
     }
 
@@ -1883,31 +1886,31 @@
 struct grp *grp;
 for(grp = grpList; grp; grp = grp->next)
     hashAdd(groupHash, grp->name, grp);
 
 for(tdb = tdbList; tdb; tdb = tdb->next)
     {
     grp = hashFindVal(groupHash, tdb->grp);
     tdb->groupPriority = grp->priority;
     }
 slSort(&tdbList, cmpPriority);
 
 char *filename = getHubName(cart, db);
 
 FILE *f = mustOpen(filename, "w");
 chmod(filename, 0666);
-outHubHeader(f, db);
+outHubHeader(f, trackHubSkipHubName(db));
 
 walkTree(f, db, cart, tdbList, visDy, badList);
 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. */