985e22c1c56d7ba2909a96c1a66d8c4cff894340
braney
  Fri May 12 15:50:27 2017 -0700
fix a bug in outputting large composites

diff --git src/hg/hgComposite/hgComposite.c src/hg/hgComposite/hgComposite.c
index 269e6f3..8b14828 100644
--- src/hg/hgComposite/hgComposite.c
+++ src/hg/hgComposite/hgComposite.c
@@ -187,54 +187,53 @@
             {
             if (composite == NULL)
                 errAbort("track not in composite");
             AllocVar(track);
             track->name = tdb->track;
             track->shortLabel = tdb->shortLabel;
             track->longLabel = tdb->shortLabel;
             slAddHead(&composite->trackList, track);
             }
         }
     }
 
 return compositeList;
 }
 
-static char *getSqlBigWig(char *db, struct trackDb *tdb)
+static char *getSqlBigWig(struct sqlConnection *conn, char *db, struct trackDb *tdb)
 {
-struct sqlConnection *conn = hAllocConn(db);
-
 char buffer[4096];
 
 safef(buffer, sizeof buffer, "NOSQLINJ select fileName from %s", tdb->table);
 return sqlQuickString(conn, buffer);
 }
 
 static int snakePalette2[] =
 {
 0x1f77b4, 0xaec7e8, 0xff7f0e, 0xffbb78, 0x2ca02c, 0x98df8a, 0xd62728, 0xff9896, 0x9467bd, 0xc5b0d5, 0x8c564b, 0xc49c94, 0xe377c2, 0xf7b6d2, 0x7f7f7f, 0xc7c7c7, 0xbcbd22, 0xdbdb8d, 0x17becf, 0x9edae5
 };
 
 
-void outTdb(char *db, FILE *f, char *name,  struct trackDb *tdb, char *parent, unsigned int color)
+void outTdb(struct sqlConnection *conn, char *db, FILE *f, char *name,  struct trackDb *tdb, char *parent, unsigned int color)
 {
 char *dataUrl = NULL;
 char *bigDataUrl = trackDbSetting(tdb, "bigDataUrl");
+
 if (bigDataUrl == NULL)
     {
     if (startsWith("bigWig", tdb->type))
-        dataUrl = getSqlBigWig(db, tdb);
+        dataUrl = getSqlBigWig(conn, db, tdb);
     }
 struct hashCookie cookie = hashFirst(tdb->settingsHash);
 struct hashEl *hel;
 fprintf(f, "\ttrack %s\n", name);
 while ((hel = hashNext(&cookie)) != NULL)
     {
     if (differentString(hel->name, "parent") && differentString(hel->name, "polished")&& differentString(hel->name, "color")&& differentString(hel->name, "track"))
         fprintf(f, "\t%s %s\n", hel->name, (char *)hel->val);
     }
 if (bigDataUrl == NULL)
     {
     if (dataUrl != NULL)
         fprintf(f, "\tbigDataUrl %s\n", dataUrl);
     }
 fprintf(f, "\tparent %s\n",parent);
@@ -293,51 +292,49 @@
 if (hubName == NULL)
     {
     trashDirDateFile(&hubTn, "hgComposite", "hub", ".txt");
     hubName = cloneString(hubTn.forCgi);
     cartSetString(cart, buffer, hubName);
     FILE *f = mustOpen(hubName, "a");
     outHubHeader(f, db, hubName);
     fclose(f);
     cartSetString(cart, "hubUrl", hubName);
     cartSetString(cart, hgHubConnectRemakeTrackHub, hubName);
     }
 return hubName;
 }
 
 
-//static void outputCompositeHub(char *db, char *hubName, struct trackDb *fullTrackList, struct composite *compositeList, struct hash *nameHash)
 static void outputCompositeHub(char *db, char *hubName,  struct composite *compositeList, struct hash *nameHash)
 {
-// Do we already have a hub?
 chmod(hubName, 0666);
 FILE *f = mustOpen(hubName, "w");
 
 outHubHeader(f, db, hubName);
 int useColor = 0;
 struct composite *composite;
+struct sqlConnection *conn = hAllocConn(db);
 for(composite = compositeList; composite; composite = composite->next)
     {
     outComposite(f, composite);
     struct trackDb *tdb;
     struct track *track;
     for (track = composite->trackList; track; track = track->next)
         {
         tdb = hashMustFindVal(nameHash, track->name);
-        //tdb = findTrack(track->name, fullTrackList);
 
-        outTdb(db, f, track->name,tdb, composite->name, snakePalette2[useColor]);
+        outTdb(conn, db, f, track->name,tdb, composite->name, snakePalette2[useColor]);
         useColor++;
         if (useColor == (sizeof snakePalette2 / sizeof(int)))
             useColor = 0;
         }
     }
 fclose(f);
 }
 
 
 void topLabelSpansStart(char *label)
 {
 printf("<span style='display: inline-block; padding-right: 5px;'>"
        "<span style='display: block;'>%s</span>\n"
        "<span style='display: block; padding-bottom: 5px;'>\n", label);
 }