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;
         }