f9f813c4330857fed2ed6008e6d6e9eb54d2474a galt Fri Mar 28 04:51:53 2025 -0700 fixing slNameSort in list.c for hubApi, refreshed expected output lists. fixes #26947 diff --git src/hg/hubApi/list.c src/hg/hubApi/list.c index 8fd76aa7f3a..8dbe9f60891 100644 --- src/hg/hubApi/list.c +++ src/hg/hubApi/list.c @@ -1047,53 +1047,68 @@ struct trackDb *tdbList = obtainTdb(NULL, db); struct jsonWrite *jw = apiStartOutput(); jsonWriteString(jw, "dataTime", dataTime); jsonWriteNumber(jw, "dataTimeStamp", (long long)dataTimeStamp); jsonWriteObjectStart(jw, db); freeMem(dataTime); struct trackDb *el = NULL; for (el = tdbList; el != NULL; el = el->next ) { recursiveTrackList(jw, el, db); } jsonWriteObjectEnd(jw); apiFinishOutput(0, NULL, jw); } /* static void trackDbJsonOutput(char *db, FILE *f) */ +int trackHubGenomeNameCmp(const void *va, const void *vb) +/* Compare two slNames. */ +{ +const struct trackHubGenome *a = *((struct trackHubGenome **)va); +const struct trackHubGenome *b = *((struct trackHubGenome **)vb); + +return strcmp(a->name, b->name); +} + +void trackHubGenomeNameSort(struct trackHubGenome **pList) +/* Sort slName list. */ +{ +slSort(pList, trackHubGenomeNameCmp); +} + void apiList(char *words[MAX_PATH_INFO]) /* 'list' function words[1] is the subCommand */ { if (sameWord("publicHubs", words[1])) jsonPublicHubs(); else if (sameWord("ucscGenomes", words[1])) jsonDbDb(); else if (sameWord("genarkGenomes", words[1])) jsonGenArk(); else if (sameWord("hubGenomes", words[1])) { char *extraArgs = verifyLegalArgs(argListHubGenomes); /* only one allowed */ if (extraArgs) apiErrAbort(err400, err400Msg, "extraneous arguments found for function /list/hubGenomes '%s'", extraArgs); char *hubUrl = cgiOptionalString("hubUrl"); if (isEmpty(hubUrl)) apiErrAbort(err400, err400Msg, "must supply hubUrl='http:...' some URL to a hub for /list/hubGenomes"); struct trackHub *hub = errCatchTrackHubOpen(hubUrl); if (hub->genomeList) { - slNameSort((struct slName **)&hub->genomeList); + trackHubGenomeNameSort(&hub->genomeList); struct jsonWrite *jw = apiStartOutput(); jsonWriteString(jw, "hubUrl", hubUrl); jsonWriteObjectStart(jw, "genomes"); struct trackHubGenome *el; for ( el = hub->genomeList; el; el = el->next) { jsonWriteObjectStart(jw, el->name); jsonWriteString(jw, "organism", el->organism); jsonWriteString(jw, "description", el->description); jsonWriteString(jw, "trackDbFile", el->trackDbFile); jsonWriteString(jw, "twoBitPath", el->twoBitPath); jsonWriteString(jw, "groups", el->groups); jsonWriteString(jw, "defaultPos", el->defaultPos); jsonWriteNumber(jw, "orderKey", el->orderKey); jsonWriteObjectEnd(jw);