6629bda6c730982c3e4602ec78ff3b0cbf701c61
braney
  Tue May 25 17:31:38 2021 -0700
implement cart editing.  Needs doc.  ;-)

diff --git src/hg/lib/cartRewrite.c src/hg/lib/cartRewrite.c
index e5a6faf..6d9429c 100644
--- src/hg/lib/cartRewrite.c
+++ src/hg/lib/cartRewrite.c
@@ -1,15 +1,95 @@
 
-#include "cartRewrite.h"
+#include "common.h"
+#include "cart.h"
 
-struct regexEdit cartEdit0[] = 
+static char *edit0tracks[] =
 {
-{"snp151Common=\\(pack\\|full\\|dense\\|squish\\)","superSnp=show&snp151Common_super=\\1"},
-{"snp151Common=hide","snp151Common_super=hide"},
-{"snp151Common\\.", "snp151Common_super."},
+"snp151Flagged",
+"snp151Mult",
+"snp150Mult",
+"snp150",
+"snp150Common",
+"snp150Flagged",
+"snp149Mult",
+"snp149",
+"snp149Common",
+"snp149Flagged",
+"snp141Mult",
+"snp141Flagged",
+"snp141Common",
+"snp141",
+"snp142Mult",
+"snp142Flagged",
+"snp142Common",
+"snp142",
+"snp144Mult",
+"snp144Flagged",
+"snp144Common",
+"snp144",
+"snp147Mult",
+"snp147Flagged",
+"snp147Common",
+"snp147",
+"snp146Mult",
+"snp146Flagged",
+"snp146Common",
+"snp146",
 };
 
-struct cartRewrite cartRewrites[] =
+static void cartEdit0(struct cart *cart)
+/* Moving a bunch of SNP tracks to an archive super track.   We need
+ * to turn on the super track if any of what are now subTracks are visible.
+ */
 {
-{ cartEdit0, ArraySize(cartEdit0)},
+boolean turnOnSuper = FALSE;
+int length = ArraySize(edit0tracks);
+int ii;
+
+printf("cartEdit0 ");
+
+// go through all the tracks moved into the supertrack
+for(ii = 0; ii < length; ii++)
+    {
+    char *vis = cartOptionalString(cart, edit0tracks[ii]);
+
+    if (vis)
+        {
+        if (sameString(vis, "dense") || sameString(vis, "pack") || sameString(vis, "full") )
+            {
+            // Turn on the super track since one of its subtracks was visible before
+            printf("turning on super ");
+            turnOnSuper = TRUE;
+            break;
+            }
+        }
+    }
+
+if (turnOnSuper)
+    cartSetString(cart, "dbSnpArchive", "show");
+}
+
+// Here's the list of cart rewrite functions
+struct cartRewrite
+{
+void (*func)(struct cart *cart);
+};
+
+static struct cartRewrite cartRewrites[] =
+{
+{ cartEdit0},
 };
 
+void cartRewrite(struct cart *cart, unsigned trackDbCartVersion, unsigned cartVersion)
+/* Rewrite the cart to update it to expectations of trackDb. */
+{
+if (trackDbCartVersion > ArraySize(cartRewrites))
+    errAbort("Do not have cart rewrite rules to bring it up to version %d\n", trackDbCartVersion);
+
+// call the rewrite functions to bring us up to the trackDb cart version
+int ii;
+for(ii = cartVersion; ii < trackDbCartVersion; ii++)
+    (cartRewrites[ii].func)(cart);
+
+cartSetVersion(cart, trackDbCartVersion);
+}
+