2c8912b056f0460badfcad9cce2e5c0a8c290c6d
kent
  Tue Jan 12 18:06:55 2021 -0800
Refactoring code so that in both hubs and in built in tracks the same trackDb fields are D substituted for file names so they don't have to be maintained in parallel. Build a new trackSettingIsFile routine to enable this and am calling it in the two places that used to decide whether to do a substitution.

diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c
index eaad09f..bb0b130 100644
--- src/hg/lib/trackHub.c
+++ src/hg/lib/trackHub.c
@@ -890,41 +890,38 @@
 static void expandOneUrl(struct hash *settingsHash, char *hubUrl, char *variable)
 {
 struct hashEl *hel = hashLookup(settingsHash, variable);
 if (hel != NULL)
     {
     char *oldVal = hel->val;
     hel->val = trackHubRelativeUrl(hubUrl, oldVal);
     freeMem(oldVal);
     }
 }
 
 static void expandBigDataUrl(struct trackHub *hub, struct trackHubGenome *genome,
 	struct trackDb *tdb)
 /* Expand bigDataUrls so that no longer relative to genome->trackDbFile */
 {
-expandOneUrl(tdb->settingsHash, genome->trackDbFile, "bigDataUrl");
-expandOneUrl(tdb->settingsHash, genome->trackDbFile, "bigDataIndex");
-expandOneUrl(tdb->settingsHash, genome->trackDbFile, "frames");
-expandOneUrl(tdb->settingsHash, genome->trackDbFile, "summary");
-expandOneUrl(tdb->settingsHash, genome->trackDbFile, "linkDataUrl");
-expandOneUrl(tdb->settingsHash, genome->trackDbFile, "searchTrix");
-expandOneUrl(tdb->settingsHash, genome->trackDbFile, "barChartSampleUrl");
-expandOneUrl(tdb->settingsHash, genome->trackDbFile, "barChartMatrixUrl");
-expandOneUrl(tdb->settingsHash, genome->trackDbFile, "barChartStatsUrl");
-expandOneUrl(tdb->settingsHash, genome->trackDbFile, SUBTRACK_HIDE_EMPTY_MULTIBED_URL);
-expandOneUrl(tdb->settingsHash, genome->trackDbFile, SUBTRACK_HIDE_EMPTY_SOURCES_URL);
+struct hashEl *hel;
+struct hashCookie cookie = hashFirst(tdb->settingsHash);
+while ((hel = hashNext(&cookie)) != NULL)
+    {
+    char *name = hel->name;
+    if (trackSettingIsFile(name))
+	expandOneUrl(tdb->settingsHash, genome->trackDbFile, name);
+    }
 }
 
 struct trackHubGenome *trackHubFindGenome(struct trackHub *hub, char *genomeName)
 /* Return trackHubGenome of given name associated with hub.  Return NULL if no
  * such genome.  Check genomeName without hub prefix to see if this hub
  * is attached to an assembly hub.*/
 {
 struct trackHubGenome *ret = hashFindVal(hub->genomeHash, genomeName);
 
 if (ret == NULL)
     ret = hashFindVal(hub->genomeHash, hubConnectSkipHubPrefix(genomeName));
 return ret;
 }
 
 static void requireBarChartBars(struct trackHub *hub, struct trackHubGenome *genome, struct trackDb *tdb)