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.internal.storage.file;
45
46 import static java.nio.charset.StandardCharsets.UTF_8;
47 import static org.junit.Assert.assertEquals;
48 import static org.junit.Assert.assertNotNull;
49 import static org.junit.Assert.assertTrue;
50 import static org.junit.Assert.fail;
51
52 import java.io.BufferedWriter;
53 import java.io.File;
54 import java.io.IOException;
55 import java.nio.file.Files;
56
57 import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase;
58 import org.eclipse.jgit.lib.ConfigConstants;
59 import org.eclipse.jgit.lib.Constants;
60 import org.eclipse.jgit.lib.Repository;
61 import org.eclipse.jgit.lib.StoredConfig;
62 import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
63 import org.eclipse.jgit.util.FileUtils;
64 import org.junit.Test;
65
66 public class FileRepositoryBuilderTest extends LocalDiskRepositoryTestCase {
67 @Test
68 public void testShouldAutomagicallyDetectGitDirectory() throws Exception {
69 Repository r = createWorkRepository();
70 File d = new File(r.getDirectory(), "sub-dir");
71 FileUtils.mkdir(d);
72
73 assertEquals(r.getDirectory(), new FileRepositoryBuilder()
74 .findGitDir(d).getGitDir());
75 }
76
77 @Test
78 public void emptyRepositoryFormatVersion() throws Exception {
79 Repository r = createWorkRepository();
80 StoredConfig config = r.getConfig();
81 config.setString(ConfigConstants.CONFIG_CORE_SECTION, null,
82 ConfigConstants.CONFIG_KEY_REPO_FORMAT_VERSION, "");
83 config.save();
84
85 try (FileRepository repo = new FileRepository(r.getDirectory())) {
86
87 }
88 }
89
90 @Test
91 public void invalidRepositoryFormatVersion() throws Exception {
92 Repository r = createWorkRepository();
93 StoredConfig config = r.getConfig();
94 config.setString(ConfigConstants.CONFIG_CORE_SECTION, null,
95 ConfigConstants.CONFIG_KEY_REPO_FORMAT_VERSION, "notanumber");
96 config.save();
97
98 try (FileRepository repo = new FileRepository(r.getDirectory())) {
99 fail("IllegalArgumentException not thrown");
100 } catch (IllegalArgumentException e) {
101 assertNotNull(e.getMessage());
102 }
103 }
104
105 @Test
106 public void unknownRepositoryFormatVersion() throws Exception {
107 Repository r = createWorkRepository();
108 StoredConfig config = r.getConfig();
109 config.setLong(ConfigConstants.CONFIG_CORE_SECTION, null,
110 ConfigConstants.CONFIG_KEY_REPO_FORMAT_VERSION, 999999);
111 config.save();
112
113 try (FileRepository repo = new FileRepository(r.getDirectory())) {
114 fail("IOException not thrown");
115 } catch (IOException e) {
116 assertNotNull(e.getMessage());
117 }
118 }
119
120 @Test
121 public void absoluteGitDirRef() throws Exception {
122 Repository repo1 = createWorkRepository();
123 File dir = createTempDirectory("dir");
124 File dotGit = new File(dir, Constants.DOT_GIT);
125 try (BufferedWriter writer = Files.newBufferedWriter(dotGit.toPath(),
126 UTF_8)) {
127 writer.append("gitdir: " + repo1.getDirectory().getAbsolutePath());
128 }
129 FileRepositoryBuilder builder = new FileRepositoryBuilder();
130
131 builder.setWorkTree(dir);
132 builder.setMustExist(true);
133 Repository repo2 = builder.build();
134
135 assertEquals(repo1.getDirectory().getAbsolutePath(),
136 repo2.getDirectory().getAbsolutePath());
137 assertEquals(dir, repo2.getWorkTree());
138 }
139
140 @Test
141 public void relativeGitDirRef() throws Exception {
142 Repository repo1 = createWorkRepository();
143 File dir = new File(repo1.getWorkTree(), "dir");
144 assertTrue(dir.mkdir());
145 File dotGit = new File(dir, Constants.DOT_GIT);
146 try (BufferedWriter writer = Files.newBufferedWriter(dotGit.toPath(),
147 UTF_8)) {
148 writer.append("gitdir: ../" + Constants.DOT_GIT);
149 }
150 FileRepositoryBuilder builder = new FileRepositoryBuilder();
151 builder.setWorkTree(dir);
152 builder.setMustExist(true);
153 Repository repo2 = builder.build();
154
155
156
157 assertEquals(repo1.getDirectory().getCanonicalPath(),
158 repo2.getDirectory().getCanonicalPath());
159 assertEquals(dir, repo2.getWorkTree());
160 }
161
162 @Test
163 public void scanWithGitDirRef() throws Exception {
164 Repository repo1 = createWorkRepository();
165 File dir = createTempDirectory("dir");
166 File dotGit = new File(dir, Constants.DOT_GIT);
167 try (BufferedWriter writer = Files.newBufferedWriter(dotGit.toPath(),
168 UTF_8)) {
169 writer.append(
170 "gitdir: " + repo1.getDirectory().getAbsolutePath());
171 }
172 FileRepositoryBuilder builder = new FileRepositoryBuilder();
173
174 builder.setWorkTree(dir);
175 builder.findGitDir(dir);
176 assertEquals(repo1.getDirectory().getAbsolutePath(),
177 builder.getGitDir().getAbsolutePath());
178 builder.setMustExist(true);
179 Repository repo2 = builder.build();
180
181
182 assertEquals(repo1.getDirectory().getCanonicalPath(),
183 repo2.getDirectory().getCanonicalPath());
184 assertEquals(dir, repo2.getWorkTree());
185 }
186 }