public void testReadIndex_DirCacheTree() { Dictionary<string, CGitIndexRecord> cList = ReadLsFiles(); Dictionary<string, CGitLsTreeRecord> cTree = ReadLsTree(); var dc = new DirCache(_index); Assert.AreEqual(0, dc.getEntryCount()); dc.read(); Assert.AreEqual(cList.Count, dc.getEntryCount()); DirCacheTree jTree = dc.getCacheTree(false); Assert.IsNotNull(jTree); Assert.AreEqual(string.Empty, jTree.getNameString()); Assert.AreEqual(string.Empty, jTree.getPathString()); Assert.IsTrue(jTree.isValid()); Assert.AreEqual(ObjectId .FromString("698dd0b8d0c299f080559a1cffc7fe029479a408"), jTree .getObjectId()); Assert.AreEqual(cList.Count, jTree.getEntrySpan()); var subtrees = new List<CGitLsTreeRecord>(); foreach (CGitLsTreeRecord r in cTree.Values) { if (FileMode.Tree.Equals(r.Mode)) subtrees.Add(r); } Assert.AreEqual(subtrees.Count, jTree.getChildCount()); for (int i = 0; i < jTree.getChildCount(); i++) { DirCacheTree sj = jTree.getChild(i); CGitLsTreeRecord sc = subtrees[i]; Assert.AreEqual(sc.Path, sj.getNameString()); Assert.AreEqual(sc.Path + "/", sj.getPathString()); Assert.IsTrue(sj.isValid()); Assert.AreEqual(sc.Id, sj.getObjectId()); } }
/// <summary> /// Create a new iterator for an already loaded DirCache instance. /// <para/> /// The iterator implementation may copy part of the cache's data during /// construction, so the cache must be Read in prior to creating the /// iterator. /// </summary> /// <param name="dc"> /// The cache to walk. It must be already loaded into memory. /// </param> public DirCacheIterator(DirCache dc) { Cache = dc; Tree = dc.getCacheTree(true); TreeStart = 0; TreeEnd = Tree.getEntrySpan(); SubtreeId = new byte[Constants.OBJECT_ID_LENGTH]; if (!eof()) { ParseEntry(); } }