685233c5df19c4adedc6b82cd16418e611246a3e
chmalee
  Wed Sep 18 14:58:29 2024 -0700
hubCheck checks for valid type lines in subtracks, not just that the bigBed type setting is correct, refs #34475

diff --git src/hg/utils/hubCheck/hubCheck.c src/hg/utils/hubCheck/hubCheck.c
index 43082fa..77eabf4 100644
--- src/hg/utils/hubCheck/hubCheck.c
+++ src/hg/utils/hubCheck/hubCheck.c
@@ -768,30 +768,50 @@
     {
     errAbort("Track \"%s\" has children tracks (e.g: \"%s\"), but is not a "
         "compositeTrack, container, view or superTrack", tdb->track, tdb->subtracks->track);
     }
 }
 
 boolean checkTypeLine(struct trackHubGenome *genome, struct trackDb *tdb, struct dyString *errors, struct trackHubCheckOptions *options)
 {
 boolean retVal = FALSE;
 struct errCatch *errCatch = errCatchNew();
 if (errCatchStart(errCatch))
     {
     char *type = trackDbRequiredSetting(tdb, "type");
     char *splitType[4];
     int numWords = chopByWhite(cloneString(type), splitType, sizeof(splitType));
+    char *trackType = splitType[0];
+    boolean isParentTrack = (tdbIsComposite(tdb) || tdbIsCompositeView(tdb) || tdbIsContainer(tdb));
+    if (!isParentTrack &&
+            // these are the valid trackDb types for hub data tracks:
+            !(sameString("bigNarrowPeak", trackType) || sameString("bigBed", trackType) ||
+                    sameString("bigGenePred", trackType)  || sameString("bigPsl", trackType)||
+                    sameString("bigChain", trackType)|| sameString("bigMaf", trackType) ||
+                    sameString("bigBarChart", trackType) || sameString("bigInteract", trackType) ||
+                    sameString("bigLolly", trackType) || sameString("bigRmsk", trackType) ||
+                    sameString("bigWig", trackType) || sameString("longTabix", trackType) ||
+                    sameString("vcfTabix", trackType) || sameString("vcfPhasedTrio", trackType) ||
+                    sameString("bam", trackType) || sameString("hic", trackType)
+            #ifdef USE_HAL
+                    || sameString("halSnake", trackType)
+            #endif
+            ))
+        {
+        errAbort("error in type line \"%s\" for track \"%s\". The only valid types for tracks that are not composites, views or supertracks are: bigWig, bigBed and bigBed variants like bigGenePred/bigChain/bigBarChart/etc, longTabix, vcfTabix, vcfPhasedTrio, bam, hic and halSnake.", trackType, tdb->track);
+        }
+
     if (sameString(splitType[0], "bigBed"))
         {
         if (numWords > 1 && (strchr(splitType[1], '+') || strchr(splitType[1], '.')))
             {
             errAbort("error in type line \"%s\" for track \"%s\". "
                 "A space is needed after the \"+\" or \".\" character.", type, tdb->track);
             }
         if (numWords > 2 && (!sameString(splitType[2], "+") && !sameString(splitType[2], ".")))
             {
             errAbort("error in type line \"%s\" for track \"%s\". "
                 "Only \"+\" or \".\" is allowed after bigBed numFields setting.", type, tdb->track);
             }
         }
     }
 errCatchEnd(errCatch);