80ab15c036bf35894b59df383c03c51cbeff30be chmalee Thu May 14 10:29:53 2026 -0700 Stop myVariants from clobbering regular custom tracks by giving it its own cart variable (mvCtfile_) instead of overloading ctfile_, refs #37553 diff --git src/hg/hgCustom/hgCustom.c src/hg/hgCustom/hgCustom.c index 17a20d0acd8..2bd4b1564d3 100644 --- src/hg/hgCustom/hgCustom.c +++ src/hg/hgCustom/hgCustom.c @@ -1208,51 +1208,52 @@ struct customTrack *replacedCts = NULL; char *err = NULL, *warnMsg = NULL; char *selectedTable = NULL; struct customTrack *ct = NULL; boolean ctUpdated = FALSE; char *initialDb = NULL; long thisTime = clock1000(); cart = theCart; measureTiming = isNotEmpty(cartOptionalString(cart, "measureTiming")); initialDb = cloneString(cartUsualString(cart, "db", "")); getDbAndGenome(cart, &database, &organism, oldVars); chromAliasSetup(database); -/* Ensure myVariants CT is registered in this cart if user has items for current db */ +/* Ensure myVariants CT is registered in this cart if user has items for current db. + * Uses a dedicated cart variable (mvCtfile_) so regular custom tracks at + * ctfile_ are untouched. */ if (cfgOptionBooleanDefault("doMyVariants", FALSE)) { char *user = wikiLinkUserName(); if (isNotEmpty(user)) { char *dbTable = myVariantsTableExists(user); if (isNotEmpty(dbTable)) { struct sqlConnection *conn = hAllocConn(CUSTOM_TRASH); char query[512]; sqlSafef(query, sizeof query, "select count(*) from %s where db='%s'", dbTable, database); int ctCount = sqlQuickNum(conn, query); if (ctCount > 0) { - /* Prefer writing a concrete CT file to trash to ensure CT is recognized immediately */ char *ctFile = myVariantsWriteCtFile(user, database, cart); if (isNotEmpty(ctFile)) { char varName[256]; - safef(varName, sizeof varName, CT_FILE_VAR_PREFIX "%s", database); + safef(varName, sizeof varName, MYVARIANTS_FILE_VAR_PREFIX "%s", database); cartSetString(cart, varName, ctFile); freeMem(ctFile); } } hFreeConn(&conn); } } } /* Special endpoint: stream a custom track generated from the user's myVariants table */ char *op = cgiOptionalString("op"); if (cfgOptionBooleanDefault("doMyVariants", FALSE) && op && sameString(op, "myVariantsCt")) { char *user = wikiLinkUserName(); if (isEmpty(user))