diff options
Diffstat (limited to 'org.eclipse.jgit.test/tst/org/eclipse')
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/gitrepo/RepoCommandTest.java | 124 |
1 files changed, 118 insertions, 6 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/gitrepo/RepoCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/gitrepo/RepoCommandTest.java index 66067fc9ab..9fc59c578e 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/gitrepo/RepoCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/gitrepo/RepoCommandTest.java @@ -43,6 +43,7 @@ package org.eclipse.jgit.gitrepo; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.BufferedReader; @@ -57,16 +58,45 @@ import org.junit.Test; public class RepoCommandTest extends RepositoryTestCase { - private Repository remoteDb; + private Repository defaultDb; + private Repository notDefaultDb; + private Repository groupADb; + private Repository groupBDb; + + private String rootUri; + private String defaultUri; + private String notDefaultUri; + private String groupAUri; + private String groupBUri; public void setUp() throws Exception { super.setUp(); - remoteDb = createWorkRepository(); - Git git = new Git(remoteDb); - JGitTestUtil.writeTrashFile(remoteDb, "hello.txt", "world"); + defaultDb = createWorkRepository(); + Git git = new Git(defaultDb); + JGitTestUtil.writeTrashFile(defaultDb, "hello.txt", "world"); git.add().addFilepattern("hello.txt").call(); git.commit().setMessage("Initial commit").call(); + + notDefaultDb = createWorkRepository(); + git = new Git(notDefaultDb); + JGitTestUtil.writeTrashFile(notDefaultDb, "world.txt", "hello"); + git.add().addFilepattern("world.txt").call(); + git.commit().setMessage("Initial commit").call(); + + groupADb = createWorkRepository(); + git = new Git(groupADb); + JGitTestUtil.writeTrashFile(groupADb, "a.txt", "world"); + git.add().addFilepattern("a.txt").call(); + git.commit().setMessage("Initial commit").call(); + + groupBDb = createWorkRepository(); + git = new Git(groupBDb); + JGitTestUtil.writeTrashFile(groupBDb, "b.txt", "world"); + git.add().addFilepattern("b.txt").call(); + git.commit().setMessage("Initial commit").call(); + + resolveRelativeUris(); } @Test @@ -76,12 +106,14 @@ public class RepoCommandTest extends RepositoryTestCase { .append("<manifest>") .append("<remote name=\"remote1\" fetch=\".\" />") .append("<default revision=\"master\" remote=\"remote1\" />") - .append("<project path=\"foo\" name=\".\" />") + .append("<project path=\"foo\" name=\"") + .append(defaultUri) + .append("\" />") .append("</manifest>"); writeTrashFile("manifest.xml", xmlContent.toString()); RepoCommand command = new RepoCommand(db); command.setPath(db.getWorkTree().getAbsolutePath() + "/manifest.xml") - .setURI(remoteDb.getDirectory().toURI().toString()) + .setURI(rootUri) .call(); File hello = new File(db.getWorkTree(), "foo/hello.txt"); assertTrue("submodule was checked out", hello.exists()); @@ -90,4 +122,84 @@ public class RepoCommandTest extends RepositoryTestCase { reader.close(); assertEquals("submodule content is as expected.", "world", content); } + + @Test + public void testRepoManifestGroups() throws Exception { + StringBuilder xmlContent = new StringBuilder(); + xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n") + .append("<manifest>") + .append("<remote name=\"remote1\" fetch=\".\" />") + .append("<default revision=\"master\" remote=\"remote1\" />") + .append("<project path=\"foo\" name=\"") + .append(defaultUri) + .append("\" groups=\"a,test\" />") + .append("<project path=\"bar\" name=\"") + .append(notDefaultUri) + .append("\" groups=\"notdefault\" />") + .append("<project path=\"a\" name=\"") + .append(groupAUri) + .append("\" groups=\"a\" />") + .append("<project path=\"b\" name=\"") + .append(groupBUri) + .append("\" groups=\"b\" />") + .append("</manifest>"); + + // default should have foo, a & b + Repository localDb = createWorkRepository(); + JGitTestUtil.writeTrashFile(localDb, "manifest.xml", xmlContent.toString()); + RepoCommand command = new RepoCommand(localDb); + command.setPath(localDb.getWorkTree().getAbsolutePath() + "/manifest.xml") + .setURI(rootUri) + .call(); + File file = new File(localDb.getWorkTree(), "foo/hello.txt"); + assertTrue("default has foo", file.exists()); + file = new File(localDb.getWorkTree(), "bar/world.txt"); + assertFalse("default doesn't have bar", file.exists()); + file = new File(localDb.getWorkTree(), "a/a.txt"); + assertTrue("default has a", file.exists()); + file = new File(localDb.getWorkTree(), "b/b.txt"); + assertTrue("default has b", file.exists()); + + // all,-a should have bar & b + localDb = createWorkRepository(); + JGitTestUtil.writeTrashFile(localDb, "manifest.xml", xmlContent.toString()); + command = new RepoCommand(localDb); + command.setPath(localDb.getWorkTree().getAbsolutePath() + "/manifest.xml") + .setURI(rootUri) + .setGroups("all,-a") + .call(); + file = new File(localDb.getWorkTree(), "foo/hello.txt"); + assertFalse("\"all,-a\" doesn't have foo", file.exists()); + file = new File(localDb.getWorkTree(), "bar/world.txt"); + assertTrue("\"all,-a\" has bar", file.exists()); + file = new File(localDb.getWorkTree(), "a/a.txt"); + assertFalse("\"all,-a\" doesn't have a", file.exists()); + file = new File(localDb.getWorkTree(), "b/b.txt"); + assertTrue("\"all,-a\" has have b", file.exists()); + } + + private void resolveRelativeUris() { + // Find the longest common prefix ends with "/" as rootUri. + defaultUri = defaultDb.getDirectory().toURI().toString(); + notDefaultUri = notDefaultDb.getDirectory().toURI().toString(); + groupAUri = groupADb.getDirectory().toURI().toString(); + groupBUri = groupBDb.getDirectory().toURI().toString(); + int start = 0; + while (start <= defaultUri.length()) { + int newStart = defaultUri.indexOf('/', start + 1); + String prefix = defaultUri.substring(0, newStart); + if (!notDefaultUri.startsWith(prefix) || + !groupAUri.startsWith(prefix) || + !groupBUri.startsWith(prefix)) { + start++; + rootUri = defaultUri.substring(0, start); + defaultUri = defaultUri.substring(start); + notDefaultUri = notDefaultUri.substring(start); + groupAUri = groupAUri.substring(start); + groupBUri = groupBUri.substring(start); + return; + } + start = newStart; + } + } } |