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 package org.eclipse.jgit.lib;
39
40 import static java.time.Instant.EPOCH;
41 import static org.junit.Assert.assertFalse;
42 import static org.junit.Assert.assertTrue;
43
44 import java.time.Instant;
45
46 import org.eclipse.jgit.api.Git;
47 import org.eclipse.jgit.dircache.DirCache;
48 import org.eclipse.jgit.dircache.DirCacheEntry;
49 import org.eclipse.jgit.junit.RepositoryTestCase;
50 import org.junit.Test;
51
52 public class IndexModificationTimesTest extends RepositoryTestCase {
53
54 @Test
55 public void testLastModifiedTimes() throws Exception {
56 try (Git git = new Git(db)) {
57 String path = "file";
58 writeTrashFile(path, "content");
59 String path2 = "file2";
60 writeTrashFile(path2, "content2");
61
62 git.add().addFilepattern(path).call();
63 git.add().addFilepattern(path2).call();
64 git.commit().setMessage("commit").call();
65
66 DirCache dc = db.readDirCache();
67 DirCacheEntry entry = dc.getEntry(path);
68 DirCacheEntry entry2 = dc.getEntry(path);
69
70 assertFalse("last modified shall not be the epoch!",
71 entry.getLastModifiedInstant().equals(EPOCH));
72
73 assertFalse("last modified shall not be the epoch!",
74 entry2.getLastModifiedInstant().equals(EPOCH));
75
76 writeTrashFile(path, "new content");
77 git.add().addFilepattern(path).call();
78 git.commit().setMessage("commit2").call();
79
80 dc = db.readDirCache();
81 entry = dc.getEntry(path);
82 entry2 = dc.getEntry(path);
83
84 assertFalse("last modified shall not be the epoch!",
85 entry.getLastModifiedInstant().equals(EPOCH));
86
87 assertFalse("last modified shall not be the epoch!",
88 entry2.getLastModifiedInstant().equals(EPOCH));
89 }
90 }
91
92 @Test
93 public void testModify() throws Exception {
94 try (Git git = new Git(db)) {
95 String path = "file";
96 writeTrashFile(path, "content");
97
98 git.add().addFilepattern(path).call();
99 git.commit().setMessage("commit").call();
100
101 DirCache dc = db.readDirCache();
102 DirCacheEntry entry = dc.getEntry(path);
103
104 Instant masterLastMod = entry.getLastModifiedInstant();
105
106 git.checkout().setCreateBranch(true).setName("side").call();
107
108 Thread.sleep(10);
109 String path2 = "file2";
110 writeTrashFile(path2, "side content");
111 git.add().addFilepattern(path2).call();
112 git.commit().setMessage("commit").call();
113
114 dc = db.readDirCache();
115 entry = dc.getEntry(path);
116
117 Instant sideLastMod = entry.getLastModifiedInstant();
118
119 Thread.sleep(2000);
120
121 writeTrashFile(path, "uncommitted content");
122 git.checkout().setName("master").call();
123
124 dc = db.readDirCache();
125 entry = dc.getEntry(path);
126
127 assertTrue("shall have equal mod time!",
128 masterLastMod.equals(sideLastMod));
129 assertTrue("shall have equal master timestamp!",
130 entry.getLastModifiedInstant().equals(masterLastMod));
131 }
132 }
133
134 }