eb728a6583bf2f2151e4ebe2e418cb103011814c
braney
  Mon Jun 21 12:24:36 2021 -0700
tweak to cartRewrite at Jonathans suggestion.  Now it does as many
rewrites as it has rather than not doing any if it can't do them all.

diff --git src/hg/lib/cartRewrite.c src/hg/lib/cartRewrite.c
index 31a76f8..16f0940 100644
--- src/hg/lib/cartRewrite.c
+++ src/hg/lib/cartRewrite.c
@@ -1,176 +1,178 @@
 
 #include "common.h"
 #include "cart.h"
 #include "hgConfig.h"
 
 static char *edit0Mm10tracks[] =
 {
 "snp142",
 "snp142Mult",
 "snp138",
 "snp138Common",
 "snp138Mult",
 "snp137Common",
 "snp137Mult",
 "snp137",
 };
 
 static char *edit0Hg19tracks[] =
 {
 "snp151Flagged",
 "snp151Mult",
 "snp150Mult",
 "snp150Flagged",
 "snp150",
 "snp150Common",
 "snp149Mult",
 "snp149Flagged",
 "snp149",
 "snp149Common",
 "snp147Flagged",
 "snp147Mult",
 "snp147Common",
 "snp147",
 "snp146Mult",
 "snp146Flagged",
 "snp146",
 "snp146Common",
 "snp144Mult",
 "snp144Flagged",
 "snp144Common",
 "snp144",
 "snp142Mult",
 "snp142Flagged",
 "snp142Common",
 "snp142",
 "snp141Flagged",
 "snp141Common",
 "snp141",
 "snp138Flagged",
 "snp138Mult",
 "snp138",
 "snp138Common",
 "snp137Common",
 "snp137Flagged",
 "snp137Mult",
 "snp137",
 "snp135Common",
 "snp135Flagged",
 "snp135Mult",
 "snp135",
 "snp132Common",
 "snp132Flagged",
 "snp132Mult",
 "snp132",
 "snp131",
 "snp130",
 };
 
 static char *edit0Hg38tracks[] =
 {
 "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",
 };
 
 static void turnOnSuper(struct cart *cart, char **trackNames, unsigned numTracks, char *superTrackName)
 {
 boolean turnOnSuper = FALSE;
 int ii;
 
 // go through all the tracks moved into the supertrack
 for(ii = 0; ii < numTracks; ii++)
     {
     char *vis = cartOptionalString(cart, trackNames[ii]);
 
     if (vis)
         {
         if (differentString(vis, "hide"))
             {
             // Turn on the super track since one of its subtracks was visible before
             turnOnSuper = TRUE;
             break;
             }
         }
     }
 
 if (turnOnSuper)
     cartSetString(cart, superTrackName, "show");
 }
 
 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.
  */
 {
 // hg38 tracks
 int length = ArraySize(edit0Hg38tracks);
 turnOnSuper(cart, edit0Hg38tracks, length, "dbSnpArchive");
 
 // mm10 tracks
 length = ArraySize(edit0Mm10tracks);
 turnOnSuper(cart, edit0Mm10tracks, length, "dbSnpArchive");
 
 // hg19 tracks
 length = ArraySize(edit0Hg19tracks);
 turnOnSuper(cart, edit0Hg19tracks, length, "dbSnpArchive");
 }
 
 // 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 (sameString(cfgOptionDefault("cartVersion", "off"), "off"))
     return;
 
-if (trackDbCartVersion > ArraySize(cartRewrites))
+// call the rewrite functions to bring us up to the trackDb cart version
+for(; cartVersion < trackDbCartVersion; cartVersion++)
     {
-    fprintf(stderr,"CartRewriteError: do not have cart rewrite rules to bring it up to version %d requested by trackDb\n", trackDbCartVersion);
-    return;
+    // if we don't have a rewrite for this increment, bail out
+    // with a warning in the error_log
+    if (cartVersion >= ArraySize(cartRewrites))
+        {
+        fprintf(stderr,"CartRewriteError: do not have cart rewrite rules to bring it up to version %d requested by trackDb. Reached level %d\n", trackDbCartVersion, cartVersion);
+        break;
+        }
+    (cartRewrites[cartVersion].func)(cart);
     }
 
-// 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);
+cartSetVersion(cart, cartVersion);
 }