ba33f2c600399d5b4b97dd5fd987ed2db3c891ba chmalee Tue May 19 13:40:42 2026 -0700 myVariants related fixes from code review. Standardize how the code determines we are about to do something myVariants related by #defining some strings and using sameOk to check for them, remove a dead code block, and have hgc use autoSql to load the myVariants item rather than check the raw sql result, refs #37528 diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c index 806c8725daf..af5332eacaa 100644 --- src/hg/hgTrackUi/hgTrackUi.c +++ src/hg/hgTrackUi/hgTrackUi.c @@ -3557,32 +3557,32 @@ genericWiggleUi(tdb,7); else if (startsWithWord("array",tdb->type)) // not quite the same as "expRatio" (custom tracks) expRatioCtUi(tdb); else if (startsWithWord("factorSource",tdb->type)) factorSourceUi(db,tdb); else if (startsWithWord("bigBed",tdb->type)) labelCfgUi(db, cart, tdb, tdb->track); } if (tdbSupportsColorOverride(tdb)) colorTrackOption(cart, tdb->track, tdb); /* myVariants own track: render inline share management. Skip shared tracks * (myVariants_shared_*) - you can't re-share someone else's data. */ if (cfgOptionBooleanDefault("doMyVariants", FALSE) - && startsWith("myVariants_", tdb->track) - && !startsWith("myVariants_shared_", tdb->track)) + && isMyVariantsTrack(tdb->track) + && !isMyVariantsSharedTrack(tdb->track)) myVariantsShareUi(tdb); if (!ajax) // ajax asks for a simple cfg dialog for right-click popup or hgTrackUi subtrack cfg { // Composites *might* have had their top level controls just printed, // but almost certainly have additional controls boolean isLogo = (trackDbSetting(tdb, "logo") != NULL); // It'd be nice to handle faceted composites as a separate container type, but practically so much // of the display features we want are identical to composites - it's easier to special case the UI. if (tdbIsComposite(tdb) && !isLogo) // for the moment generalizing this to include other containers... if (!sameOk(trackDbLocalSetting(tdb, "compositeTrack"), "faceted")) // but not faceted containers ... hCompositeUi(db, cart, tdb, NULL, NULL, MAIN_FORM); // Additional special case navigation links may be added extraUiLinks(db, tdb, cart); @@ -4014,44 +4014,44 @@ if (quickLiftSourceDb != NULL) { printf("\n <a href='%s?%s=%s&c=%s&g=%s&hgTrackUi_op=quickLiftRemove&qlSourceDb=%s' >Remove from QuickLift</a>\n", hgTrackUiName(), cartSessionVarName(), cartSessionId(cart), chromosome, cgiEncode(tdb->track), cgiEncode(quickLiftSourceDb)); } } if (ct) { puts(" "); cgiMakeButton(CT_DO_REMOVE_VAR, "Remove custom track"); cgiMakeHiddenVar(CT_SELECTED_TABLE_VAR, tdb->track); puts(" "); if (differentString(tdb->type, "chromGraph") && - differentString(tdb->type, "myVariants")) + !isMyVariantsType(tdb->type)) { char buf[256]; if (ajax) // reference to a separate form doesn't work in modal dialog, // so change window.location directly. safef(buf, sizeof(buf), "window.location='%s?hgsid=%s&%s=%s';return false;", hgCustomName(), cartSessionId(cart), CT_SELECTED_TABLE_VAR, tdb->track); else safef(buf, sizeof(buf), "document.customTrackForm.submit();return false;"); cgiMakeOnClickButton("htui_updtCustTrk", buf, "Update custom track"); } - if (sameString(tdb->type, "myVariants") && - !startsWith("myVariants_shared_", tdb->track)) + if (isMyVariantsType(tdb->type) && + !isMyVariantsSharedTrack(tdb->track)) { /* Labels are per (track, db) so the same myVariants table can * carry a different name on each assembly. */ char shortVar[256], longVar[256]; safef(shortVar, sizeof shortVar, "%s.%s.shortLabel", tdb->track, database); safef(longVar, sizeof longVar, "%s.%s.longLabel", tdb->track, database); char *curShort = cartUsualString(cart, shortVar, ""); char *curLong = cartUsualString(cart, longVar, ""); puts("<div style='margin-top:0.5em'><b>Rename track:</b> "); puts("Short Label "); cgiMakeTextVar(shortVar, curShort, 18); puts(" Long Label "); cgiMakeTextVar(longVar, curLong, 50); @@ -4509,50 +4509,50 @@ if (dupTdb != NULL) slAddHead(&tdbList, dupTdb); } } if (sameWord(track, WIKI_TRACK_TABLE)) tdb = trackDbForWikiTrack(); else if (sameWord(track, RULER_TRACK_NAME)) /* special handling -- it's not a full-fledged track */ tdb = trackDbForRuler(); else if (sameWord(track, OLIGO_MATCH_TRACK_NAME)) tdb = trackDbForOligoMatch(); else if (sameWord(track, CUTTERS_TRACK_NAME)) tdb = trackDbForPseudoTrack(CUTTERS_TRACK_NAME, CUTTERS_TRACK_LABEL, CUTTERS_TRACK_LONGLABEL, tvHide, TRUE); else if (isCustomTrack(track) - || (cfgOptionBooleanDefault("doMyVariants", FALSE) && startsWith("myVariants_", track))) + || (cfgOptionBooleanDefault("doMyVariants", FALSE) && isMyVariantsTrack(track))) { /* myVariants tracks (own and shared) are built dynamically and live in * the CT list rather than the SQL trackDb table, but their names don't * carry the ct_ prefix, so we need to look them up alongside regular * custom tracks. */ ctList = customTracksParseCart(database, cart, NULL, NULL); for (ct = ctList; ct != NULL; ct = ct->next) { if (sameString(track, ct->tdb->track)) { tdb = ct->tdb; break; } } /* Fallback for direct hgTrackUi navigation without hgTracks: regenerate * the myVariants CT file and re-parse. Normally the CT file was written * during the preceding hgTracks visit, so this branch only fires for * bookmarked URLs or direct links. */ - if (tdb == NULL && startsWith("myVariants_", track)) + if (tdb == NULL && isMyVariantsTrack(track)) { char *userName = getUserName(); char *ctFile = myVariantsWriteCtFile(userName, database, cart); if (isNotEmpty(ctFile)) { char mvVarName[256]; safef(mvVarName, sizeof mvVarName, MYVARIANTS_FILE_VAR_PREFIX "%s", database); cartSetString(cart, mvVarName, ctFile); freeMem(ctFile); ctList = customTracksParseCart(database, cart, NULL, NULL); for (ct = ctList; ct != NULL; ct = ct->next) { if (sameString(track, ct->tdb->track)) { tdb = ct->tdb;