c66047d34f4a5e0df8f273a98531de3b942556eb chmalee Wed May 1 12:53:12 2019 -0700 Fixing bug in checking for subtracks of superTracks, composites and views as pointed out by Jonathan, refs #22397 diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c index ce825ec..33acc6b 100644 --- src/hg/lib/trackHub.c +++ src/hg/lib/trackHub.c @@ -776,53 +776,48 @@ 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"); -if (trackDbLocalSetting(tdb, "superTrack") || trackDbLocalSetting(tdb, "compositeTrack") - || trackDbLocalSetting(tdb, "container") || trackDbLocalSetting(tdb, "view")) - { - // subtracks is not NULL if a track said we were its parent - // but generate a more helpful error if a track should have children but doesn't - if (tdb->subtracks != NULL) - { +// check that current stanza (via trackDbLocalSetting) is not using the old +// style "superTrack parentName visibility" subtrack declaration boolean isSuper = FALSE; - char *superTrack = trackDbSetting(tdb, "superTrack"); +char *superTrack = trackDbLocalSetting(tdb, "superTrack"); if ((superTrack != NULL) && startsWith("on", superTrack)) isSuper = TRUE; - if (!(trackDbSetting(tdb, "compositeTrack") || - trackDbSetting(tdb, "container") || - isSuper)) +if (isSuper || trackDbLocalSetting(tdb, "compositeTrack") || trackDbLocalSetting(tdb, "container") || trackDbLocalSetting(tdb, "view")) { - errAbort("Parent track %s is not compositeTrack, container, or superTrack in hub %s genome %s", - tdb->track, hub->url, genome->name); - } - } - else + // subtracks is not NULL if a track said we were its parent + // but generate a more helpful error if a track should have children but doesn't + if (tdb->subtracks == NULL) errAbort("Track %s is declared superTrack, compositeTrack or container but has no subtracks in hub %s genome %s", tdb->track, hub->url, genome->name); } +else if (tdb->subtracks != NULL) + { + errAbort("Parent track %s is not compositeTrack, container, or superTrack in hub %s genome %s", tdb->track, hub->url, genome->name); + } else { /* Check type field. */ char *type = requiredSetting(hub, genome, tdb, "type"); if (! isCustomComposite(tdb)) { if (startsWithWord("mathWig", type) ) { requiredSetting(hub, genome, tdb, "mathDataUrl"); } else { if (!(startsWithWord("wig", type)|| startsWithWord("bedGraph", type))) { if (!(startsWithWord("bigWig", type) ||