09a9db10915068260ce4a3e16affe0ddface2617
kate
  Wed Jun 5 14:57:22 2019 -0700
Allow spec'ing a trackDb field as not inherited from supertrack. To replace 'pennantIcon none' construct, as per discussion with QA. refs #23403

diff --git src/hg/lib/trackDbCustom.c src/hg/lib/trackDbCustom.c
index 062dd64..5bc0716 100644
--- src/hg/lib/trackDbCustom.c
+++ src/hg/lib/trackDbCustom.c
@@ -793,39 +793,47 @@
 if (ctPopup <= cfgNone && !tdbIsSubtrack(tdb)) // subtracks must receive CfgType!
     ctPopup = cfgUndetermined; // cfgTypeFromTdb() does not work for every case.
 
 if (ctPopup > cfgNone)
     {
     if (regexMatch(tdb->track, "^snp[0-9]+")     // Special cases to be removed
     ||  regexMatch(tdb->track, "^cons[0-9]+way") // (matches logic in json setup in imageV2.c)
     ||  startsWith("hapmapSnps", tdb->track)
     ||  startsWith("hapmapAlleles", tdb->track)
     ||  trackDbSettingBlocksConfiguration(tdb,TRUE))
         ctPopup *= -1;
     }
 return ctPopup;
 }
 
+boolean trackDbNoInheritField(char *field)
+/* Suppress inheritance of specific fields.
+ * NOTE: make more efficient if more of these are added */
+{
+return (sameString(field, "pennantIcon"));
+}
+
 char *trackDbSetting(struct trackDb *tdb, char *name)
-/* Look for a trackDb setting from lowest level on up chain of parents. */
+/* Look for a trackDb setting from lowest level on up chain of parents,
+ * excepting fields specifically defined as not inheritable  */
 {
 struct trackDb *generation;
 char *trackSetting = NULL;
 for (generation = tdb; generation != NULL; generation = generation->parent)
     {
     trackSetting = trackDbLocalSetting(generation, name);
-    if (trackSetting != NULL)
+    if (trackSetting != NULL || trackDbNoInheritField(name))
         break;
     }
 return trackSetting;
 }
 
 void trackDbAddSetting(struct trackDb *bt, char *name, char *val)
 {
 /* Add a setting to a trackDb rec */
 hashAdd(trackDbHashSettings(bt), name, cloneString(val));
 }
 
 char *trackDbSettingByView(struct trackDb *tdb, char *name)
 /* For a subtrack of a multiview composite, get a setting stored in the view or any other
  * ancestor. */
 {