e6f14fcef3884ca03768d4c646b442f3b606a959
braney
  Thu Jul 11 12:39:00 2013 -0700
some cleanup of assembly hubs: require organism and defaultPos, tolerate missing scientificName, groups, htmlPath and orderKey.  Fix weird bug with wikiTrack missing a settingsHash.
diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c
index 77998b7..06eebcb 100644
--- src/hg/lib/trackHub.c
+++ src/hg/lib/trackHub.c
@@ -121,31 +121,33 @@
 
 return cloneString(ret);
 }
 
 static struct dbDb *makeDbDbFromAssemblyGenome(struct trackHubGenome *hubGenome)
 /* Make a dbdb struture from a single assembly hub database. */
 {
 struct dbDb *db;
 
 AllocVar(db);
 db->genome = cloneString(hubGenome->organism);
 db->organism = cloneString(hubGenome->organism);
 db->name = cloneString(hubGenome->name);
 db->active = TRUE;
 db->description = cloneString(hubGenome->description);
-db->orderKey = sqlUnsigned(hashFindVal(hubGenome->settingsHash, "orderKey"));
+char *orderKey = hashFindVal(hubGenome->settingsHash, "orderKey");
+if (orderKey != NULL)
+    db->orderKey = sqlUnsigned(orderKey);
 
 return db;
 }
 
 struct dbDb *trackHubDbDbFromAssemblyDb(char *database)
 /* Return a dbDb structure for just this database. */
 {
 struct trackHubGenome *genome = trackHubGetGenome(database);
 
 if (genome == NULL)
     return NULL;
 
 return makeDbDbFromAssemblyGenome(genome);
 }
 
@@ -436,35 +438,45 @@
 		genome, lf->lineIx, lf->fileName);
     char *trackDb = hashFindVal(ra, "trackDb");
     if (trackDb == NULL)
         badGenomeStanza(lf);
     AllocVar(el);
     el->name = cloneString(genome);
     el->trackDbFile = trackHubRelativeUrl(url, trackDb);
     el->trackHub = hub;
     hashAdd(hash, el->name, el);
     slAddHead(&list, el);
     char *groups = hashFindVal(ra, "groups");
     if (twoBitPath != NULL)
 	{
 	//printf("reading genome %s twoBitPath %s\n", genome, el->twoBitPath);
 	el->description  = hashFindVal(ra, "description");
-	el->organism  = addHubName(hashFindVal(ra, "organism"), hub->name);
+	char *organism = hashFindVal(ra, "organism");
+	if (organism == NULL)
+	    errAbort("must have 'organism' set in assembly hub in stanza ending line %d of %s",
+		     lf->lineIx, lf->fileName);
+	el->organism  = addHubName(organism, hub->name);
 	hashReplace(ra, "organism", el->organism);
 	el->defaultPos  = hashFindVal(ra, "defaultPos");
+	if (el->defaultPos == NULL)
+	    errAbort("must have 'defaultPos' set in assembly hub in stanza ending line %d of %s",
+		     lf->lineIx, lf->fileName);
 	el->twoBitPath = trackHubRelativeUrl(url, twoBitPath);
-	hashReplace(ra, "htmlPath",trackHubRelativeUrl(url, hashFindVal(ra, "htmlPath")));
+
+	char *htmlPath = hashFindVal(ra, "htmlPath");
+	if (htmlPath != NULL)
+	    hashReplace(ra, "htmlPath",trackHubRelativeUrl(url, htmlPath));
 	if (groups != NULL)
 	    el->groups = trackHubRelativeUrl(url, groups);
 	addAssembly(genome, el, hub);
 	}
     el->settingsHash = ra;
     hashAdd(ra, "hubName", hub->shortLabel);
     }
 
 /* Clean up and go home. */
 lineFileClose(&lf);
 slReverse(&list);
 return list;
 }
 
 char *trackHubSetting(struct trackHub *hub, char *name)