8017e73bc939c6d30beba5e8c63b075f88e5c1a5 tdreszer Mon Oct 31 14:04:17 2011 -0700 Plugged that viewVis override bug diff --git src/hg/lib/cart.c src/hg/lib/cart.c index ac56d94..ab980d0 100644 --- src/hg/lib/cart.c +++ src/hg/lib/cart.c @@ -2362,51 +2362,68 @@ struct slPair *oneName = NULL; char *suffix = NULL; int clensed = 0; // Build list of current settings for container or composite and views char setting[512]; safef(setting,sizeof(setting),"%s.",tdb->track); char * view = NULL; boolean hasViews = FALSE; struct slPair *changedSettings = cartVarsWithPrefixLm(newCart, setting, lm); for (tdbView = tdb->subtracks;tdbView != NULL; tdbView = tdbView->next) { if (!tdbIsView(tdbView,&view)) break; hasViews = TRUE; - safef(setting,sizeof(setting),"%s.",tdbView->track); // unfortunatly setting name could be viewTrackName.??? - //safef(setting, sizeof(setting),"%s.%s.",tdb->track,view); // or containerName.Sig.??? HOWEVER: this are picked up by containerName prefix +#ifdef SUBTRACK_CFG + char *cartVis = cartOptionalString(newCart,tdbView->track); + if (cartVis != NULL) // special to get viewVis in the list + { + lmAllocVar(lm, oneName); + oneName->name = lmCloneString(lm, tdbView->track); + oneName->val = lmCloneString(lm, cartVis); + slAddHead(&changedSettings,oneName); + } +#endif///ndef SUBTRACK_CFG + + // Now the non-vis settings + safef(setting,sizeof(setting),"%s.",tdbView->track); struct slPair *changeViewSettings = cartVarsWithPrefixLm(newCart, setting, lm); changedSettings = slCat(changedSettings, changeViewSettings); +#ifdef SUPPORT_UNDERBAR_DELIMIT + safef(setting,sizeof(setting),"%s_",tdbView->track); + changeViewSettings = cartVarsWithPrefixLm(newCart, setting, lm); + changedSettings = slCat(changedSettings, changeViewSettings); +#endif///ndef SUPPORT_UNDERBAR_DELIMIT } if (changedSettings == NULL && !containerVisChanged) return anythingChanged; // Prune list to only those which have changed if(changedSettings != NULL) { (void)cartNamesPruneChanged(newCart,oldVars,&changedSettings,TRUE,FALSE); if (changedSettings == NULL && !containerVisChanged) return anythingChanged; } // Walk through views if (hasViews) { for (tdbView = tdb->subtracks;tdbView != NULL; tdbView = tdbView->next) { + char *cartVis = NULL; boolean viewVisChanged = FALSE; if (!tdbIsView(tdbView,&view)) break; #ifndef SUBTRACK_CFG safef(setting, sizeof(setting),"%s.%s.",tdb->track,view); // unfortunatly setting name could be containerName.View.??? #endif///ndef SUBTRACK_CFG struct slPair *leftOvers = NULL; // Walk through settings that match this view while ((oneName = slPopHead(&changedSettings)) != NULL) { suffix = NULL; if(startsWith(tdbView->track,oneName->name)) { suffix = oneName->name + strlen(tdbView->track); @@ -2423,45 +2440,47 @@ else if(startsWith(setting,oneName->name)) suffix = oneName->name + strlen(setting); #endif///ndef SUBTRACK_CFG if (suffix == NULL) { slAddHead(&leftOvers,oneName); continue; } #ifdef SUBTRACK_CFG if (*suffix == '\0') #else///ifndef SUBTRACK_CFG if (*suffix == '\0' || sameString(suffix,"vis")) #endif///ndef SUBTRACK_CFG + { viewVisChanged = TRUE; + cartVis = oneName->val; + } else // be certain to exclude vis settings here if (cartRemoveOldFromTdbTree(newCart,oldVars,tdbView,suffix,oneName->val,TRUE) > 0) clensed++; + //slPairFree(&oneName); // lm memory so free not needed } if (viewVisChanged) { // If just created and if vis is the same as tdb default then vis has not changed #ifdef SUBTRACK_CFG - char *cartVis = cartOptionalString(newCart,tdbView->track); char *oldValue = hashFindVal(oldVars,tdbView->track); #else///ifndef SUBTRACK_CFG safef(setting,sizeof(setting),"%s.%s.vis",tdb->track,view); - char *cartVis = cartOptionalString(newCart,setting); char *oldValue = hashFindVal(oldVars,setting); #endif///ndef SUBTRACK_CFG if (cartVis && oldValue == NULL && hTvFromString(cartVis) != tdbView->visibility) viewVisChanged = FALSE; } if (containerVisChanged || viewVisChanged) { // vis is a special additive case! WARN("Removing subtrack vis for %s.%s",tdb->track,view); char *viewVis = hStringFromTv(tdbVisLimitedByAncestry(newCart, tdbView, FALSE)); if (cartRemoveOldFromTdbTree(newCart,oldVars,tdbView,NULL,viewVis,TRUE) > 0) clensed++; } changedSettings = leftOvers; }