2ba572dc8bbe18b3398dcf17205dafdd52ab396a
braney
  Sat May 24 10:01:21 2014 -0700
updates to hgHubConnect to interface to make it less confusing.   Nowconnection and disconnection put you on the gateway page.

diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c
index cca97f9..114850f 100644
--- src/hg/lib/trackHub.c
+++ src/hg/lib/trackHub.c
@@ -369,36 +369,46 @@
 }
 
 char *trackHubAssemblyClade(char *genome)
 /* Return the clade/hub_name that contains this genome. */
 {
 struct hashEl *hel;
 if ((hubOrgHash != NULL) && (hel = hashLookup(hubOrgHash, genome)) != NULL)
     {
     struct trackHub *hub = hel->val;
 
     return cloneString(hub->name);
     }
 return NULL;
 }
 
+static void deleteAssembly(char *name, struct trackHubGenome *genome, struct trackHub *hub)
+/* delete this assembly from the assembly caches */
+{
+hashRemove(hubCladeHash, hub->name);
+slRemoveEl(&globalAssemblyHubList, hub);
+
+hashRemove(hubOrgHash, genome->organism);
+
+hashRemove(hubAssemblyHash, genome->name);
+}
+
 static void addAssembly(char *name, struct trackHubGenome *genome, struct trackHub *hub)
 /* Add a new assembly hub database to our global list. */
 {
 struct hashEl *hel;
 
-
 if (hubCladeHash == NULL)
     hubCladeHash = newHash(5);
 if ((hel = hashLookup(hubCladeHash, hub->name)) == NULL)
     {
     hashAdd(hubCladeHash, hub->name, hub);
     slAddHead(&globalAssemblyHubList, hub);
     }
 
 if (hubOrgHash == NULL)
     hubOrgHash = newHash(5);
 if ((hel = hashLookup(hubOrgHash, genome->organism)) == NULL)
     {
     hashAdd(hubOrgHash, genome->organism, hub);
     }
 
@@ -532,61 +542,63 @@
 char *genomesUrl = trackHubRelativeUrl(hub->url, hub->genomesFile);
 
 hub->genomeHash = hashNew(8);
 hub->genomeList = trackHubGenomeReadRa(genomesUrl, hub);
 freez(&genomesUrl);
 
 return hub;
 }
 
 void trackHubClose(struct trackHub **pHub)
 /* Close up and free resources from hub. */
 {
 struct trackHub *hub = *pHub;
 if (hub != NULL)
     {
-    trackHubGenomeFreeList(&hub->genomeList);
+    trackHubGenomeFreeList(hub);
     freeMem(hub->url);
     hashFree(&hub->settings);
     hashFree(&hub->genomeHash);
     freez(pHub);
     }
 }
 
 void trackHubGenomeFree(struct trackHubGenome **pGenome)
 /* Free up genome info. */
 {
 struct trackHubGenome *genome = *pGenome;
 if (genome != NULL)
     {
     freeMem(genome->name);
     freeMem(genome->trackDbFile);
     freez(pGenome);
     }
 }
 
-void trackHubGenomeFreeList(struct trackHubGenome **pList)
+void trackHubGenomeFreeList(struct trackHub *hub)
 /* Free a list of dynamically allocated trackHubGenome's */
 {
 struct trackHubGenome *el, *next;
 
-for (el = *pList; el != NULL; el = next)
+for (el = hub->genomeList; el != NULL; el = next)
     {
     next = el->next;
+    if (el->twoBitPath != NULL)
+	deleteAssembly(hub->name, el, hub);
     trackHubGenomeFree(&el);
     }
-*pList = NULL;
+hub->genomeList = NULL;
 }
 
 static char *requiredSetting(struct trackHub *hub, struct trackHubGenome *genome,
 	struct trackDb *tdb, char *setting)
 /* Fetch setting or give an error message, a little more specific than the
  * error message from trackDbRequiredSetting(). */
 {
 char *val = trackDbSetting(tdb, setting);
 if (val == NULL)
     errAbort("Missing required '%s' setting in hub %s genome %s track %s", setting,
     	hub->url, genome->name, tdb->track);
 return val;
 }
 
 static void expandBigDataUrl(struct trackHub *hub, struct trackHubGenome *genome,