8bddd781eb83e9f0497d7cba7a0377bdc012d48e
angie
  Wed Jul 8 12:47:51 2015 -0700
Separate processing of related cart vars in a nondeterministic order
was wreaking havoc with clade/org/db menus for non-default dbs.
For now, wrap those cart vars together so that they are processed
correctly.

It would be better still to make registerCartVarHandler reject lists
of variables; one variable, one handler function.  If that proves
inconvenient, then we could bind lists of variables to a single
handler function.

refs #15681

diff --git src/hg/lib/cartJson.c src/hg/lib/cartJson.c
index 7284f95..b1f44fb 100644
--- src/hg/lib/cartJson.c
+++ src/hg/lib/cartJson.c
@@ -650,37 +650,39 @@
             }
         jsonWriteListEnd(jw);   // children (dbs)
         jsonWriteString(jw, "default", hDefaultDbForGenome(org->name));
         jsonWriteObjectEnd(jw); // org
         }
     jsonWriteListEnd(jw);   // children (orgs)
     jsonWriteString(jw, "default", hDefaultGenomeForClade(clade->name));
     jsonWriteObjectEnd(jw); // clade
     }
 jsonWriteListEnd(jw);
 }
 
 static void getCladeOrgDbPos(struct cartJson *cj, struct hash *paramHash)
 /* Get cart's current clade, org, db, position and geneSuggest track. */
 {
+jsonWriteObjectStart(cj->jw, "cladeOrgDb");
 printCladeOrgDbTree(cj->jw);
 char *db = cartString(cj->cart, "db");
 jsonWriteString(cj->jw, "db", db);
 char *org = cartUsualString(cj->cart, "org", hGenome(db));
 jsonWriteString(cj->jw, "org", org);
 char *clade = cartUsualString(cj->cart, "clade", hClade(org));
 jsonWriteString(cj->jw, "clade", clade);
+jsonWriteObjectEnd(cj->jw);
 char *position = cartOptionalString(cj->cart, "position");
 if (isEmpty(position))
     position = hDefaultPos(db);
 jsonWriteString(cj->jw, "position", position);
 printGeneSuggestTrack(cj, db);
 }
 
 static void getStaticHtml(struct cartJson *cj, struct hash *paramHash)
 /* Read HTML text from a relative path under browser.documentRoot and
  * write it as an encoded JSON string */
 {
 char *tag = cartJsonOptionalParam(paramHash, "tag");
 if (isEmpty(tag))
     tag = "html";
 char *file = cartJsonRequiredParam(paramHash, "file", cj->jw, "getStaticHtml");