16113a55a853321b5251989c64f6c995f8ed583b
hiram
  Mon Apr 6 14:05:40 2026 -0700
restore the hg.conf switches to control the gcOnFly track - lost in later edits

diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index b948062dd5c..e45f2a611e7 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -7455,38 +7455,63 @@
     addWikiTrack(&trackList);
     struct sqlConnection *conn = wikiConnect();
     if (sqlTableExists(conn, "variome"))
         addVariomeWikiTrack(&trackList);
     wikiDisconnect(&conn);
     }
 
 struct grp *grpList = NULL;
 if (cartOptionalString(cart, "hgt.trackNameFilter") == NULL)
     { // If a single track was asked for and it is from a hub, then it is already in trackList
     loadTrackHubs(&trackList, &grpList);
     }
 /* gcOnFly track: if a trackDb entry exists (native or hub, possibly
  * with a hub_#_ prefix on the table name), patch in on-the-fly
  * computation methods so data comes from genome sequence, not a file.
+ * hg.conf switches:
+ *   gcOnTheFly=on      - master switch, track is removed if off (default on)
+ *   gcOnTheFlyCoExist=on - allow gcOnFly alongside gc5Base/gc5BaseBw
+ *                          (default off: remove gcOnFly if either exists)
  * This must run after loadTrackHubs so assembly hub tracks are present. */
 {
-struct track *t;
-for (t = trackList; t != NULL; t = t->next)
+boolean gcOnTheFlyEnabled = cfgOptionBooleanDefault("gcOnTheFly", TRUE);
+boolean gcCoExist = cfgOptionBooleanDefault("gcOnTheFlyCoExist", FALSE);
+struct track *t, *prev = NULL, *next;
+for (t = trackList; t != NULL; t = next)
     {
+    next = t->next;
     if (sameString(GC_ON_FLY_TRACK_NAME, trackHubSkipHubName(t->table)))
+	{
+	boolean remove = FALSE;
+	if (!gcOnTheFlyEnabled)
+	    remove = TRUE;
+	else if (!gcCoExist &&
+	    (rFindTrackWithTable("gc5Base", trackList) != NULL ||
+	     rFindTrackWithTable("gc5BaseBw", trackList) != NULL))
+	    remove = TRUE;
+	if (remove)
+	    {
+	    if (prev == NULL)
+		trackList = next;
+	    else
+		prev->next = next;
+	    continue;
+	    }
 	gc5BaseOnTheFlyMethods(t, cart);
 	}
+    prev = t;
+    }
 }
 loadCustomTracks(&trackList);
 makeDupeTracks(&trackList);
 groupTracks( &trackList, pGroupList, grpList, vis);
 setSearchedTrackToPackOrFull(trackList);
 char *rtsLoad = cgiOptionalString( "rtsLoad");
 if (rtsLoad)  // load a recommended track set using the merge method
     {
     // store session name and user
     char *otherUserName = cartOptionalString(cart, hgsOtherUserName);
     char *otherUserSessionName = rtsLoad;
 
     // Hide all tracks except custom tracks
     struct hash *excludeHash = newHash(2);
     hashStore(excludeHash, "user");