afd7d0d912aa376f0f214448f3e83d5967f35d50
hiram
  Mon Jun 17 12:55:03 2024 -0700
allow list functions to work on a genark genome without hubUrl specified no redmine

diff --git src/hg/hubApi/list.c src/hg/hubApi/list.c
index cfe6829..9754953 100644
--- src/hg/hubApi/list.c
+++ src/hg/hubApi/list.c
@@ -1095,30 +1095,35 @@
 	    jsonWriteObjectEnd(jw);
 	    }
 	jsonWriteObjectEnd(jw);
 	apiFinishOutput(0, NULL, jw);
 	}
     }
 else if (sameWord("tracks", words[1]))
     {
     char *extraArgs = verifyLegalArgs(argListTracks);
     if (extraArgs)
 	apiErrAbort(err400, err400Msg, "extraneous arguments found for function /list/tracks '%s'", extraArgs);
 
     char *hubUrl = cgiOptionalString("hubUrl");
     char *genome = cgiOptionalString("genome");
     char *db = cgiOptionalString("genome");
+    /* allow a GCx genome specified without hubUrl for GenArk genomes */
+    if (isEmpty(hubUrl)  && isNotEmpty(genome) && isGenArk(genome))
+	{
+	hubUrl = genArkHubTxt(genome);
+	}
     if (isEmpty(hubUrl) && isNotEmpty(db))
 	{
 	struct sqlConnection *conn = hAllocConnMaybe(db);
         if (NULL == conn)
 	    apiErrAbort(err400, err400Msg, "can not find 'genome=%s' for endpoint '/list/tracks", db);
 	else
 	    hFreeConn(&conn);
 	}
     if (isEmpty(hubUrl) && isEmpty(db))
       apiErrAbort(err400, err400Msg, "missing hubUrl or genome name for endpoint /list/tracks");
     if (isEmpty(hubUrl))	// missing hubUrl implies UCSC database
 	{
         trackDbJsonOutput(db, stdout);	// only need db for this function
 	return;
 	}
@@ -1141,30 +1146,35 @@
 	    {
 	    recursiveTrackList(jw, el, db);
 	    }
     jsonWriteObjectEnd(jw);
     apiFinishOutput(0, NULL, jw);
     }
 else if (sameWord("chromosomes", words[1]))
     {
     char *extraArgs = verifyLegalArgs(argListChromosomes);
     if (extraArgs)
 	apiErrAbort(err400, err400Msg, "extraneous arguments found for function /list/chromosomes '%s'", extraArgs);
 
     char *hubUrl = cgiOptionalString("hubUrl");
     char *genome = cgiOptionalString("genome");
     char *db = cgiOptionalString("genome");
+    /* allow a GCx genome specified without hubUrl for GenArk genomes */
+    if (isEmpty(hubUrl)  && isNotEmpty(genome) && isGenArk(genome))
+	{
+	hubUrl = genArkHubTxt(genome);
+	}
     if (isEmpty(hubUrl) && isNotEmpty(db))
 	{
 	struct sqlConnection *conn = hAllocConnMaybe(db);
         if (NULL == conn)
 	    apiErrAbort(err400, err400Msg, "can not find 'genome=%s' for endpoint '/list/chromosomes", db);
 	else
 	    hFreeConn(&conn);
 	}
     if (isEmpty(hubUrl) && isEmpty(db))
         apiErrAbort(err400, err400Msg, "must supply hubUrl or genome name for endpoint '/list/chromosomes", hubUrl, db);
 
     if (isEmpty(hubUrl))	// missing hubUrl implies UCSC database
 	{
         chromInfoJsonOutput(stdout, db);
 	return;
@@ -1173,30 +1183,35 @@
 	{
         hubChromInfoJsonOutput(stdout, hubUrl, genome);
 	return;
 	}
     }
 else if (sameWord("schema", words[1]))
     {
     char *extraArgs = verifyLegalArgs(argListSchema);
     if (extraArgs)
 	apiErrAbort(err400, err400Msg, "extraneous arguments found for function /list/schema '%s'", extraArgs);
 
     char *hubUrl = cgiOptionalString("hubUrl");
     char *genome = cgiOptionalString("genome");
     char *db = cgiOptionalString("genome");
     char *track = cgiOptionalString("track");
+    /* allow a GCx genome specified without hubUrl for GenArk genomes */
+    if (isEmpty(hubUrl)  && isNotEmpty(genome) && isGenArk(genome))
+	{
+	hubUrl = genArkHubTxt(genome);
+	}
 
     if (isEmpty(track))
 	apiErrAbort(err400, err400Msg, "missing track=<name> for endpoint '/list/schema'");
 
     if (isEmpty(hubUrl) && isNotEmpty(db))
 	{
 	struct sqlConnection *conn = hAllocConnMaybe(db);
         if (NULL == conn)
 	    apiErrAbort(err400, err400Msg, "can not find 'genome=%s' for endpoint '/list/schema", db);
 	else
 	    hFreeConn(&conn);
 	}
 
     if (isEmpty(hubUrl) && isEmpty(db))
         apiErrAbort(err400, err400Msg, "must supply hubUrl or genome name for endpoint '/list/schema", hubUrl, db);