aa675de1a849fe445eb1924f7f26707810df1c89 kate Mon May 15 15:48:22 2017 -0700 Better error checking for hubs and custom tracks. refs #18736 diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c index 5dfecf2..b6b31f9 100644 --- src/hg/lib/trackHub.c +++ src/hg/lib/trackHub.c @@ -20,30 +20,31 @@ #include "common.h" #include "linefile.h" #include "hash.h" #include "options.h" #include "udc.h" #include "ra.h" #include "filePath.h" #include "htmlPage.h" #include "trackDb.h" #include "trackHub.h" #include "errCatch.h" #include "hgBam.h" #include "bigWig.h" #include "bigBed.h" +#include "barChartUi.h" #include "hdb.h" #include "chromInfo.h" #include "grp.h" #include "twoBit.h" #include "dbDb.h" #include "net.h" #include "bbiFile.h" #include "bPlusTree.h" #include "hgFind.h" #include "hubConnect.h" #include "trix.h" #include "vcf.h" #include "htmshell.h" #include "bigBedFind.h" #include "customComposite.h" @@ -726,30 +727,37 @@ { expandOneUrl(tdb->settingsHash, genome->trackDbFile, "bigDataUrl"); expandOneUrl(tdb->settingsHash, genome->trackDbFile, "frames"); expandOneUrl(tdb->settingsHash, genome->trackDbFile, "summary"); expandOneUrl(tdb->settingsHash, genome->trackDbFile, "linkDataUrl"); expandOneUrl(tdb->settingsHash, genome->trackDbFile, "searchTrix"); } struct trackHubGenome *trackHubFindGenome(struct trackHub *hub, char *genomeName) /* Return trackHubGenome of given name associated with hub. Return NULL if no * such genome. */ { return hashFindVal(hub->genomeHash, genomeName); } +static void requireBarChartBars(struct trackHub *hub, struct trackHubGenome *genome, struct trackDb *tdb) +/* Fetch setting(s) or give an error message */ +{ +/* LATER: allow URL for file containing labels and colors */ +requiredSetting(hub, genome, tdb, BAR_CHART_CATEGORY_LABELS); +} + static void validateOneTrack( struct trackHub *hub, struct trackHubGenome *genome, struct trackDb *tdb) /* Validate a track's trackDb entry. */ { /* Check for existence of fields required in all tracks */ requiredSetting(hub, genome, tdb, "shortLabel"); char *shortLabel = trackDbSetting(tdb, "shortLabel"); memSwapChar(shortLabel, strlen(shortLabel), '\t', ' '); requiredSetting(hub, genome, tdb, "longLabel"); char *longLabel = trackDbSetting(tdb, "longLabel"); memSwapChar(longLabel, strlen(longLabel), '\t', ' '); /* Forbid any dangerous settings that should not be allowed */ forbidSetting(hub, genome, tdb, "idInUrlSql"); @@ -781,32 +789,34 @@ startsWithWord("pslSnake", type) || startsWithWord("halSnake", type) || #endif startsWithWord("vcfTabix", type) || startsWithWord("bigPsl", type) || startsWithWord("bigMaf", type) || startsWithWord("longTabix", type) || startsWithWord("bigGenePred", type) || startsWithWord("bigChain", type) || startsWithWord("bigBarChart", type) || startsWithWord("bam", type))) { errAbort("Unsupported type '%s' in hub %s genome %s track %s", type, hub->url, genome->name, tdb->track); } - requiredSetting(hub, genome, tdb, "bigDataUrl"); + + if (sameString("barChart", type) || sameString("bigBarChart", type)) + requireBarChartBars(hub, genome, tdb); } } } static void markContainers( struct trackHub *hub, struct trackHubGenome *genome, struct trackDb *tdbList) /* Mark containers that are parents, or have them. */ { struct hash *hash = hashNew(0); struct trackDb *tdb; // add all the track names to a hash for (tdb = tdbList; tdb != NULL; tdb = tdb->next) { if (hashLookup(hash, tdb->track))