void addVersion(boolean strict, char *database, char *dirName, char *raName, struct hash *uniqHash, struct hash *htmlHash, struct hgFindSpec **pSpecList) /* Read in specs from raName and add them to list/database if new. */ { struct hgFindSpec *hfsList = NULL, *hfs = NULL; struct hgFindSpec *hfsNext = NULL; hfsList = hgFindSpecFromRa(database, raName, NULL); /* prune records of the incorrect release */ hfsList = pruneRelease(hfsList); if (strict) { for (hfs = hfsList; hfs != NULL; hfs = hfsNext) { hfsNext = hfs->next; if (! hTableOrSplitExists(database, hfs->searchTable)) { if (verboseLevel() > 1) printf("%s missing\n", hfs->searchTable); slRemoveEl(&hfsList, hfs); } else if (hfs->xrefTable[0] != 0) { // Use sqlTableExists because xrefTable might be $db.$table, // not supported by hTableExists / hTableOrSplitExists // NOTE hfs->xrefTable can sometimes contain a comma-separated table list, // rather than just a single table. struct sqlConnection *conn = hAllocConn(database); char *tables = replaceChars(hfs->xrefTable, ",", " "); boolean exists = sqlTablesExist(conn, tables); hFreeConn(&conn); freeMem(tables); if (! exists) { if (verboseLevel() > 1) printf("%s (xref) missing\n", hfs->xrefTable); slRemoveEl(&hfsList, hfs); } } } } for (hfs = hfsList; hfs != NULL; hfs = hfsNext) { hfsNext = hfs->next; if (! hashLookup(uniqHash, hfs->searchName)) { hashAdd(uniqHash, hfs->searchName, hfs); slAddHead(pSpecList, hfs); } } }
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; } }