325f711f30c884459738f065f3415ce2914ec828
braney
  Wed Aug 13 16:18:51 2025 -0700
get hgConvert and hgLiftOver to use genark assemblies that are not in
the UCSC taxId list

diff --git src/hg/lib/hdb.c src/hg/lib/hdb.c
index 10116648f78..fa4aa5e64e7 100644
--- src/hg/lib/hdb.c
+++ src/hg/lib/hdb.c
@@ -2908,30 +2908,52 @@
     hashAdd(dbDbHash, dbdb->name, dbdb);
 return dbDbHash;
 }
 
 int hDbDbCmpOrderKey(const void *va, const void *vb)
 /* Compare to sort based on order key */
 {
 const struct dbDb *a = *((struct dbDb **)va);
 const struct dbDb *b = *((struct dbDb **)vb);
 
 if (b->orderKey > a->orderKey) return -1;
 else if (b->orderKey < a->orderKey) return 1;
 else return 0;
 }
 
+static int hDbDbCmpName(const void *va, const void *vb)
+/* Compare to sort based on organism */
+{
+const struct dbDb *a = *((struct dbDb **)va);
+const struct dbDb *b = *((struct dbDb **)vb);
+
+// put Human at top followed by Mouse and then alphabetically with "Other" at the bottom
+if (sameString(a->genome, "Human"))
+    return -1;
+if (sameString(b->genome, "Human"))
+    return 1;
+if (sameString(a->genome, "Mouse"))
+    return -1;
+if (sameString(b->genome, "Mouse"))
+    return 1;
+if (sameString(a->genome, "Other"))
+    return 1;
+if (sameString(b->genome, "Other"))
+    return -1;
+return strcmp(a->genome, b->genome);
+}
+
 struct slName *hDbList()
 /* List of all database versions that are online (database
  * names only).  See also hDbDbList. */
 {
 struct slName *nList = NULL, *n;
 struct dbDb *dbList, *db;
 
 dbList = hDbDbList();
 for (db = dbList; db != NULL; db = db->next)
     {
     n = newSlName(db->name);
     slAddTail(&nList, n);
     }
 dbDbFree(&dbList);
 return nList;
@@ -4980,31 +5002,31 @@
     }
 
 if (cfgOptionBooleanDefault("genarkLiftOver", FALSE) && (strlen(dy->string) > 0))
     {
     dy->string[strlen(dy->string) - 1] = 0;
     struct dbDb *genarkDbDbs = genarkLiftOverDbs(dy->string);
     liftOverDbList = slCat(genarkDbDbs, liftOverDbList);
     }
 
 hashFree(&hash);
 hashFree(&dbNameHash);
 liftOverChainFreeList(&chainList);
 
 /* sort by orderKey so that assemblies always appear from most recent */
 /* to the oldest assemblies in the dropdown menu for fromDbs */
-slSort(&liftOverDbList, hDbDbCmpOrderKey);
+slSort(&liftOverDbList, hDbDbCmpName);
 
 return liftOverDbList;
 }
 
 struct dbDb *hGetLiftOverToDatabases(char *fromDb)
 /* Get list of databases for which there are liftOver chain files
  * to convert from the fromDb assembly.
  * Dispose of this with dbDbFreeList. */
 {
 struct dbDb *allDbList = NULL, *liftOverDbList = NULL, *dbDb, *nextDbDb;
 struct liftOverChain *chainList = NULL, *chain;
 struct hash *hash = newHash(0);
 struct hash *dbNameHash = newHash(3);
 
 /* Get list of all liftOver chains in central database */
@@ -5039,31 +5061,31 @@
         dbDbFree(&dbDb);
     }
 
 if (cfgOptionBooleanDefault("genarkLiftOver", FALSE) && (strlen(dy->string) > 0))
     {
     dy->string[strlen(dy->string) - 1] = 0;
     struct dbDb *genarkDbDbs = genarkLiftOverDbs(dy->string);
     liftOverDbList = slCat(genarkDbDbs, liftOverDbList);
     }
 
 hashFree(&hash);
 liftOverChainFreeList(&chainList);
 
 /* sort by orderKey so that assemblies always appear from most recent */
 /* to the oldest assemblies in the dropdown menu for toDbs */
-slSort(&liftOverDbList, hDbDbCmpOrderKey);
+slSort(&liftOverDbList, hDbDbCmpName);
 return liftOverDbList;
 }
 
 struct dbDb *hGetBlatIndexedDatabases()
 /* Get list of databases for which there is a BLAT index.
  * Dispose of this with dbDbFreeList. */
 {
 struct hash *hash=newHash(5);
 struct sqlConnection *conn = hConnectCentral();
 struct sqlResult *sr;
 char **row;
 struct dbDb *dbList = NULL, *db;
 
 char query[1024];
 /* Get hash of active blat servers. */