View Javadoc
1   /*
2    * Copyright (C) 2012, Markus Duft <markus.duft@salomon.at>
3    * and other copyright owners as documented in the project's IP log.
4    *
5    * This program and the accompanying materials are made available under the
6    * terms of the Eclipse Distribution License v1.0 which accompanies this
7    * distribution, is reproduced below, and is available at
8    * http://www.eclipse.org/org/documents/edl-v10.php
9    *
10   * All rights reserved.
11   *
12   * Redistribution and use in source and binary forms, with or without
13   * modification, are permitted provided that the following conditions are met:
14   *
15   * - Redistributions of source code must retain the above copyright notice, this
16   * list of conditions and the following disclaimer.
17   *
18   * - Redistributions in binary form must reproduce the above copyright notice,
19   * this list of conditions and the following disclaimer in the documentation
20   * and/or other materials provided with the distribution.
21   *
22   * - Neither the name of the Eclipse Foundation, Inc. nor the names of its
23   * contributors may be used to endorse or promote products derived from this
24   * software without specific prior written permission.
25   *
26   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
30   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36   * POSSIBILITY OF SUCH DAMAGE.
37   */
38  package org.eclipse.jgit.lib;
39  
40  import static org.junit.Assert.assertTrue;
41  
42  import org.eclipse.jgit.api.Git;
43  import org.eclipse.jgit.dircache.DirCache;
44  import org.eclipse.jgit.dircache.DirCacheEntry;
45  import org.eclipse.jgit.junit.RepositoryTestCase;
46  import org.junit.Test;
47  
48  public class IndexModificationTimesTest extends RepositoryTestCase {
49  
50  	@Test
51  	public void testLastModifiedTimes() throws Exception {
52  		Git git = new Git(db);
53  		String path = "file";
54  		writeTrashFile(path, "content");
55  		String path2 = "file2";
56  		writeTrashFile(path2, "content2");
57  
58  		git.add().addFilepattern(path).call();
59  		git.add().addFilepattern(path2).call();
60  		git.commit().setMessage("commit").call();
61  
62  		DirCache dc = db.readDirCache();
63  		DirCacheEntry entry = dc.getEntry(path);
64  		DirCacheEntry entry2 = dc.getEntry(path);
65  
66  		assertTrue("last modified shall not be zero!",
67  				entry.getLastModified() != 0);
68  
69  		assertTrue("last modified shall not be zero!",
70  				entry2.getLastModified() != 0);
71  
72  		writeTrashFile(path, "new content");
73  		git.add().addFilepattern(path).call();
74  		git.commit().setMessage("commit2").call();
75  
76  		dc = db.readDirCache();
77  		entry = dc.getEntry(path);
78  		entry2 = dc.getEntry(path);
79  
80  		assertTrue("last modified shall not be zero!",
81  				entry.getLastModified() != 0);
82  
83  		assertTrue("last modified shall not be zero!",
84  				entry2.getLastModified() != 0);
85  	}
86  
87  	@Test
88  	public void testModify() throws Exception {
89  		Git git = new Git(db);
90  		String path = "file";
91  		writeTrashFile(path, "content");
92  
93  		git.add().addFilepattern(path).call();
94  		git.commit().setMessage("commit").call();
95  
96  		DirCache dc = db.readDirCache();
97  		DirCacheEntry entry = dc.getEntry(path);
98  
99  		long masterLastMod = entry.getLastModified();
100 
101 		git.checkout().setCreateBranch(true).setName("side").call();
102 
103 		Thread.sleep(10);
104 		String path2 = "file2";
105 		writeTrashFile(path2, "side content");
106 		git.add().addFilepattern(path2).call();
107 		git.commit().setMessage("commit").call();
108 
109 		dc = db.readDirCache();
110 		entry = dc.getEntry(path);
111 
112 		long sideLastMode = entry.getLastModified();
113 
114 		Thread.sleep(2000);
115 
116 		writeTrashFile(path, "uncommitted content");
117 		git.checkout().setName("master").call();
118 
119 		dc = db.readDirCache();
120 		entry = dc.getEntry(path);
121 
122 		assertTrue("shall have equal mod time!", masterLastMod == sideLastMode);
123 		assertTrue("shall not equal master timestamp!",
124 				entry.getLastModified() == masterLastMod);
125 
126 	}
127 
128 }