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
;
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);
34 stream
.write(dat
.getBytes("UTF-8"));
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();
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();
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();
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();
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
{
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
{
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
{
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
{
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
{
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
{
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");