05eb41c63af8ccd369f76b022d3cf1faab5543c2
braney
  Thu May 26 16:25:07 2022 -0700
changes to support curated hubs

diff --git src/hg/makeDb/trackDbToTxt/trackDbToTxt.c src/hg/makeDb/trackDbToTxt/trackDbToTxt.c
index 4595ec9..0d8b4b4 100644
--- src/hg/makeDb/trackDbToTxt/trackDbToTxt.c
+++ src/hg/makeDb/trackDbToTxt/trackDbToTxt.c
@@ -1,145 +1,147 @@
 /* trackDbToTxt - Convert a trackDb table to a trackDb.txt file. */
 #include "common.h"
 #include "linefile.h"
 #include "hash.h"
 #include "options.h"
 #include "jksql.h"
 #include "trackDb.h"
 
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "trackDbToTxt - Convert a trackDb table to a trackDb.txt file\n"
   "usage:\n"
   "   trackDbToTxt database table directory\n"
   "options:\n"
   "   -xxx=XXX\n"
   );
 }
 
 /* Command line validation table. */
 static struct optionSpec options[] = {
    {NULL, 0},
 };
 
 static void outTdb(FILE *f, char *directory, struct hash *alreadyOutHash, struct trackDb *tdb)
 {
 if (hashLookup(alreadyOutHash, tdb->track) != NULL)
     return;
 
 hashAdd(alreadyOutHash, tdb->track, tdb);
 
 fprintf(f, "track %s\n", tdb->track);
 fprintf(f, "type %s\n", tdb->type);
 if (!isEmpty(tdb->html))
     {
     char htmlName[1024];
 
     safef(htmlName, sizeof htmlName, "%s/%s.html", directory, tdb->track);
     FILE *htmlF = mustOpen(htmlName, "w");
 
     fputs(tdb->html, htmlF);
+    fprintf(f, "html %s.html\n", tdb->track);
     fclose(htmlF);
     }
 
 struct hashCookie cookie = hashFirst(tdb->settingsHash);
 struct hashEl *hel;
 while ((hel = hashNext(&cookie)) != NULL)
     {
     if (differentString(hel->name, "track")
-        && differentString(hel->name, "type"))
+        && differentString(hel->name, "type")
+        && differentString(hel->name, "html"))
         {
         fprintf(f, "%s %s\n", hel->name, (char *)hel->val);
         }
     }
 
 fputc('\n', f);
 //trackDbTabOut(tdb,f);
 }
 
 static void outputParents(FILE *f, char *directory, struct hash *trackDbHash, struct hash *alreadyOutHash, struct trackDb *tdb)
 {
 if (tdb == NULL)
     return;
 
 outputParents(f, directory, trackDbHash, alreadyOutHash, tdb->parent);
 
 outTdb(f, directory, alreadyOutHash, tdb);
 }
 
 #ifdef NOTNOW
 char *name;
 if ((name = hashFindVal(tdb->settingsHash, "parent")) != NULL)
     {
     char *space;
     if ((space = strchr(name, ' ')) != NULL)
         *space = 0;
     printf("looking for parent %s\n", name);
     if (hashLookup(alreadyOutHash, name) == NULL)
         {
         struct trackDb *parent = hashMustFindVal(trackDbHash, name);
         outputParents(f, trackDbHash, alreadyOutHash, parent);
         outTdb(f, alreadyOutHash, parent);
         }
     }
 }
 #endif
 
 static void walkList(FILE *f, char *directory, struct trackDb *list, struct hash *trackDbHash, struct hash *alreadyOutHash)
 {
 if (list == NULL)
     return;
     
 struct trackDb *tdb;
 for(tdb = list; tdb; tdb = tdb->next)
     {
     trackDbHashSettings(tdb);
     walkList(f, directory, tdb->subtracks, trackDbHash, alreadyOutHash);
     if (hashLookup(tdb->settingsHash, "bigDataUrl") != NULL)
     //&& (hashLookup(tdb->settingsHash, "parent") == NULL))
         {
         outputParents(f, directory, trackDbHash, alreadyOutHash, tdb->parent);
         outTdb(f, directory, alreadyOutHash, tdb);
         }
     }
 }
 
 static void trackDbToTxt(char *db, char *table, char *directory)
 /* trackDbToTxt - Convert a trackDb table to a trackDb.txt file. */
 {
 struct sqlConnection *conn = sqlConnect(db);
 struct trackDb *list = trackDbLoadWhere(conn, table, NULL);
 struct hash *trackDbHash = newHash(0);
 struct hash *alreadyOutHash = newHash(0);
 makeDirs(directory);
 char trackDbName[1024];
 safef(trackDbName, sizeof trackDbName, "%s/trackDb.txt", directory);
 FILE *f = mustOpen(trackDbName, "w");
 //struct trackDb *tdb;
 
 //loadOneTrackDb(db, NULL, table, &list, trackDbHash);
 
 trackDbSuperMarkup(list);
 list = trackDbLinkUpGenerations(list);
 //list = trackDbPolishAfterLinkup(list, db);
 
 walkList(f, directory, list, trackDbHash, alreadyOutHash);
 #ifdef nOTNOW
 for(tdb = list; tdb; tdb = tdb->next)
     {
     trackDbHashSettings(tdb);
     //hashAdd(trackDbHash, tdb->track, tdb);
     }
 #endif
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 optionInit(&argc, argv, options);
 if (argc != 4)
     usage();
 trackDbToTxt(argv[1], argv[2], argv[3]);
 return 0;
 }