2fd02c5e1ce1bb989549b2e0069270ca8907efad
braney
  Thu Apr 10 15:03:42 2025 -0700
add bigLolly to quickLift support

diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c
index fed10068a84..8ce0a440f5d 100644
--- src/hg/lib/trackHub.c
+++ src/hg/lib/trackHub.c
@@ -1508,51 +1508,60 @@
     trashDirDateFile(&hubTn, "quickLift", "hub", ".txt");
     hubName = cloneString(hubTn.forCgi);
     cartSetString(cart, buffer, hubName);
     }
 
 FILE *f = mustOpen(hubName, "w");
 outHubHeader(f, db);
 fclose(f);
 
 if (fd >= 0)
     close(fd);
 
 return hubName;
 }
 
+static boolean isVetted(char *track)
+/* Is this a track that's been tested with quickLift?  If not we don't want to do the special name handling on the track. */
+{
+return sameString(track, "decipherSnvs")|| sameString(track, "omimLocation") || sameString(track, "omimAvSnp")|| sameString(track, "ncbiRefSeq")|| sameString(track, "clinvar")|| sameString(track, "clinvarSubLolly");
+}
+
 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"))
         {
         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));
+        char *track =  trackHubSkipHubName(tdb->track);
+        dyStringPrintf(dy, "\ntrack %s\nquickLifted on\n", track);
+        if (!isVetted(track))
+            dyStringPrintf(dy, "avoidHandler on\n");
         dumpTdbAndChildren(dy, tdb);
         }
     }
 }
 
 static bool subtrackEnabledInTdb(struct trackDb *subTdb)
 /* Return TRUE unless the subtrack was declared with "subTrack ... off". */
 {
 bool enabled = TRUE;
 char *words[2];
 char *setting;
 if ((setting = trackDbLocalSetting(subTdb, "parent")) != NULL)
     {
     if (chopLine(cloneString(setting), words) >= 2)
         if (sameString(words[1], "off"))
@@ -1599,47 +1608,48 @@
 
 return vis;
 }
 
 struct dyString *trackDbString(struct trackDb *tdb)
 /* Convert a trackDb entry into a dyString. */
 {
 struct dyString *dy;
 
 // add a note that the name based handler shouldn't be used on this track
 // add a note that this is a quickLifted track so the browser will accept tracks that aren't big*
 dy = dyStringNew(200);
 char *track =  trackHubSkipHubName(tdb->track);
 dyStringPrintf(dy, "track %s\nquickLifted on\n", track);
 
-if (!(sameString(track, "decipherSnvs")|| sameString(track, "omimLocation") || sameString(track, "omimAvSnp")|| sameString(track, "ncbiRefSeq")))
+if (!isVetted(track))
     dyStringPrintf(dy, "avoidHandler on\n");
     
 dumpTdbAndChildren(dy, tdb);
 
 return dy;
 }
 
 static boolean validateOneTdb(char *db, struct trackDb *tdb)
 /* Make sure the tdb is a track type we grok. */
 {
 if (!( 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("bigLolly", tdb->type) || \
        startsWith("bed ", tdb->type)))
     {
     //printf("%s not included: bad type %s\n",tdb->track,tdb->type);
     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);