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,