static struct trackDb * pruneRelease(struct trackDb *tdbList) /* Prune out alternate track entries for another release */ { /* Build up list that only includes things in this release. Release * can be inherited from parents. */ struct trackDb *tdb; struct trackDb *relList = NULL; struct hash *haveHash = hashNew(3); while ((tdb = slPopHead(&tdbList)) != NULL) { char *rel = trackDbSetting(tdb, "release"); unsigned trackRelBits = buildReleaseBits(rel); if (trackRelBits & releaseBit) { /* we want to include this track, check to see if we already have it */ struct hashEl *hel; if ((hel = hashLookup(haveHash, tdb->track)) != NULL) errAbort("found two copies of table %s: one with release %s, the other %s\n", tdb->track, (char *)hel->val, release); hashAdd(haveHash, tdb->track, rel); hashRemove(tdb->settingsHash, "release"); slAddHead(&relList, tdb); } else verbose(3,"pruneRelease: removing '%s', release: '%s' != '%s'\n", tdb->track, rel, release); } freeHash(&haveHash); return relList; }
static struct hgFindSpec * pruneRelease(struct hgFindSpec *hfsList) /* Prune out alternate track entries for another release */ { /* Build up list that only includes things in this release. Release * can be inherited from parents. */ struct hgFindSpec *hfs; struct hgFindSpec *relList = NULL; struct hash *haveHash = hashNew(3); while ((hfs = slPopHead(&hfsList)) != NULL) { char *rel = hgFindSpecSetting(hfs, "release"); unsigned hfsRelBits = buildReleaseBits(rel); if (hfsRelBits & releaseBit) { /* we want to include this track, check to see if we already have it */ struct hashEl *hel; if ((hel = hashLookup(haveHash, hfs->searchName)) != NULL) { // TODO restore this warning to errAbort // This has been temporarily changed to a warning to avoid everybody being held up. char *one = (char *)hel->val; char *other = release; if (!one) one = "none"; if (!other) other = "none"; warn("ERROR: found two or more copies of %s: one with release %s, the other %s\n", hfs->searchName, one, other); } else { hashAdd(haveHash, hfs->searchName, rel); hashRemove(hfs->settingsHash, "release"); slAddHead(&relList, hfs); } } else verbose(3,"pruneRelease: removing '%s', release: '%s' != '%s'\n", hfs->searchName, rel, release); } freeHash(&haveHash); return relList; }