282a4958b8e808f57ecea4c6e8dfb56054f4579c angie Tue May 10 10:08:26 2016 -0700 initialDb logic assumed that the cart already had db, but when hgCustom is accessed from the main page with no cookies, there is no db in the cart; use empty string. Also make addCustomForm ignore empty err string so we don't need a special case for passing in err string vs NULL. refs #17295 fixes #16174 diff --git src/hg/hgCustom/hgCustom.c src/hg/hgCustom/hgCustom.c index 40c9953..29071ba 100644 --- src/hg/hgCustom/hgCustom.c +++ src/hg/hgCustom/hgCustom.c @@ -195,31 +195,31 @@ printf("[%s]", trackHubSkipHubName(database)); } puts("</TD></TR></TABLE>\n"); } /* intro text */ puts("<P>"); if (isUpdateForm) puts("Update your custom track configuration, data, and/or documentation."); else puts("Display your own data as custom annotation tracks in the browser."); addIntro(); puts("<P>"); /* row for error message */ -if (err) +if (isNotEmpty(err)) printf("<P><B> <span style='color:RED; font-style:italic;'>" "Error</span> %s</B><P>", err); cgiSimpleTableStart(); /* first rows for update form are for track and browser line entry */ if (isUpdateForm) { /* row for instructions */ cgiSimpleTableRowStart(); cgiSimpleTableFieldStart(); if (dataUrl) puts("Configuration:"); else { @@ -1102,31 +1102,31 @@ /* create web page */ { char *ctFileName = NULL; struct slName *browserLines = NULL; struct customTrack *replacedCts = NULL; char *err = NULL, *warn = NULL; char *selectedTable = NULL; struct customTrack *ct = NULL; boolean ctUpdated = FALSE; char *initialDb = NULL; long thisTime = clock1000(); cart = theCart; measureTiming = isNotEmpty(cartOptionalString(cart, "measureTiming")); -initialDb = cloneString(cartString(cart, "db")); +initialDb = cloneString(cartUsualString(cart, "db", "")); getDbAndGenome(cart, &database, &organism, oldVars); customFactoryEnableExtraChecking(TRUE); knetUdcInstall(); if (udcCacheTimeout() < 300) udcSetCacheTimeout(300); if (sameString(initialDb, "0")) { /* when an organism is selected from the custom track management page, * set the database to be the default only if it has custom tracks. * Otherwise, pick an assembly for that organism that does have custom tracks. */ struct dbDb *dbDb, *dbDbs = getCustomTrackDatabases(); char *dbWithCts = NULL; @@ -1321,36 +1321,34 @@ if (catch->gotError) { addWarning(dsWarn, err); addWarning(dsWarn, catch->message->string); ctParseError = TRUE; } errCatchFree(&catch); } warn = dyStringCannibalize(&dsWarn); if (measureTiming) { long lastTime = clock1000(); loadTime = lastTime - thisTime; } - if (!initialDb || ctList || cartVarExists(cart, hgCtDoDelete)) + if (ctList || cartVarExists(cart, hgCtDoDelete)) doManageCustom(warn); - else if (ctParseError) - doAddCustom(warn); else - doAddCustom(NULL); + doAddCustom(warn); } cartRemovePrefix(cart, hgCt); cartRemove(cart, CT_CUSTOM_TEXT_VAR); } int main(int argc, char *argv[]) /* Process command line. */ { long enteredMainTime = clock1000(); htmlPushEarlyHandlers(); oldVars = hashNew(10); cgiSpoof(&argc, argv); setUdcCacheDir(); cartEmptyShell(doMiddle, hUserCookie(), excludeVars, oldVars);