eec0b3f059c70b2e414e8c0ecdae5535039a92e7
braney
  Tue Nov 18 14:28:00 2014 -0800
make sure that description HTML ends in .html, but not twice.  #13516
diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c
index 429841b..ff7bf60 100644
--- src/hg/lib/trackHub.c
+++ src/hg/lib/trackHub.c
@@ -896,32 +896,37 @@
     hashReplace(tdb->settingsHash, "group", tdb->grp);
     }
 }
 
 static void addOneDescription(char *trackDbFile, struct trackDb *tdb)
 /* Fetch tdb->track's html description and store in tdb->html. */
 {
 /* html setting should always be set because we set it at load time */
 char *htmlName = trackDbSetting(tdb, "html");
 if (htmlName == NULL)
     return;
 
 char *simpleName = hubConnectSkipHubPrefix(htmlName);
 char *url = trackHubRelativeUrl(trackDbFile, simpleName);
 char buffer[10*1024];
+char *fixedUrl = url;
+if (!endsWith(url, ".html"))
+    {
     safef(buffer, sizeof buffer, "%s.html", url);
-tdb->html = netReadTextFileIfExists(buffer);
+    fixedUrl = buffer;
+    }
+tdb->html = netReadTextFileIfExists(fixedUrl);
 freez(&url);
 }
 
 void trackHubAddDescription(char *trackDbFile, struct trackDb *tdb)
 /* Fetch tdb->track's html description (or nearest ancestor's non-empty description)
  * and store in tdb->html. */
 {
 addOneDescription(trackDbFile, tdb);
 if (isEmpty(tdb->html))
     {
     struct trackDb *parent;
     for (parent = tdb->parent;  isEmpty(tdb->html) && parent != NULL;  parent = parent->parent)
 	{
 	addOneDescription(trackDbFile, parent);
 	if (isNotEmpty(parent->html))