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;