c3bb4207fb2a58064b937ba9fef1cc11852f7576
hiram
  Wed Mar 25 10:48:49 2026 -0700
allow trackDb entry to override the in-code defaults of the gcOnFly track refs #35958

diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index bf26fd7d894..5b07c063d0f 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -7433,43 +7433,53 @@
  * Best to load custom last. */
 
 // load the track list and check to see if we need to rewrite the cart
 int cartVersionFromTrackDb = loadFromTrackDb(&trackList);
 int cartVersionFromCart = cartGetVersion(cart);
 if (cartVersionFromTrackDb > cartVersionFromCart)
     cartRewrite(cart, cartVersionFromTrackDb, cartVersionFromCart);
 
 if (measureTiming)
     measureTime("Time after trackDbLoad ");
 if (pcrResultParseCart(database, cart, NULL, NULL, NULL))
     slSafeAddHead(&trackList, pcrResultTg());
 if (userSeqString != NULL)
     slSafeAddHead(&trackList, userPslTg());
 slSafeAddHead(&trackList, oligoMatchTg());
-if (cfgOptionBooleanDefault("gcOnTheFly", FALSE))
+/* gcOnFly track: prefer trackDb entry if present, otherwise
+ * build synthetically when gcOnTheFly config is enabled. */
+{
+struct track *gcTg = rFindTrackWithTable(GC_ON_FLY_TRACK_NAME, trackList);
+if (gcTg != NULL)
+    {
+    /* trackDb entry exists - patch in on-the-fly methods */
+    gc5BaseOnTheFlyMethods(gcTg, cart);
+    }
+else if (cfgOptionBooleanDefault("gcOnTheFly", FALSE))
     {
     if (cfgOptionBooleanDefault("gcOnTheFlyCoExist", FALSE))
 	{
 	slSafeAddHead(&trackList, gc5BaseOnTheFlyTg(cart));
 	}
     else
 	{
 	if (rFindTrackWithTable("gc5Base", trackList) == NULL &&
 	    rFindTrackWithTable("gc5BaseBw", trackList) == NULL)
 	    slSafeAddHead(&trackList, gc5BaseOnTheFlyTg(cart));
 	}
     }
+}
 
 if (restrictionEnzymesOk())
     {
     slSafeAddHead(&trackList, cuttersTg());
     }
 if (wikiTrackEnabled(database, NULL))
     {
     addWikiTrack(&trackList);
     struct sqlConnection *conn = wikiConnect();
     if (sqlTableExists(conn, "variome"))
         addVariomeWikiTrack(&trackList);
     wikiDisconnect(&conn);
     }
 
 struct grp *grpList = NULL;