a18f9612e9fdc813d6a8ae1653b4af004f5cb8a3
kent
  Thu Jan 22 14:55:22 2015 -0800
Adding maxDepth parameter to metaWriteAll.

diff --git src/lib/meta.c src/lib/meta.c
index 26da19a..d081fc0 100644
--- src/lib/meta.c
+++ src/lib/meta.c
@@ -289,67 +289,72 @@
 	        {
 		pList = &olderSibling->parent->children;
 		meta->parent = olderSibling->parent;
 		}
 	    }
 	}
     slAddHead(pList, meta);
     lastMeta = meta;
     }
 lineFileClose(&lf);
 forest = rReverseMetaList(forest);
 return forest;
 }
 
 static void rMetaListWrite(struct meta *metaList, struct meta *parent,
-    boolean level, int indent, boolean withParent, FILE *f)
+    int level, int maxLevel, int indent, boolean withParent, FILE *f)
 /* Write out list of stanzas at same level to file,  their children too. */
 {
 int totalIndent = level * indent;
 struct meta *meta;
+int nextLevel = level+1;
 for (meta = metaList; meta != NULL; meta = meta->next)
     {
     struct metaTagVal *mtv;
     boolean gotParent = FALSE;
     for (mtv = meta->tagList; mtv != NULL; mtv = mtv->next)
 	{
 	if (sameString(mtv->tag, "parent"))
 	    {
 	    if (withParent)
 	        gotParent = TRUE;
 	    else
 	        continue;   
 	    }
 	spaceOut(f, totalIndent);
 	fprintf(f, "%s %s\n", mtv->tag, mtv->val);
 	}
     if (withParent && !gotParent && parent != NULL)
         {
 	spaceOut(f, totalIndent);
 	fprintf(f, "%s %s\n", "parent", parent->name);
 	}
     fprintf(f, "\n");
-    if (meta->children)
-        rMetaListWrite(meta->children, meta, level+1, indent, withParent, f);
+    if (meta->children && nextLevel < maxLevel)
+        rMetaListWrite(meta->children, meta, nextLevel, maxLevel, indent, withParent, f);
     }
 }
 
-void metaWriteAll(struct meta *metaList, char *fileName, int indent, boolean withParent)
-/* Write out metadata, optionally adding meta tag. */
+void metaWriteAll(struct meta *metaList, char *fileName, int indent, boolean withParent, 
+    int maxDepth)
+/* Write out metadata, optionally adding meta tag.  If maxDepth is non-zero just write 
+ * up to that many levels.  Root level is 0. */
 {
 FILE *f = mustOpen(fileName, "w");
-rMetaListWrite(metaList, NULL, 0, indent, withParent, f);
+if (maxDepth == 0)
+    maxDepth = BIGNUM;
+rMetaListWrite(metaList, NULL, 0, maxDepth, indent, withParent, f);
 carefulClose(&f);
 }
 
 char *metaLocalTagVal(struct meta *meta, char *name)
 /* Return value of tag found in this node, not going up to parents. */
 {
 struct metaTagVal *mtv;
 for (mtv = meta->tagList; mtv != NULL; mtv = mtv->next)
     if (sameString(mtv->tag, name))
         return mtv->val;
 return NULL;
 }
 
 char *metaTagVal(struct meta *meta, char *name)
 /* Return value of tag found in this node or if its not there in parents.