7a7dfcb3a90292be4ea9ac465e5649f128043f05
chmalee
  Thu Jun 2 14:29:21 2022 -0700
Don't error out early when checking subtracks, instead show all possible warnings for bad subgroup memberships, refs #29525

diff --git src/hg/utils/hubCheck/hubCheck.c src/hg/utils/hubCheck/hubCheck.c
index e664265..a912c15 100644
--- src/hg/utils/hubCheck/hubCheck.c
+++ src/hg/utils/hubCheck/hubCheck.c
@@ -647,60 +647,60 @@
         membership = subgroupMembershipGet(tdb);
         sortOrder = sortOrderGet(NULL, tdb->parent);
 
         if (membership == NULL)
             {
             errAbort("missing 'subgroups' setting for subtrack %s", subtrackName);
             }
 
         // if a sortOrder is defined, make sure every subtrack has that membership
         if (sortOrder)
             {
             for (i = 0; i < sortOrder->count; i++)
                 {
                 char *col = sortOrder->column[i];
                 if ( (!sameString(col, SUBTRACK_COLOR_SUBGROUP)) && (membership == NULL || stringArrayIx(col, membership->subgroups, membership->count) == -1))
-                    errAbort("%s not a member of sortOrder subgroup %s", subtrackName, col);
+                    warn("%s not a member of sortOrder subgroup %s", subtrackName, col);
                 }
             }
 
         // now check that this subtrack is a member of every defined subgroup
         for (i = 0; i < ArraySize(membersForAll->members); i++)
             {
             if (membersForAll->members[i] != NULL)
                 {
                 char *subgroupName = membersForAll->members[i]->groupTag;
                 if (stringArrayIx(subgroupName, membership->subgroups, membership->count) == -1)
                     {
-                    errAbort("subtrack %s not a member of subgroup %s", subtrackName, subgroupName);
+                    warn("subtrack %s not a member of subgroup %s", subtrackName, subgroupName);
                     }
                 }
             }
 
         // check that the subtrack does not have any bogus subgroups that don't exist in the parent
         for (i = 0; i < membership->count; i++)
             {
             char *subgroupName = membership->subgroups[i];
             if (!subgroupingExists(tdb->parent, subgroupName))
                 {
-                errAbort("subtrack \"%s\" has a subgroup \"%s\" not defined at parent level", subtrackName, subgroupName);
+                warn("subtrack \"%s\" has a subgroup \"%s\" not defined at parent level", subtrackName, subgroupName);
                 }
             }
         }
     }
 errCatchEnd(errCatch);
-if (errCatch->gotError)
+if (errCatch->gotError || errCatch->gotWarning)
     {
     retVal = 1;
     trackDbErr(errors, errCatch->message->string, genome, tdb, options->htmlOut);
     }
 errCatchFree(&errCatch);
 
 return retVal;
 }
 
 int hubCheckCompositeSettings(struct trackHubGenome *genome, struct trackDb *tdb, struct dyString *errors, struct trackHubCheckOptions *options)
 /* Check composite level settings like subgroups, dimensions, sortOrder, etc.
  * Note that this function returns an int because we want to warn about all errors in a single
  * composite stanza rather than errAbort on the first error */
 {
 int retVal = 0;