222992ee5c992c1ba25babcb8736eadb5ad0366c braney Thu Nov 20 18:07:58 2014 -0800 when hubs disappear out from under us, put out a kindler, gentler errormessage that gives people a clue what's happened. #14365 diff --git src/hg/lib/cart.c src/hg/lib/cart.c index 191a225..2f70857 100644 --- src/hg/lib/cart.c +++ src/hg/lib/cart.c @@ -39,30 +39,50 @@ static void hashUpdateDynamicVal(struct hash *hash, char *name, void *val) /* Val is a dynamically allocated (freeMem-able) entity to put * in hash. Override existing hash item with that name if any. * Otherwise make new hash item. */ { struct hashEl *hel = hashLookup(hash, name); if (hel == NULL) hashAdd(hash, name, val); else { freeMem(hel->val); hel->val = val; } } +static struct dyString *hubWarnDy; + +void cartHubWarn(char *format, va_list args) +/* save up hub related warnings to put out later */ +{ +char warning[1024]; +vsnprintf(warning,sizeof(warning),format, args); +if (hubWarnDy == NULL) + hubWarnDy = newDyString(100); +dyStringPrintf(hubWarnDy, "%s\n", warning); +} + +void cartFlushHubWarnings() +/* flush the hub warning (if any) */ +{ +if (hubWarnDy) + warn("%s",hubWarnDy->string); +} + + void cartTrace(struct cart *cart, char *when, struct sqlConnection *conn) /* Write some properties of the cart to stderr for debugging. */ { if (cfgOption("cart.trace") == NULL) return; struct cartDb *u = cart->userInfo, *s = cart->sessionInfo; char *pix = hashFindVal(cart->hash, "pix"); char *textSize = hashFindVal(cart->hash, "textSize"); char *trackControls = hashFindVal(cart->hash, "trackControlsOnMain"); int uLen, sLen; if (conn != NULL) { /* Since the content string is chopped, query for the actual length. */ struct dyString *query = dyStringNew(1024); sqlDyStringPrintf(query, "select length(contents) from userDb" @@ -689,31 +709,33 @@ char *url = cartString(cart, hgsLoadUrlName); struct lineFile *lf = netLineFileOpen(url); cartLoadSettings(lf, cart, oldVars, hgsDoLoadUrl); lineFileClose(&lf); cartTrace(cart, "after cartLS", conn); didSessionLoad = TRUE; } } #endif /* GBROWSE */ /* wire up the assembly hubs so we can operate without sql */ setUdcTimeout(cart); if (cartVarExists(cart, hgHubDoDisconnect)) doDisconnectHub(cart); +pushWarnHandler(cartHubWarn); char *newDatabase = hubConnectLoadHubs(cart); +popWarnHandler(); #ifndef GBROWSE if (didSessionLoad) cartCopyCustomTracks(cart); #endif /* GBROWSE */ if (newDatabase != NULL) { cartSetString(cart,"db", newDatabase); // this is some magic to use the defaultPosition */ cartSetString(cart,"position", "genome"); } if (exclude != NULL) {