e6f14fcef3884ca03768d4c646b442f3b606a959 braney Thu Jul 11 12:39:00 2013 -0700 some cleanup of assembly hubs: require organism and defaultPos, tolerate missing scientificName, groups, htmlPath and orderKey. Fix weird bug with wikiTrack missing a settingsHash. diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c index 77998b7..06eebcb 100644 --- src/hg/lib/trackHub.c +++ src/hg/lib/trackHub.c @@ -121,31 +121,33 @@ return cloneString(ret); } static struct dbDb *makeDbDbFromAssemblyGenome(struct trackHubGenome *hubGenome) /* Make a dbdb struture from a single assembly hub database. */ { struct dbDb *db; AllocVar(db); db->genome = cloneString(hubGenome->organism); db->organism = cloneString(hubGenome->organism); db->name = cloneString(hubGenome->name); db->active = TRUE; db->description = cloneString(hubGenome->description); -db->orderKey = sqlUnsigned(hashFindVal(hubGenome->settingsHash, "orderKey")); +char *orderKey = hashFindVal(hubGenome->settingsHash, "orderKey"); +if (orderKey != NULL) + db->orderKey = sqlUnsigned(orderKey); return db; } struct dbDb *trackHubDbDbFromAssemblyDb(char *database) /* Return a dbDb structure for just this database. */ { struct trackHubGenome *genome = trackHubGetGenome(database); if (genome == NULL) return NULL; return makeDbDbFromAssemblyGenome(genome); } @@ -436,35 +438,45 @@ genome, lf->lineIx, lf->fileName); char *trackDb = hashFindVal(ra, "trackDb"); if (trackDb == NULL) badGenomeStanza(lf); AllocVar(el); el->name = cloneString(genome); el->trackDbFile = trackHubRelativeUrl(url, trackDb); el->trackHub = hub; hashAdd(hash, el->name, el); slAddHead(&list, el); char *groups = hashFindVal(ra, "groups"); if (twoBitPath != NULL) { //printf("reading genome %s twoBitPath %s\n", genome, el->twoBitPath); el->description = hashFindVal(ra, "description"); - el->organism = addHubName(hashFindVal(ra, "organism"), hub->name); + char *organism = hashFindVal(ra, "organism"); + if (organism == NULL) + errAbort("must have 'organism' set in assembly hub in stanza ending line %d of %s", + lf->lineIx, lf->fileName); + el->organism = addHubName(organism, hub->name); hashReplace(ra, "organism", el->organism); el->defaultPos = hashFindVal(ra, "defaultPos"); + if (el->defaultPos == NULL) + errAbort("must have 'defaultPos' set in assembly hub in stanza ending line %d of %s", + lf->lineIx, lf->fileName); el->twoBitPath = trackHubRelativeUrl(url, twoBitPath); - hashReplace(ra, "htmlPath",trackHubRelativeUrl(url, hashFindVal(ra, "htmlPath"))); + + char *htmlPath = hashFindVal(ra, "htmlPath"); + if (htmlPath != NULL) + hashReplace(ra, "htmlPath",trackHubRelativeUrl(url, htmlPath)); if (groups != NULL) el->groups = trackHubRelativeUrl(url, groups); addAssembly(genome, el, hub); } el->settingsHash = ra; hashAdd(ra, "hubName", hub->shortLabel); } /* Clean up and go home. */ lineFileClose(&lf); slReverse(&list); return list; } char *trackHubSetting(struct trackHub *hub, char *name)