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.encode;
48 import static org.junit.Assert.assertEquals;
49 import static org.junit.Assert.assertFalse;
50 import static org.junit.Assert.assertTrue;
51
52 import org.eclipse.jgit.junit.RepositoryTestCase;
53 import org.eclipse.jgit.lib.FileMode;
54 import org.eclipse.jgit.lib.ObjectId;
55 import org.eclipse.jgit.lib.ObjectInserter;
56 import org.eclipse.jgit.lib.TreeFormatter;
57 import org.eclipse.jgit.treewalk.filter.TreeFilter;
58 import org.junit.Test;
59
60 public class TreeWalkBasicDiffTest extends RepositoryTestCase {
61 @Test
62 public void testMissingSubtree_DetectFileAdded_FileModified()
63 throws Exception {
64 final ObjectId oldTree, newTree, bFileId, cFileId1, cFileId2;
65 try (ObjectInserter inserter = db.newObjectInserter()) {
66 final ObjectId aFileId = inserter.insert(OBJ_BLOB, encode("a"));
67 bFileId = inserter.insert(OBJ_BLOB, encode("b"));
68 cFileId1 = inserter.insert(OBJ_BLOB, encode("c-1"));
69 cFileId2 = inserter.insert(OBJ_BLOB, encode("c-2"));
70
71
72 {
73 TreeFormatter root = new TreeFormatter();
74 {
75 TreeFormatter subA = new TreeFormatter();
76 subA.append("empty", FileMode.REGULAR_FILE, aFileId);
77 root.append("sub-a", FileMode.TREE, inserter.insert(subA));
78 }
79 {
80 TreeFormatter subC = new TreeFormatter();
81 subC.append("empty", FileMode.REGULAR_FILE, cFileId1);
82 root.append("sub-c", FileMode.TREE, inserter.insert(subC));
83 }
84 oldTree = inserter.insert(root);
85 }
86
87
88 {
89 TreeFormatter root = new TreeFormatter();
90 {
91 TreeFormatter subA = new TreeFormatter();
92 subA.append("empty", FileMode.REGULAR_FILE, aFileId);
93 root.append("sub-a", FileMode.TREE, inserter.insert(subA));
94 }
95 {
96 TreeFormatter subB = new TreeFormatter();
97 subB.append("empty", FileMode.REGULAR_FILE, bFileId);
98 root.append("sub-b", FileMode.TREE, inserter.insert(subB));
99 }
100 {
101 TreeFormatter subC = new TreeFormatter();
102 subC.append("empty", FileMode.REGULAR_FILE, cFileId2);
103 root.append("sub-c", FileMode.TREE, inserter.insert(subC));
104 }
105 newTree = inserter.insert(root);
106 }
107 inserter.flush();
108 }
109
110 try (TreeWalk tw = new TreeWalk(db)) {
111 tw.reset(oldTree, newTree);
112 tw.setRecursive(true);
113 tw.setFilter(TreeFilter.ANY_DIFF);
114
115 assertTrue(tw.next());
116 assertEquals("sub-b/empty", tw.getPathString());
117 assertEquals(FileMode.MISSING, tw.getFileMode(0));
118 assertEquals(FileMode.REGULAR_FILE, tw.getFileMode(1));
119 assertEquals(ObjectId.zeroId(), tw.getObjectId(0));
120 assertEquals(bFileId, tw.getObjectId(1));
121
122 assertTrue(tw.next());
123 assertEquals("sub-c/empty", tw.getPathString());
124 assertEquals(FileMode.REGULAR_FILE, tw.getFileMode(0));
125 assertEquals(FileMode.REGULAR_FILE, tw.getFileMode(1));
126 assertEquals(cFileId1, tw.getObjectId(0));
127 assertEquals(cFileId2, tw.getObjectId(1));
128
129 assertFalse(tw.next());
130 }
131 }
132 }