struct hash *getTrackDbHash(char *trackDb, struct trackDb **head, char *release) { struct trackDb *trackObjs = trackDbFromRa(trackDb, release), *trackObj; struct hash *hash = newHash(10); for(trackObj = trackObjs; trackObj; trackObj = trackObj->next) { char *table = trackObj->table; if (table == NULL) table = trackObj->track; hashAdd(hash, table, trackObj); } *head = trackObjs; return hash; }
static void addVersionRa(boolean strict, char *database, char *dirName, char *raName, struct hash *trackHash) /* Read in tracks from raName and add them to table, pruning as required. Call * top-down so that track override will work. */ { struct trackDb *tdbList = trackDbFromRa(raName, NULL), *tdb; /* prune records of the incorrect release */ tdbList= pruneRelease(tdbList); /* load tracks, replacing higher-level ones with lower-level and * applying overrides*/ while ((tdb = slPopHead(&tdbList)) != NULL) { if (tdb->overrides != NULL) applyOverride(trackHash, tdb); else hashStore(trackHash, tdb->track)->val = tdb; } }