36d5542588a99a3e44bf65d16aa3c4600b562b87 braney Tue Jun 8 10:10:30 2021 -0700 changes in response to code review #27643 diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index 40d192b..092f217 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -5875,53 +5875,57 @@ handler = lookupTrackHandlerClosestToHome(tdb); if (handler != NULL) handler(track); } if (cgiVarExists("hgGenomeClick")) makeHgGenomeTrackVisible(track); if (track->loadItems == NULL) warn("No load handler for %s; possible missing trackDb `type' or `subTrack' attribute", tdb->track); else if (track->drawItems == NULL) warn("No draw handler for %s", tdb->track); else slAddHead(pTrackList, track); } } -void loadFromTrackDb(struct track **pTrackList) +int loadFromTrackDb(struct track **pTrackList) /* Load tracks from database, consulting handler list. */ +/* returns cartVersion desired. */ { char *trackNameFilter = cartOptionalString(cart, "hgt.trackNameFilter"); struct trackDb *tdbList; +int trackDbCartVersion = 0; + if(trackNameFilter == NULL) - tdbList = hTrackDb(database); + tdbList = hTrackDbWithCartVersion(database, &trackDbCartVersion); else { tdbList = hTrackDbForTrack(database, trackNameFilter); if (tdbList && tdbList->parent) // we want to give the composite parent a chance to load and set options { while(tdbList->parent) { if (tdbList->parent->subtracks == NULL) // we don't want to go up to a supertrack break; tdbList = tdbList->parent; } trackNameFilter = tdbList->track; } } addTdbListToTrackList(tdbList, trackNameFilter, pTrackList); +return trackDbCartVersion; } static int getScoreFilter(char *trackName) /* check for score filter configuration setting */ { char optionScoreStr[256]; safef(optionScoreStr, sizeof(optionScoreStr), "%s.scoreFilter", trackName); return cartUsualInt(cart, optionScoreStr, 0); } void ctLoadSimpleBed(struct track *tg) /* Load the items in one custom track - just move beds in * window... */ { @@ -6931,35 +6935,36 @@ struct track *matchTrack = rFindTrackWithTable(tableName, trackList); if (matchTrack != NULL) tdbSetCartVisibility(matchTrack->tdb, cart, hCarefulTrackOpenVis(database, matchTrack->track)); } } struct track *getTrackList( struct group **pGroupList, int vis) /* Return list of all tracks, organizing by groups. * If vis is -1, restore default groups to tracks. * Shared by hgTracks and configure page. */ { struct track *track, *trackList = NULL; registerTrackHandlers(); /* Load regular tracks, blatted tracks, and custom tracks. * Best to load custom last. */ -loadFromTrackDb(&trackList); -if (hdbGetTrackCartVersion() > cartGetVersion(cart)) - { - cartRewrite(cart, hdbGetTrackCartVersion(), cartGetVersion(cart)); - } + +// 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 (restrictionEnzymesOk()) { slSafeAddHead(&trackList, cuttersTg()); } if (wikiTrackEnabled(database, NULL)) { addWikiTrack(&trackList);