981b68955aada90b686af9ad7699e542c0ed24ff
kate
  Tue Apr 13 12:22:00 2021 -0700
Extend #insert support in hgTrackDb to support variable substitution in filename.  Prompted by single cell composite tracks, so subtracks can share a description page with subtrack-specific sections inserted. refs #27365

diff --git src/hg/lib/hVarSubst.c src/hg/lib/hVarSubst.c
index 1893e30..3feb22f 100644
--- src/hg/lib/hVarSubst.c
+++ src/hg/lib/hVarSubst.c
@@ -225,30 +225,32 @@
     dyStringAppend(dest, database);
 else if (sameString(varBase, "hgsid") && cart != NULL)
     dyStringAppend(dest, cartSessionId(cart));
 }
 
 static void substTrackDbVar(char *desc, struct trackDb *tdb, char *database,
                             char *varName, struct dyString *dest)
 /* substitute a variable value obtained from trackDb */
 {
 if (sameString(varName, "matrix"))
     substMatrixHtml(tdb, dest);
 else if (sameString(varName, "chainLinearGap"))
     substLinearGap(tdb, dest);
 else if (sameString(varName, "downloadsServer"))
     dyStringAppend(dest, hDownloadsServer());
+else if (sameString(varName, "track"))
+    dyStringAppend(dest, tdb->track);
 else
     dyStringAppend(dest, lookupTrackDbSubVar(desc, tdb, varName, varName));
 }
 
 static void substVar(char *desc, struct cart *cart, struct trackDb *tdb, char *database,
                      char *varName, struct dyString *dest)
 /* look up varName and insert value in output string.  Error if variable
  * can't be found */
 {
 if (isDatabaseVar(varName))
     substDatabaseVar(database, cart, varName, dest);
 else if (tdb == NULL)
     errAbort("invalid variable \"%s\" to substitute in %s",
              varName, desc);
 else if (startsWith("o_", varName) && isDatabaseVar(varName+2))