1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 package org.eclipse.jgit.treewalk;
45
46 import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
47 import static org.eclipse.jgit.lib.Constants.OBJ_TREE;
48 import static org.eclipse.jgit.lib.Constants.encode;
49 import static org.junit.Assert.assertEquals;
50 import static org.junit.Assert.assertFalse;
51 import static org.junit.Assert.assertTrue;
52
53 import org.eclipse.jgit.junit.RepositoryTestCase;
54 import org.eclipse.jgit.lib.FileMode;
55 import org.eclipse.jgit.lib.ObjectId;
56 import org.eclipse.jgit.lib.ObjectInserter;
57 import org.eclipse.jgit.lib.Tree;
58 import org.eclipse.jgit.treewalk.filter.TreeFilter;
59 import org.junit.Test;
60
61 @SuppressWarnings("deprecation")
62 public class TreeWalkBasicDiffTest extends RepositoryTestCase {
63 @Test
64 public void testMissingSubtree_DetectFileAdded_FileModified()
65 throws Exception {
66 final ObjectId oldTree, newTree, bFileId, cFileId1, cFileId2;
67 try (ObjectInserter inserter = db.newObjectInserter()) {
68 final ObjectId aFileId = inserter.insert(OBJ_BLOB, encode("a"));
69 bFileId = inserter.insert(OBJ_BLOB, encode("b"));
70 cFileId1 = inserter.insert(OBJ_BLOB, encode("c-1"));
71 cFileId2 = inserter.insert(OBJ_BLOB, encode("c-2"));
72
73
74 {
75 final Tree root = new Tree(db);
76 {
77 final Tree subA = root.addTree("sub-a");
78 subA.addFile("empty").setId(aFileId);
79 subA.setId(inserter.insert(OBJ_TREE, subA.format()));
80 }
81 {
82 final Tree subC = root.addTree("sub-c");
83 subC.addFile("empty").setId(cFileId1);
84 subC.setId(inserter.insert(OBJ_TREE, subC.format()));
85 }
86 oldTree = inserter.insert(OBJ_TREE, root.format());
87 }
88
89
90 {
91 final Tree root = new Tree(db);
92 {
93 final Tree subA = root.addTree("sub-a");
94 subA.addFile("empty").setId(aFileId);
95 subA.setId(inserter.insert(OBJ_TREE, subA.format()));
96 }
97 {
98 final Tree subB = root.addTree("sub-b");
99 subB.addFile("empty").setId(bFileId);
100 subB.setId(inserter.insert(OBJ_TREE, subB.format()));
101 }
102 {
103 final Tree subC = root.addTree("sub-c");
104 subC.addFile("empty").setId(cFileId2);
105 subC.setId(inserter.insert(OBJ_TREE, subC.format()));
106 }
107 newTree = inserter.insert(OBJ_TREE, root.format());
108 }
109 inserter.flush();
110 }
111
112 final TreeWalk tw = new TreeWalk(db);
113 tw.reset(oldTree, newTree);
114 tw.setRecursive(true);
115 tw.setFilter(TreeFilter.ANY_DIFF);
116
117 assertTrue(tw.next());
118 assertEquals("sub-b/empty", tw.getPathString());
119 assertEquals(FileMode.MISSING, tw.getFileMode(0));
120 assertEquals(FileMode.REGULAR_FILE, tw.getFileMode(1));
121 assertEquals(ObjectId.zeroId(), tw.getObjectId(0));
122 assertEquals(bFileId, tw.getObjectId(1));
123
124 assertTrue(tw.next());
125 assertEquals("sub-c/empty", tw.getPathString());
126 assertEquals(FileMode.REGULAR_FILE, tw.getFileMode(0));
127 assertEquals(FileMode.REGULAR_FILE, tw.getFileMode(1));
128 assertEquals(cFileId1, tw.getObjectId(0));
129 assertEquals(cFileId2, tw.getObjectId(1));
130
131 assertFalse(tw.next());
132 }
133 }