protected RevObject get(RevTree tree, string path) { var tw = new GitSharp.Core.TreeWalk.TreeWalk(db); tw.setFilter(PathFilterGroup.createFromStrings(new[] { path })); tw.reset(tree); while (tw.next()) { if (tw.isSubtree() && !path.Equals(tw.getPathString())) { tw.enterSubtree(); continue; } ObjectId entid = tw.getObjectId(0); FileMode entmode = tw.getFileMode(0); return(rw.lookupAny(entid, (int)entmode.ObjectType)); } Assert.Fail("Can't find " + path + " in tree " + tree.Name); return(null); // never reached. }
public void testMissingSubtree_DetectFileAdded_FileModified() { var ow = new ObjectWriter(db); ObjectId aFileId = ow.WriteBlob(Constants.CHARSET.GetBytes("a")); ObjectId bFileId = ow.WriteBlob(Constants.CHARSET.GetBytes("b")); ObjectId cFileId1 = ow.WriteBlob(Constants.CHARSET.GetBytes("c-1")); ObjectId cFileId2 = ow.WriteBlob(Constants.CHARSET.GetBytes("c-2")); // Create sub-a/empty, sub-c/empty = hello. Func<ObjectId> oldTree = () => { var root = new Core.Tree(db); Core.Tree subA = root.AddTree("sub-a"); subA.AddFile("empty").Id = aFileId; subA.Id = ow.WriteTree(subA); Core.Tree subC = root.AddTree("sub-c"); subC.AddFile("empty").Id = cFileId1; subC.Id = ow.WriteTree(subC); return ow.WriteTree(root); }; // Create sub-a/empty, sub-b/empty, sub-c/empty. Func<ObjectId> newTree = () => { var root = new Core.Tree(db); Core.Tree subA = root.AddTree("sub-a"); subA.AddFile("empty").Id = aFileId; subA.Id = ow.WriteTree(subA); Core.Tree subB = root.AddTree("sub-b"); subB.AddFile("empty").Id = bFileId; subB.Id = ow.WriteTree(subB); Core.Tree subC = root.AddTree("sub-c"); subC.AddFile("empty").Id = cFileId2; subC.Id = ow.WriteTree(subC); return ow.WriteTree(root); }; var tw = new GitSharp.Core.TreeWalk.TreeWalk(db); tw.reset(new[] { oldTree.Invoke(), newTree.Invoke() }); tw.Recursive = true; tw.setFilter(TreeFilter.ANY_DIFF); Assert.IsTrue(tw.next()); Assert.AreEqual("sub-b/empty", tw.getPathString()); Assert.AreEqual(FileMode.Missing, tw.getFileMode(0)); Assert.AreEqual(FileMode.RegularFile, tw.getFileMode(1)); Assert.AreEqual(ObjectId.ZeroId, tw.getObjectId(0)); Assert.AreEqual(bFileId, tw.getObjectId(1)); Assert.IsTrue(tw.next()); Assert.AreEqual("sub-c/empty", tw.getPathString()); Assert.AreEqual(FileMode.RegularFile, tw.getFileMode(0)); Assert.AreEqual(FileMode.RegularFile, tw.getFileMode(1)); Assert.AreEqual(cFileId1, tw.getObjectId(0)); Assert.AreEqual(cFileId2, tw.getObjectId(1)); Assert.IsFalse(tw.next()); }
private static void AssertCorrectId(DirCache treeT, GitSharp.Core.TreeWalk.TreeWalk tw) { Assert.AreEqual(treeT.getEntry(tw.getPathString()).getObjectId(), tw.getObjectId(0)); }
public void testMissingSubtree_DetectFileAdded_FileModified() { var ow = new ObjectWriter(db); ObjectId aFileId = ow.WriteBlob(Constants.CHARSET.GetBytes("a")); ObjectId bFileId = ow.WriteBlob(Constants.CHARSET.GetBytes("b")); ObjectId cFileId1 = ow.WriteBlob(Constants.CHARSET.GetBytes("c-1")); ObjectId cFileId2 = ow.WriteBlob(Constants.CHARSET.GetBytes("c-2")); // Create sub-a/empty, sub-c/empty = hello. Func <ObjectId> oldTree = () => { var root = new Core.Tree(db); Core.Tree subA = root.AddTree("sub-a"); subA.AddFile("empty").Id = aFileId; subA.Id = ow.WriteTree(subA); Core.Tree subC = root.AddTree("sub-c"); subC.AddFile("empty").Id = cFileId1; subC.Id = ow.WriteTree(subC); return(ow.WriteTree(root)); }; // Create sub-a/empty, sub-b/empty, sub-c/empty. Func <ObjectId> newTree = () => { var root = new Core.Tree(db); Core.Tree subA = root.AddTree("sub-a"); subA.AddFile("empty").Id = aFileId; subA.Id = ow.WriteTree(subA); Core.Tree subB = root.AddTree("sub-b"); subB.AddFile("empty").Id = bFileId; subB.Id = ow.WriteTree(subB); Core.Tree subC = root.AddTree("sub-c"); subC.AddFile("empty").Id = cFileId2; subC.Id = ow.WriteTree(subC); return(ow.WriteTree(root)); }; var tw = new GitSharp.Core.TreeWalk.TreeWalk(db); tw.reset(new[] { oldTree.Invoke(), newTree.Invoke() }); tw.Recursive = true; tw.setFilter(TreeFilter.ANY_DIFF); Assert.IsTrue(tw.next()); Assert.AreEqual("sub-b/empty", tw.getPathString()); Assert.AreEqual(FileMode.Missing, tw.getFileMode(0)); Assert.AreEqual(FileMode.RegularFile, tw.getFileMode(1)); Assert.AreEqual(ObjectId.ZeroId, tw.getObjectId(0)); Assert.AreEqual(bFileId, tw.getObjectId(1)); Assert.IsTrue(tw.next()); Assert.AreEqual("sub-c/empty", tw.getPathString()); Assert.AreEqual(FileMode.RegularFile, tw.getFileMode(0)); Assert.AreEqual(FileMode.RegularFile, tw.getFileMode(1)); Assert.AreEqual(cFileId1, tw.getObjectId(0)); Assert.AreEqual(cFileId2, tw.getObjectId(1)); Assert.IsFalse(tw.next()); }