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.lib;
45
46 import static org.junit.Assert.assertEquals;
47 import static org.junit.Assert.assertFalse;
48 import static org.junit.Assert.assertNotNull;
49 import static org.junit.Assert.assertNotSame;
50 import static org.junit.Assert.assertSame;
51 import static org.junit.Assert.assertTrue;
52 import static org.junit.Assert.fail;
53
54 import java.io.File;
55 import java.io.IOException;
56
57 import org.eclipse.jgit.errors.RepositoryNotFoundException;
58 import org.eclipse.jgit.junit.RepositoryTestCase;
59 import org.eclipse.jgit.lib.RepositoryCache.FileKey;
60 import org.junit.Test;
61
62 public class RepositoryCacheTest extends RepositoryTestCase {
63 @Test
64 public void testNonBareFileKey() throws IOException {
65 File gitdir = db.getDirectory();
66 File parent = gitdir.getParentFile();
67 File other = new File(parent, "notagit");
68 assertEqualsFile(gitdir, FileKey.exact(gitdir, db.getFS()).getFile());
69 assertEqualsFile(parent, FileKey.exact(parent, db.getFS()).getFile());
70 assertEqualsFile(other, FileKey.exact(other, db.getFS()).getFile());
71
72 assertEqualsFile(gitdir, FileKey.lenient(gitdir, db.getFS()).getFile());
73 assertEqualsFile(gitdir, FileKey.lenient(parent, db.getFS()).getFile());
74 assertEqualsFile(other, FileKey.lenient(other, db.getFS()).getFile());
75 }
76
77 @Test
78 public void testBareFileKey() throws IOException {
79 Repository bare = createBareRepository();
80 File gitdir = bare.getDirectory();
81 File parent = gitdir.getParentFile();
82 String name = gitdir.getName();
83 assertTrue(name.endsWith(".git"));
84 name = name.substring(0, name.length() - 4);
85
86 assertEqualsFile(gitdir, FileKey.exact(gitdir, db.getFS()).getFile());
87
88 assertEqualsFile(gitdir, FileKey.lenient(gitdir, db.getFS()).getFile());
89 assertEqualsFile(gitdir,
90 FileKey.lenient(new File(parent, name), db.getFS()).getFile());
91 }
92
93 @Test
94 public void testFileKeyOpenExisting() throws IOException {
95 Repository r;
96
97 r = new FileKey(db.getDirectory(), db.getFS()).open(true);
98 assertNotNull(r);
99 assertEqualsFile(db.getDirectory(), r.getDirectory());
100 r.close();
101
102 r = new FileKey(db.getDirectory(), db.getFS()).open(false);
103 assertNotNull(r);
104 assertEqualsFile(db.getDirectory(), r.getDirectory());
105 r.close();
106 }
107
108 @Test
109 public void testFileKeyOpenNew() throws IOException {
110 final Repository n = createBareRepository();
111 final File gitdir = n.getDirectory();
112 n.close();
113 recursiveDelete(gitdir);
114 assertFalse(gitdir.exists());
115
116 try {
117 new FileKey(gitdir, db.getFS()).open(true);
118 fail("incorrectly opened a non existant repository");
119 } catch (RepositoryNotFoundException e) {
120 assertEquals("repository not found: " + gitdir.getCanonicalPath(),
121 e.getMessage());
122 }
123
124 final Repository o = new FileKey(gitdir, db.getFS()).open(false);
125 assertNotNull(o);
126 assertEqualsFile(gitdir, o.getDirectory());
127 assertFalse(gitdir.exists());
128 }
129
130 @Test
131 public void testCacheRegisterOpen() throws Exception {
132 final File dir = db.getDirectory();
133 RepositoryCache.register(db);
134 assertSame(db, RepositoryCache.open(FileKey.exact(dir, db.getFS())));
135
136 assertEquals(".git", dir.getName());
137 final File parent = dir.getParentFile();
138 assertSame(db, RepositoryCache.open(FileKey.lenient(parent, db.getFS())));
139 }
140
141 @Test
142 public void testCacheOpen() throws Exception {
143 final FileKey loc = FileKey.exact(db.getDirectory(), db.getFS());
144 final Repository d2 = RepositoryCache.open(loc);
145 assertNotSame(db, d2);
146 assertSame(d2, RepositoryCache.open(FileKey.exact(loc.getFile(), db.getFS())));
147 d2.close();
148 d2.close();
149 }
150 }