c99b62d7865a828f8f41c6e82dd36cbd2dd26780 markd Wed Jul 1 21:45:43 2020 -0700 hgBlat mostly works diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c index 6f7d1a0..8222eb1 100644 --- src/hg/lib/trackHub.c +++ src/hg/lib/trackHub.c @@ -1153,52 +1153,63 @@ void trackHubFindPos(struct cart *cart, char *db, char *term, struct hgPositions *hgp) /* Look for term in track hubs. Update hgp if found */ { struct trackDb *tdbList = NULL; if (trackHubDatabase(db)) { struct trackHubGenome *genome = trackHubGetGenome(db); tdbList = trackHubTracksForGenome(genome->trackHub, genome); } else tdbList = hubCollectTracks(db, NULL); findBigBedPosInTdbList(cart, db, tdbList, term, hgp, NULL); } -boolean trackHubGetBlatParams(char *database, boolean isTrans, char **pHost, char **pPort) +boolean trackHubGetBlatParams(char *database, boolean isTrans, char **pHost, char **pPort, boolean* pDynamic) { -char *hostPort; +char *setting; if (isTrans) { - hostPort = trackHubAssemblyField(database, "transBlat"); + setting = trackHubAssemblyField(database, "transBlat"); } else { - hostPort = trackHubAssemblyField(database, "blat"); + setting = trackHubAssemblyField(database, "blat"); } -if (hostPort == NULL) +if (setting == NULL) return FALSE; -hostPort = cloneString(hostPort); +char *conf = trimSpaces(cloneString(setting)); +int numWords = chopByWhite(conf, NULL, 4); +if ((numWords < 2) || (numWords > 3)) + errAbort("invalid configuration for hub BLAT server, expect 2 or 3 words: %s", setting); +char *words[3]; +chopByWhite(conf, words, numWords); -*pHost = nextWord(&hostPort); -if (hostPort == NULL) - return FALSE; -*pPort = hostPort; +*pHost = words[0]; +*pPort = words[1]; +if (numWords > 2) + { + if (!sameString(words[2], "dynamic")) + errAbort("invalid configuration for hub BLAT server, third argument should be 'dynamic' or omitted, got: %s", words[2]); + *pDynamic = TRUE; + } +else + *pDynamic = FALSE; return TRUE; } void hubCheckBigDataUrl(struct trackHub *hub, struct trackHubGenome *genome, struct trackDb *tdb) /* Check remote file exists and is of correct type. Wrap this in error catcher */ { char *relativeUrl = trackDbSetting(tdb, "bigDataUrl"); if (relativeUrl != NULL) { char *type = trackDbRequiredSetting(tdb, "type"); char *bigDataUrl = trackHubRelativeUrl(genome->trackDbFile, relativeUrl); char *bigDataIndex = NULL; char *relIdxUrl = trackDbSetting(tdb, "bigDataIndex");