Пример #1
0
void metaHoist(char *inFile, char *outFile)
/* metaHoist - Move tags that are shared by all siblings up a level.. */
{
struct meta *metaList = metaLoadAll(inFile, keyTag, parentTag, FALSE, FALSE);
struct meta *meta;
for (meta = metaList; meta != NULL; meta = meta->next)
    metaTreeHoist(meta);
metaWriteAll(metaList, outFile, indent, withParent, 0);
}
void encode2MetaPatchRenamed(char *inputMeta, char *patchFile, char *outputMeta)
/* encode2MetaPatchRenamed - Patch in renamed files (with same metadata) to encode2Meta. */
{
struct meta *metaList = metaLoadAll(inputMeta, NULL, NULL, FALSE, FALSE);
verbose(1, "%d in metaList\n", slCount(metaList));
struct patch *patch, *patchList = patchLoadAll(patchFile);
verbose(1, "%d in patchList\n", slCount(patchList));
for (patch =  patchList; patch != NULL; patch = patch->next)
    {
    verbose(2, "patching %s\n", patch->source);
    struct meta *meta = metaFindFirstMatch(metaList, "fileName", patch->source);
    if (meta == NULL)
	{
        verbose(2, "Can't find %s in %s", patch->source, inputMeta);
	continue;
	}
    struct meta *parent = meta->parent;
    assert(parent != NULL);
    boolean multiPatch = (slCount(patch->destList) > 1);
    if (multiPatch)
        {
	struct meta **oldSpot = &meta->children;
	struct slName *dest;
	int destId = 0;
	for (dest = patch->destList; dest != NULL; dest = dest->next)
	    {
	    /* Make up new object name if patching in more than one new thing. */
	    char metaObjName[PATH_LEN];
	    safef(metaObjName, sizeof(metaObjName), "%sSub%d", meta->name, ++destId);

	    /* Create subobject. */
	    struct meta *sub;
	    AllocVar(sub);
	    sub->tagList = metaTagValNew("meta", metaObjName);
	    sub->name = sub->tagList->val;
	    sub->tagList->next = metaTagValNew("fileName", dest->name);

	    /* And integrate into tree. */
	    sub->parent = meta;
	    sub->next = *oldSpot;
	    *oldSpot = sub;
	    oldSpot = &sub->next;
	    }
	/* Remove fileName element from parent. */
	meta->tagList = metaTagValListRemove(meta->tagList, "fileName"); 
	}
    else
        {
	metaAddTag(meta, "fileName", patch->destList->name);
	}
    }
metaWriteAll(metaList, outputMeta, 3, FALSE);
}
Пример #3
0
void edwMetaManiToTdb(char *metaInput, char *manifestInput, char *varCommaList, char *tdbOutput)
/* edwMetaManiToTdb - Create a trackDb file based on input from meta file and manifest file.. */
{
struct encode2Manifest *manList = encode2ManifestShortLoadAll(manifestInput);
struct meta *metaForest = metaLoadAll(metaInput, "meta", "parent", TRUE, FALSE);
struct slName *varList = slNameListFromComma(varCommaList);
struct hash *hash = metaHash(metaForest);
struct composite *comp, *compList = makeCompositeList(manList, hash);
uglyf("%d elements in manList, %d in metaForest top level, %d total, %d vars, %d composites\n", slCount(manList), slCount(metaForest), hash->elCount, slCount(varList), slCount(compList));

FILE *f = mustOpen(tdbOutput, "w");
for (comp = compList; comp != NULL; comp = comp->next)
    {
    outputComposite(comp, varList, hash, f);
    }
carefulClose(&f);
}