src/hg/makeDb/hgTrackDb/hgTrackDb.c 1.51

1.51 2009/06/04 19:14:43 hiram
Properly mark composite parents and children so that ClosestToHome settings will function OK
Index: src/hg/makeDb/hgTrackDb/hgTrackDb.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/makeDb/hgTrackDb/hgTrackDb.c,v
retrieving revision 1.50
retrieving revision 1.51
diff -b -B -U 4 -r1.50 -r1.51
--- src/hg/makeDb/hgTrackDb/hgTrackDb.c	26 Feb 2009 04:07:21 -0000	1.50
+++ src/hg/makeDb/hgTrackDb/hgTrackDb.c	4 Jun 2009 19:14:43 -0000	1.51
@@ -297,9 +297,9 @@
 for (td = tdList; td != NULL; td = td->next)
     {
     if (isEmpty(td->html))
         {
-        char *htmlName = trackDbSetting(td, "html");
+        char *htmlName = trackDbSettingClosestToHome(td, "html");
         if (htmlName == NULL)
             htmlName = td->tableName;
 	safef(fileName, sizeof(fileName), "%s/%s.html", dirName, htmlName);
 	if (fileExists(fileName))
@@ -339,8 +339,9 @@
 {
 int numSubGroups;        /* count of subGroups */
 struct hash *nameHash;   /* hash of subGroup names */
 struct hash *values[10]; /* array of value hash pointers in order */
+struct trackDb *compositeTdb;  /* tdb of composite parent */
 };
 
 static void checkSubGroups(struct trackDb *tdList)
 /* check integrity of subGroup clauses */
@@ -358,8 +359,10 @@
 	struct subGroupData *sgd;
         char subGroupName[256];
         AllocVar(sgd);
 	sgd->nameHash = newHash(3);
+	sgd->compositeTdb = td;
+	tdbMarkAsComposite(td);
 	while(i<10)
 	    {
 	    safef(subGroupName, sizeof(subGroupName), "subGroup%d", i+1);
 	    char *sgSetting = trackDbSetting(td, subGroupName);
@@ -403,9 +406,12 @@
 	    char *words[2];
 	    chopLine(cloneString(trackName), words);
 	    trackName = words[0];
 
+
 	    struct subGroupData *sgd = hashFindVal(compositeHash, trackName);
+	    td->parent = sgd->compositeTdb;
+	    tdbMarkAsCompositeChild(td);
 	    if (!sgd)
 		{
 		verbose(1,"parent %s missing for subtrack %s\n", trackName, td->tableName);
 		continue;
@@ -612,19 +618,20 @@
 
     /* Load in html and settings fields. */
     for (td = tdList; td != NULL; td = td->next)
 	{
-        if (isEmpty(td->html))
+        if ( (! tdbIsCompositeChild(td)) && isEmpty(td->html))
 	    {
 	    if (strict && !trackDbSetting(td, "subTrack") && !sameString(td->tableName,"cytoBandIdeo"))
 		{
 		fprintf(stderr, "Warning: html missing for %s %s %s '%s'\n",org, database, td->tableName, td->shortLabel);
 		}
 	    }
 	else
 	    {
-	    updateBigTextField(conn,  trackDbName, "tableName", td->tableName,
-	    	"html", td->html);
+	    if (! tdbIsCompositeChild(td))
+		updateBigTextField(conn,  trackDbName, "tableName",
+		    td->tableName, "html", td->html);
 	    }
 	if (td->settingsHash != NULL)
 	    {
 	    char *settings = settingsFromHash(td->settingsHash);