cda0050210dc937dd156034ac46ca4857e2f0fac
tdreszer
  Thu Jan 20 10:41:23 2011 -0800
Needed to hook up generations and set container flags when getting tdb for track and ancestors
diff --git src/hg/lib/hdb.c src/hg/lib/hdb.c
index dab63a0..25283ff 100644
--- src/hg/lib/hdb.c
+++ src/hg/lib/hdb.c
@@ -3683,33 +3683,43 @@
     char *parent = trackDbLocalSetting(ancestor, "parent");
     if (parent != NULL)
 	parentTrack = cloneFirstWord(parent);
     if (parentTrack == NULL)
         {
 	char *super = trackDbLocalSetting(ancestor, "superTrack");
 	if (super != NULL && !startsWith("on", super))
 	    parentTrack = cloneFirstWord(super);
 	}
 
     /* If no parent we're done. */
     if (parentTrack == NULL)
         break;
 
     ancestor->parent = loadTrackDbForTrack(conn, parentTrack);
+    if (ancestor->parent == NULL)
+        break;
+
+    if (!tdbIsSuper(ancestor->parent)) // supers link to children differently
+        ancestor->parent->subtracks = ancestor;
+    else
+        ancestor->parent->children = slRefNew(ancestor);
     ancestor = ancestor->parent;
     }
-
+if (tdbIsSuper(ancestor))
+    ancestor = ancestor->children->val;
+trackDbContainerMarkup(NULL, ancestor);
+rInheritFields(ancestor);
 hFreeConn(&conn);
 return tdb;
 }
 
 struct trackDb *hCompositeTrackDbForSubtrack(char *db, struct trackDb *sTdb)
 /* Given a trackDb that may be for a subtrack of a composite track,
  * return the trackDb for the composite track if we can find it, else NULL.
  * Note: if the composite trackDb is found and returned, then its subtracks
  * member will contain a newly allocated tdb like sTdb (but not ==). */
 {
 struct trackDb *cTdb = NULL;
 if (sTdb != NULL)
     {
     char *subTrackSetting = cloneString(trackDbLocalSetting(sTdb, "parent"));
     if (subTrackSetting != NULL)