e9c3757c29ec6d08b6232e0a671fe5970bb58e2e lrnassar Wed Feb 18 19:21:54 2026 -0800 Feedback from CR, refs #37124 diff --git src/hg/utils/hubCheck/hubCheck.c src/hg/utils/hubCheck/hubCheck.c index 821e67e2d20..72fe62e50c0 100644 --- src/hg/utils/hubCheck/hubCheck.c +++ src/hg/utils/hubCheck/hubCheck.c @@ -659,31 +659,31 @@ membersForAll = membersForAllSubGroupsGet(tdb->parent, NULL); // membersForAllSubGroupsGet() warns about the parent stanza, turn it into an errAbort if (errCatch->gotWarning) { errAbort("%s", errCatch->message->string); } if (membersForAll && checkEmptyMembersForAll(membersForAll, tdb->parent)) { membership = subgroupMembershipGet(tdb); sortOrder = sortOrderGet(NULL, tdb->parent); if (membership == NULL) { - errAbort("missing 'subgroups' setting for subtrack %s. Add a 'subGroups' line declaring this subtrack's group membership, e.g. 'subGroups view=signal'", subtrackName); + errAbort("missing 'subGroups' setting for subtrack %s. Add a 'subGroups' line declaring this subtrack's group membership, e.g. 'subGroups view=signal'", 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)) 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++) @@ -762,33 +762,33 @@ void hubCheckParentsAndChildren(struct trackDb *tdb) /* Check that a single trackDb stanza has the correct parent and subtrack pointers */ { if (tdbIsSuper(tdb) || tdbIsComposite(tdb) || tdbIsCompositeView(tdb) || tdbIsContainer(tdb)) { if (tdb->subtracks == NULL) { errAbort("Track \"%s\" is declared superTrack, compositeTrack, view or " "container, but has no subtracks", tdb->track); } // Containers should not have a bigDataUrl setting if (trackDbLocalSetting(tdb, "bigDataUrl")) { - errAbort("Track \"%s\" is a container (compositeTrack/superTrack/view) but also has " - "a 'bigDataUrl'. Container tracks organize subtracks and should not have data files. " - "Remove 'bigDataUrl' from this stanza, or remove the container declaration if this is " + errAbort("Track \"%s\" is a parent track (compositeTrack/superTrack/view/container) but also has " + "a 'bigDataUrl'. Parent tracks organize subtracks and should not have data files. " + "Remove 'bigDataUrl' from this stanza, or remove the parent declaration if this is " "a data track.", tdb->track); } // multiWigs cannot be the child of a composite if (tdbIsContainer(tdb) && (tdb->parent != NULL && (tdbIsComposite(tdb->parent) || tdbIsCompositeView(tdb->parent)))) { errAbort("Track \"%s\" is declared container multiWig and has parent \"%s\"." " Container multiWig tracks cannot be children of composites or views", tdb->track, tdb->parent->track); } } else if (tdb->subtracks != NULL) { @@ -1009,33 +1009,33 @@ if (!sameString(tdb->track, "cytoBandIdeo")) { trackHubAddDescription(genome->trackDbFile, tdb); if (!tdb->html) warn("warning: missing description page for track. Add 'html %s.html' line to the '%s' track stanza. ", tdb->track, tdb->track); } if (!trackIsContainer && sameString(trackDbRequiredSetting(tdb, "type"), "bigWig")) { char *autoScaleSetting = trackDbLocalSetting(tdb, "autoScale"); if (autoScaleSetting && !sameString(autoScaleSetting, "off") && !sameString(autoScaleSetting, "on")) { errAbort("track \"%s\" uses 'autoScale %s', but individual bigWig tracks only accept " - "'autoScale on' or 'autoScale off'. To use 'autoScale %s', move that setting to the " - "parent composite stanza instead.", - trackHubSkipHubName(tdb->track), autoScaleSetting, autoScaleSetting); + "'autoScale on' or 'autoScale off'. If you're trying to set 'autoScale group', " + "that setting belongs in the parent composite stanza instead.", + trackHubSkipHubName(tdb->track), autoScaleSetting); } } } errCatchEnd(errCatch); if (errCatch->gotError || errCatch->gotWarning) { trackDbErr(errors, errCatch->message->string, genome, tdb, options->htmlOut); if (errCatch->gotError || !options->allowWarnings) retVal = 1; if (errCatch->gotError) trackDbErrorCount += 1; } errCatchFree(&errCatch); if (options->htmlOut) @@ -1164,32 +1164,32 @@ return; // OK } errAbort("Genome %s not found in hub", options->genome); } boolean shouldCheckGenomes(struct trackHubCheckOptions *options, struct trackHubGenome *genome) /* should this genome be check based on command line restrictions */ { return (options->genome == NULL) || sameString(trackHubSkipHubName(genome->name), options->genome); } int trackHubCheck(char *hubUrl, struct trackHubCheckOptions *options, struct dyString *errors) /* Check a track data hub for integrity. Put errors in dyString. - * return 0 if hub has no errors, 1 otherwise - * if options->checkTracks is TRUE, check remote files of individual tracks + * return 0 if hub has no errors, or a non-zero value if errors were found + * if options->checkFiles is TRUE, check remote files of individual tracks */ { struct errCatch *errCatch = errCatchNew(); struct trackHub *hub = NULL; struct dyString *hubErrors = dyStringNew(0); int retVal = 0; if (errCatchStart(errCatch)) { hub = trackHubOpen(hubUrl, ""); char *descUrl = hub->descriptionUrl; if (descUrl == NULL) warn("warning: missing hub overview description page. Add a 'descriptionUrl hubDescription.html' line to hub.txt."); else if (!extFileExists(descUrl)) warn("warning: descriptionUrl '%s' could not be accessed. Verify the file exists at the specified path and is publicly readable.", hub->descriptionUrl);