46d0cb2f5a90285bf6fc2de3ff9a3a3f542521ff chmalee Wed May 10 10:42:02 2023 -0700 Fix for hgSearch not redirecting correctly when hgvs term is erroneous but a position can still be found. Fix hgSearch not handling errAborts and warns correctly when attempting to do a redirect, refs #31251 diff --git src/hg/hgSearch/hgSearch.c src/hg/hgSearch/hgSearch.c index d2c518e..c90a9ca 100644 --- src/hg/hgSearch/hgSearch.c +++ src/hg/hgSearch/hgSearch.c @@ -582,30 +582,31 @@ jsInlineF("var hgsid='%s';\n", cartSessionId(cart)); struct jsonElement *cartJson = newJsonObject(hashNew(0)); jsonObjectAdd(cartJson, "db", newJsonString(database)); jsonObjectAdd(cartJson, "genomes", getGenomes()); struct dyString *cartJsonDy = dyStringNew(0); jsonDyStringPrint(cartJsonDy, cartJson, "cartJson", -1); jsInlineF("%s;\n", dyStringCannibalize(&cartJsonDy)); // Call our init function to fill out the page jsInline("hgSearch.init();\n"); webEndGb(); } void doSearchOnly() /* Send back search results along with whatever we need to make the UI */ { +cartJsonPushErrHandlers(); char *db = NULL; char *genome = NULL; getDbAndGenome(cart, &db, &genome, oldVars); char *userSearch = cartCgiUsualString(cart, "search", NULL); if (userSearch == NULL || isEmpty(userSearch)) { doMainPage(); return; } initGenbankTableNames(db); hashTracksAndGroups(cart, db); struct searchCategory *allCategories = getAllCategories(cart, db, hgFindGroupHash); struct jsonElement *categsJsonElement = jsonElementFromSearchCategory(allCategories, db); struct cartJson *cj = cartJsonNew(cart); @@ -615,40 +616,44 @@ // the results page boolean doRedirect = TRUE; measureTiming = cartUsualBoolean(cart, "measureTiming", FALSE); struct hgPositions *hgp = doQuery(cj->jw, db, allCategories, doRedirect, userSearch, measureTiming); // Since we are coming from another CGI or a URL manip, go directly to hgTracks // if we resolve to a single position if (hgp && hgp->singlePos) { char newPosBuf[128]; safef(newPosBuf, sizeof(newPosBuf), "%s:%d-%d", hgp->singlePos->chrom, hgp->singlePos->chromStart+1, hgp->singlePos->chromEnd); cartSetString(cj->cart, "position", newPosBuf); if (hgp->singlePos->highlight) cartSetString(cj->cart, "addHighlight", hgp->singlePos->highlight); char *trackName = hgp->tableList->name; struct trackDb *track = NULL; + if (!sameString(trackName, "chromInfo")) + { track = tdbForTrack(db, trackName, &hgFindTdbList); if (!track && startsWith("all_", trackName)) track = tdbForTrack(db, trackName+strlen("all_"), &hgFindTdbList); if (!track) errAbort("no track for table \"%s\" found via a findSpec", trackName); + } puts("Content-type:text/html\n"); puts("<HTML>\n<HEAD>\n"); printf("<script>window.location.href=\"../cgi-bin/hgTracks?"); printf("db=%s", db); printf("&position=%s", newPosBuf); + if (!sameString(trackName, "chromInfo")) printf("&%s=pack", trackName); printf("&hgFind.matches=%s", hgp->singlePos->name); if (track && track->parent) { if (tdbIsSuperTrackChild(track)) printf("&%s=show", track->parent->track); else { // tdb is a subtrack of a composite or a view printf("&%s_sel=1&%s_sel=1", trackName, track->parent->track); } } printf("\"</script>\n"); puts("</HEAD>\n</HTML>"); } @@ -660,30 +665,31 @@ dyStringPrintf(cj->jw->dy, ", \"trackGroups\": "); jsonDyStringPrint(cj->jw->dy, makeTrackGroupsJson(db), NULL, -1); dyStringPrintf(cj->jw->dy, ", \"genomes\": "); jsonDyStringPrint(cj->jw->dy, getGenomes(), NULL, -1); // Now we need to actually spit out the page + json webStartGbNoBanner(cart, db, "Search Disambiguation"); printMainPageIncludes(); jsInlineF("var hgsid='%s';\n", cartSessionId(cart)); jsInline("var cartJson = {"); jsInline(cj->jw->dy->string); jsInline("};\n"); jsInline("hgSearch.init();\n"); webEndGb(); } +cartJsonPopErrHandlers(); } /* End do commands */ void doMiddle(struct cart *theCart) /* Set up globals and make web page */ { cart = theCart; if (cgiOptionalString(CARTJSON_COMMAND)) doCartJson(); else if (cgiOptionalString("search")) // we got here from: // 1. changing the URL arguments // 2. a back button reload // regardless, we can just put up the whole page with search results already