Add tagopt parsing support to RemoteConfig
[egit/zawir.git] / org.spearce.jgit.test / tst / org / spearce / jgit / transport / RemoteConfigTest.java
blobf9a5ae446ed0098c06cd9c40bb97537c1db211c0
1 /*
2 * Copyright (C) 2008 Shawn Pearce <spearce@spearce.org>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License, version 2, as published by the Free Software Foundation.
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public
14 * License along with this library; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
17 package org.spearce.jgit.transport;
19 import java.io.File;
20 import java.io.FileNotFoundException;
21 import java.io.FileOutputStream;
22 import java.io.IOException;
23 import java.io.UnsupportedEncodingException;
24 import java.util.List;
26 import org.spearce.jgit.lib.RepositoryTestCase;
28 public class RemoteConfigTest extends RepositoryTestCase {
29 private void writeConfig(final String dat) throws FileNotFoundException,
30 IOException, UnsupportedEncodingException {
31 final File file = new File(db.getDirectory(), "config");
32 final FileOutputStream stream = new FileOutputStream(file, true);
33 try {
34 stream.write(dat.getBytes("UTF-8"));
35 } finally {
36 stream.close();
38 db.getConfig().load();
41 private static void assertEquals(final String exp, final URIish act) {
42 assertEquals(exp, act != null ? act.toString() : null);
45 public void testSimple() throws Exception {
46 writeConfig("[remote \"spearce\"]\n"
47 + "url = http://www.spearce.org/egit.git\n"
48 + "fetch = +refs/heads/*:refs/remotes/spearce/*\n");
50 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
51 final List<URIish> allURIs = rc.getURIs();
52 RefSpec spec;
54 assertEquals("spearce", rc.getName());
55 assertNotNull(allURIs);
56 assertNotNull(rc.getFetchRefSpecs());
57 assertNotNull(rc.getPushRefSpecs());
58 assertNotNull(rc.getTagOpt());
59 assertSame(TagOpt.AUTO_FOLLOW, rc.getTagOpt());
61 assertEquals(1, allURIs.size());
62 assertEquals("http://www.spearce.org/egit.git", allURIs.get(0));
64 assertEquals(1, rc.getFetchRefSpecs().size());
65 spec = rc.getFetchRefSpecs().get(0);
66 assertTrue(spec.isForceUpdate());
67 assertTrue(spec.isWildcard());
68 assertEquals("refs/heads/*", spec.getSource());
69 assertEquals("refs/remotes/spearce/*", spec.getDestination());
71 assertEquals(0, rc.getPushRefSpecs().size());
74 public void testSimpleNoTags() throws Exception {
75 writeConfig("[remote \"spearce\"]\n"
76 + "url = http://www.spearce.org/egit.git\n"
77 + "fetch = +refs/heads/*:refs/remotes/spearce/*\n"
78 + "tagopt = --no-tags\n");
79 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
80 assertSame(TagOpt.NO_TAGS, rc.getTagOpt());
83 public void testSimpleAlwaysTags() throws Exception {
84 writeConfig("[remote \"spearce\"]\n"
85 + "url = http://www.spearce.org/egit.git\n"
86 + "fetch = +refs/heads/*:refs/remotes/spearce/*\n"
87 + "tagopt = --tags\n");
88 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
89 assertSame(TagOpt.FETCH_TAGS, rc.getTagOpt());
92 public void testMirror() throws Exception {
93 writeConfig("[remote \"spearce\"]\n"
94 + "url = http://www.spearce.org/egit.git\n"
95 + "fetch = +refs/heads/*:refs/heads/*\n"
96 + "fetch = refs/tags/*:refs/tags/*\n");
98 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
99 final List<URIish> allURIs = rc.getURIs();
100 RefSpec spec;
102 assertEquals("spearce", rc.getName());
103 assertNotNull(allURIs);
104 assertNotNull(rc.getFetchRefSpecs());
105 assertNotNull(rc.getPushRefSpecs());
107 assertEquals(1, allURIs.size());
108 assertEquals("http://www.spearce.org/egit.git", allURIs.get(0));
110 assertEquals(2, rc.getFetchRefSpecs().size());
112 spec = rc.getFetchRefSpecs().get(0);
113 assertTrue(spec.isForceUpdate());
114 assertTrue(spec.isWildcard());
115 assertEquals("refs/heads/*", spec.getSource());
116 assertEquals("refs/heads/*", spec.getDestination());
118 spec = rc.getFetchRefSpecs().get(1);
119 assertFalse(spec.isForceUpdate());
120 assertTrue(spec.isWildcard());
121 assertEquals("refs/tags/*", spec.getSource());
122 assertEquals("refs/tags/*", spec.getDestination());
124 assertEquals(0, rc.getPushRefSpecs().size());
127 public void testBackup() throws Exception {
128 writeConfig("[remote \"backup\"]\n"
129 + "url = http://www.spearce.org/egit.git\n"
130 + "url = user@repo.or.cz:/srv/git/egit.git\n"
131 + "push = +refs/heads/*:refs/heads/*\n"
132 + "push = refs/tags/*:refs/tags/*\n");
134 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
135 final List<URIish> allURIs = rc.getURIs();
136 RefSpec spec;
138 assertEquals("backup", rc.getName());
139 assertNotNull(allURIs);
140 assertNotNull(rc.getFetchRefSpecs());
141 assertNotNull(rc.getPushRefSpecs());
143 assertEquals(2, allURIs.size());
144 assertEquals("http://www.spearce.org/egit.git", allURIs.get(0));
145 assertEquals("user@repo.or.cz:/srv/git/egit.git", allURIs.get(1));
147 assertEquals(0, rc.getFetchRefSpecs().size());
149 assertEquals(2, rc.getPushRefSpecs().size());
150 spec = rc.getPushRefSpecs().get(0);
151 assertTrue(spec.isForceUpdate());
152 assertTrue(spec.isWildcard());
153 assertEquals("refs/heads/*", spec.getSource());
154 assertEquals("refs/heads/*", spec.getDestination());
156 spec = rc.getPushRefSpecs().get(1);
157 assertFalse(spec.isForceUpdate());
158 assertTrue(spec.isWildcard());
159 assertEquals("refs/tags/*", spec.getSource());
160 assertEquals("refs/tags/*", spec.getDestination());
163 public void testUploadPack() throws Exception {
164 writeConfig("[remote \"example\"]\n"
165 + "url = user@example.com:egit.git\n"
166 + "fetch = +refs/heads/*:refs/remotes/example/*\n"
167 + "uploadpack = /path/to/git/git-upload-pack\n"
168 + "receivepack = /path/to/git/git-receive-pack\n");
170 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "example");
171 final List<URIish> allURIs = rc.getURIs();
172 RefSpec spec;
174 assertEquals("example", rc.getName());
175 assertNotNull(allURIs);
176 assertNotNull(rc.getFetchRefSpecs());
177 assertNotNull(rc.getPushRefSpecs());
179 assertEquals(1, allURIs.size());
180 assertEquals("user@example.com:egit.git", allURIs.get(0));
182 assertEquals(1, rc.getFetchRefSpecs().size());
183 spec = rc.getFetchRefSpecs().get(0);
184 assertTrue(spec.isForceUpdate());
185 assertTrue(spec.isWildcard());
186 assertEquals("refs/heads/*", spec.getSource());
187 assertEquals("refs/remotes/example/*", spec.getDestination());
189 assertEquals(0, rc.getPushRefSpecs().size());
191 assertEquals("/path/to/git/git-upload-pack", rc.getUploadPack());
192 assertEquals("/path/to/git/git-receive-pack", rc.getReceivePack());
195 public void testUnknown() throws Exception {
196 writeConfig("");
198 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
199 assertEquals(0, rc.getURIs().size());
200 assertEquals(0, rc.getFetchRefSpecs().size());
201 assertEquals(0, rc.getPushRefSpecs().size());
202 assertEquals("git-upload-pack", rc.getUploadPack());
203 assertEquals("git-receive-pack", rc.getReceivePack());
206 public void testAddURI() throws Exception {
207 writeConfig("");
209 final URIish uri = new URIish("/some/dir");
210 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
211 assertEquals(0, rc.getURIs().size());
213 assertTrue(rc.addURI(uri));
214 assertEquals(1, rc.getURIs().size());
215 assertSame(uri, rc.getURIs().get(0));
217 assertFalse(rc.addURI(new URIish(uri.toString())));
218 assertEquals(1, rc.getURIs().size());
221 public void testRemoveFirstURI() throws Exception {
222 writeConfig("");
224 final URIish a = new URIish("/some/dir");
225 final URIish b = new URIish("/another/dir");
226 final URIish c = new URIish("/more/dirs");
227 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
228 assertTrue(rc.addURI(a));
229 assertTrue(rc.addURI(b));
230 assertTrue(rc.addURI(c));
232 assertEquals(3, rc.getURIs().size());
233 assertSame(a, rc.getURIs().get(0));
234 assertSame(b, rc.getURIs().get(1));
235 assertSame(c, rc.getURIs().get(2));
237 assertTrue(rc.removeURI(a));
238 assertEquals(2, rc.getURIs().size());
239 assertSame(b, rc.getURIs().get(0));
240 assertSame(c, rc.getURIs().get(1));
243 public void testRemoveMiddleURI() throws Exception {
244 writeConfig("");
246 final URIish a = new URIish("/some/dir");
247 final URIish b = new URIish("/another/dir");
248 final URIish c = new URIish("/more/dirs");
249 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
250 assertTrue(rc.addURI(a));
251 assertTrue(rc.addURI(b));
252 assertTrue(rc.addURI(c));
254 assertEquals(3, rc.getURIs().size());
255 assertSame(a, rc.getURIs().get(0));
256 assertSame(b, rc.getURIs().get(1));
257 assertSame(c, rc.getURIs().get(2));
259 assertTrue(rc.removeURI(b));
260 assertEquals(2, rc.getURIs().size());
261 assertSame(a, rc.getURIs().get(0));
262 assertSame(c, rc.getURIs().get(1));
265 public void testRemoveLastURI() throws Exception {
266 writeConfig("");
268 final URIish a = new URIish("/some/dir");
269 final URIish b = new URIish("/another/dir");
270 final URIish c = new URIish("/more/dirs");
271 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
272 assertTrue(rc.addURI(a));
273 assertTrue(rc.addURI(b));
274 assertTrue(rc.addURI(c));
276 assertEquals(3, rc.getURIs().size());
277 assertSame(a, rc.getURIs().get(0));
278 assertSame(b, rc.getURIs().get(1));
279 assertSame(c, rc.getURIs().get(2));
281 assertTrue(rc.removeURI(c));
282 assertEquals(2, rc.getURIs().size());
283 assertSame(a, rc.getURIs().get(0));
284 assertSame(b, rc.getURIs().get(1));
287 public void testRemoveOnlyURI() throws Exception {
288 writeConfig("");
290 final URIish a = new URIish("/some/dir");
291 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "backup");
292 assertTrue(rc.addURI(a));
294 assertEquals(1, rc.getURIs().size());
295 assertSame(a, rc.getURIs().get(0));
297 assertTrue(rc.removeURI(a));
298 assertEquals(0, rc.getURIs().size());
301 public void testCreateOrigin() throws Exception {
302 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "origin");
303 rc.addURI(new URIish("/some/dir"));
304 rc.addFetchRefSpec(new RefSpec("+refs/heads/*:refs/remotes/"
305 + rc.getName() + "/*"));
306 rc.update(db.getConfig());
307 db.getConfig().save();
309 checkFile(new File(db.getDirectory(), "config"), "[core]\n"
310 + "\trepositoryformatversion = 0\n" + "\tfilemode = true\n"
311 + "[remote \"origin\"]\n" + "\turl = /some/dir\n"
312 + "\tfetch = +refs/heads/*:refs/remotes/origin/*\n");
315 public void testSaveAddURI() throws Exception {
316 writeConfig("[remote \"spearce\"]\n"
317 + "url = http://www.spearce.org/egit.git\n"
318 + "fetch = +refs/heads/*:refs/remotes/spearce/*\n");
320 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
321 rc.addURI(new URIish("/some/dir"));
322 assertEquals(2, rc.getURIs().size());
323 rc.update(db.getConfig());
324 db.getConfig().save();
326 checkFile(new File(db.getDirectory(), "config"), "[core]\n"
327 + "\trepositoryformatversion = 0\n" + "\tfilemode = true\n"
328 + "[remote \"spearce\"]\n"
329 + "\turl = http://www.spearce.org/egit.git\n"
330 + "\turl = /some/dir\n"
331 + "\tfetch = +refs/heads/*:refs/remotes/spearce/*\n");
334 public void testSaveRemoveLastURI() throws Exception {
335 writeConfig("[remote \"spearce\"]\n"
336 + "url = http://www.spearce.org/egit.git\n"
337 + "url = /some/dir\n"
338 + "fetch = +refs/heads/*:refs/remotes/spearce/*\n");
340 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
341 assertEquals(2, rc.getURIs().size());
342 rc.removeURI(new URIish("/some/dir"));
343 assertEquals(1, rc.getURIs().size());
344 rc.update(db.getConfig());
345 db.getConfig().save();
347 checkFile(new File(db.getDirectory(), "config"), "[core]\n"
348 + "\trepositoryformatversion = 0\n" + "\tfilemode = true\n"
349 + "[remote \"spearce\"]\n"
350 + "\turl = http://www.spearce.org/egit.git\n"
351 + "\tfetch = +refs/heads/*:refs/remotes/spearce/*\n");
354 public void testSaveRemoveFirstURI() throws Exception {
355 writeConfig("[remote \"spearce\"]\n"
356 + "url = http://www.spearce.org/egit.git\n"
357 + "url = /some/dir\n"
358 + "fetch = +refs/heads/*:refs/remotes/spearce/*\n");
360 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "spearce");
361 assertEquals(2, rc.getURIs().size());
362 rc.removeURI(new URIish("http://www.spearce.org/egit.git"));
363 assertEquals(1, rc.getURIs().size());
364 rc.update(db.getConfig());
365 db.getConfig().save();
367 checkFile(new File(db.getDirectory(), "config"), "[core]\n"
368 + "\trepositoryformatversion = 0\n" + "\tfilemode = true\n"
369 + "[remote \"spearce\"]\n" + "\turl = /some/dir\n"
370 + "\tfetch = +refs/heads/*:refs/remotes/spearce/*\n");
373 public void testSaveNoTags() throws Exception {
374 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "origin");
375 rc.addURI(new URIish("/some/dir"));
376 rc.addFetchRefSpec(new RefSpec("+refs/heads/*:refs/remotes/"
377 + rc.getName() + "/*"));
378 rc.setTagOpt(TagOpt.NO_TAGS);
379 rc.update(db.getConfig());
380 db.getConfig().save();
382 checkFile(new File(db.getDirectory(), "config"), "[core]\n"
383 + "\trepositoryformatversion = 0\n" + "\tfilemode = true\n"
384 + "[remote \"origin\"]\n" + "\turl = /some/dir\n"
385 + "\tfetch = +refs/heads/*:refs/remotes/origin/*\n"
386 + "\ttagopt = --no-tags\n");
389 public void testSaveAllTags() throws Exception {
390 final RemoteConfig rc = new RemoteConfig(db.getConfig(), "origin");
391 rc.addURI(new URIish("/some/dir"));
392 rc.addFetchRefSpec(new RefSpec("+refs/heads/*:refs/remotes/"
393 + rc.getName() + "/*"));
394 rc.setTagOpt(TagOpt.FETCH_TAGS);
395 rc.update(db.getConfig());
396 db.getConfig().save();
398 checkFile(new File(db.getDirectory(), "config"), "[core]\n"
399 + "\trepositoryformatversion = 0\n" + "\tfilemode = true\n"
400 + "[remote \"origin\"]\n" + "\turl = /some/dir\n"
401 + "\tfetch = +refs/heads/*:refs/remotes/origin/*\n"
402 + "\ttagopt = --tags\n");