コード例 #1
0
ファイル: hgTrackDb.c プロジェクト: elmargb/kentUtils
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;
}
コード例 #2
0
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;
}