c73b604073cf90818fdfafd1c711b9b508835e52 angie Thu Jun 19 12:42:01 2014 -0700 hdb's hGetParent wasn't working because it used hMaybeTrackInfo whichlooks up only one track, not its parent or children. It was used in only one place in the code, so I replaced it with a call to tdbForTrack. fixes #13477 (Search results don't open super tracks) diff --git src/hg/lib/hgFind.c src/hg/lib/hgFind.c index b684b2b..a0ccd69 100644 --- src/hg/lib/hgFind.c +++ src/hg/lib/hgFind.c @@ -2419,81 +2419,87 @@ return(found); } static void hgPositionsHtml(char *db, struct hgPositions *hgp, FILE *f, boolean useWeb, char *hgAppName, struct cart *cart) /* Write out hgp table as HTML to file. */ { struct hgPosTable *table; struct hgPos *pos; char *desc; char range[HGPOSRANGESIZE]; char *ui = getUiUrl(cart); char *extraCgi = hgp->extraCgi; char hgAppCombiner = (strchr(hgAppName, '?')) ? '&' : '?'; boolean containerDivPrinted = FALSE; +struct trackDb *tdbList = NULL; if (useWeb) { webStart(cart, db, "Select Position"); db = cartString(cart, "db"); } for (table = hgp->tableList; table != NULL; table = table->next) { if (table->posList != NULL) { - char *parent = hGetParent(db, table->name); - char *trackName = table->name; - // TODO: should be able to get this from settings hash for - // both hub tracks and normal tracks - if (!isHubTrack(table->name)) - trackName = hGetTrackForTable(db, table->name); - if (trackName == NULL) - errAbort("no track for table \"%s\" found via a findSpec", table->name); // wish we had searchName + char *tableName = table->name; + if (startsWith("all_", tableName)) + tableName += strlen("all_"); + struct trackDb *tdb = tdbForTrack(db, tableName, &tdbList); + if (!tdb) + errAbort("no track for table \"%s\" found via a findSpec", tableName); + char *trackName = tdb->track; char *vis = hCarefulTrackOpenVis(db, trackName); boolean excludeTable = FALSE; if(!containerDivPrinted) { fprintf(f, "
\n", table->description);
for (pos = table->posList; pos != NULL; pos = pos->next)
{
if (table->htmlOnePos)
table->htmlOnePos(table, pos, f);
else
{
char *matches = excludeTable ? "" : pos->browserName;
char *encMatches = cgiEncode(matches);
hgPosBrowserRange(pos, range);
fprintf(f, "parentName)
{
+ if (tdbIsSuperTrackChild(tdb))
+ fprintf(f, "%s=show&", tdb->parentName);
+ else
+ {
+ // tdb is a subtrack of a composite or a view
fprintf(f, "%s_sel=1&", trackName);
- fprintf(f, "%s_sel=1&", parent);
+ fprintf(f, "%s_sel=1&", tdb->parentName);
+ }
}
fprintf(f, "hgFind.matches=%s,\">", encMatches);
htmTextOut(f, pos->name);
fprintf(f, " at %s", range);
desc = pos->description;
if (desc)
{
fprintf(f, " - ");
htmTextOut(f, desc);
}
fprintf(f, "\n");
freeMem(encMatches);
}
}
if (table->htmlEnd)