Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jgit.test/tst/org/eclipse/jgit/gitrepo/RepoCommandTest.java')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/gitrepo/RepoCommandTest.java799
1 files changed, 437 insertions, 362 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 ccd15d038d..9cf4569d66 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
@@ -48,15 +48,28 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileReader;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.api.errors.GitAPIException;
+import org.eclipse.jgit.api.errors.InvalidRemoteException;
+import org.eclipse.jgit.api.errors.RefNotFoundException;
import org.eclipse.jgit.junit.JGitTestUtil;
import org.eclipse.jgit.junit.RepositoryTestCase;
+import org.eclipse.jgit.lib.BlobBasedConfig;
+import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.ObjectReader;
+import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.storage.file.FileBasedConfig;
import org.eclipse.jgit.util.FS;
import org.junit.Test;
@@ -79,6 +92,7 @@ public class RepoCommandTest extends RepositoryTestCase {
private ObjectId oldCommitId;
+ @Override
public void setUp() throws Exception {
super.setUp();
@@ -123,6 +137,108 @@ public class RepoCommandTest extends RepositoryTestCase {
resolveRelativeUris();
}
+ class IndexedRepos implements RepoCommand.RemoteReader {
+ Map<String, Repository> uriRepoMap;
+ IndexedRepos() {
+ uriRepoMap = new HashMap<>();
+ }
+
+ void put(String u, Repository r) {
+ uriRepoMap.put(u, r);
+ }
+
+ @Override
+ public ObjectId sha1(String uri, String refname) throws GitAPIException {
+ if (!uriRepoMap.containsKey(uri)) {
+ return null;
+ }
+
+ Repository r = uriRepoMap.get(uri);
+ try {
+ Ref ref = r.findRef(refname);
+ if (ref == null) return null;
+
+ ref = r.peel(ref);
+ ObjectId id = ref.getObjectId();
+ return id;
+ } catch (IOException e) {
+ throw new InvalidRemoteException("", e);
+ }
+ }
+
+ @Override
+ public byte[] readFile(String uri, String refName, String path)
+ throws GitAPIException, IOException {
+ Repository repo = uriRepoMap.get(uri);
+
+ String idStr = refName + ":" + path;
+ ObjectId id = repo.resolve(idStr);
+ if (id == null) {
+ throw new RefNotFoundException(
+ String.format("repo %s does not have %s", repo.toString(), idStr));
+ }
+ try (ObjectReader reader = repo.newObjectReader()) {
+ return reader.open(id).getCachedBytes(Integer.MAX_VALUE);
+ }
+ }
+ }
+
+ @Test
+ public void absoluteRemoteURL() throws Exception {
+ Repository child =
+ Git.cloneRepository().setURI(groupADb.getDirectory().toURI().toString())
+ .setDirectory(createUniqueTestGitDir(true))
+ .setBare(true).call().getRepository();
+ Repository dest = Git.cloneRepository()
+ .setURI(db.getDirectory().toURI().toString()).setDirectory(createUniqueTestGitDir(true))
+ .setBare(true).call().getRepository();
+ String abs = "https://chromium.googlesource.com";
+ String repoUrl = "https://chromium.googlesource.com/chromium/src";
+ boolean fetchSlash = false;
+ boolean baseSlash = false;
+ do {
+ do {
+ String fetchUrl = fetchSlash ? abs + "/" : abs;
+ String baseUrl = baseSlash ? abs + "/" : abs;
+
+ StringBuilder xmlContent = new StringBuilder();
+ xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
+ .append("<manifest>")
+ .append("<remote name=\"origin\" fetch=\"" + fetchUrl + "\" />")
+ .append("<default revision=\"master\" remote=\"origin\" />")
+ .append("<project path=\"src\" name=\"chromium/src\" />")
+ .append("</manifest>");
+ RepoCommand cmd = new RepoCommand(dest);
+
+ IndexedRepos repos = new IndexedRepos();
+ repos.put(repoUrl, child);
+
+ RevCommit commit = cmd
+ .setInputStream(new ByteArrayInputStream(xmlContent.toString().getBytes(StandardCharsets.UTF_8)))
+ .setRemoteReader(repos)
+ .setURI(baseUrl)
+ .setRecordRemoteBranch(true)
+ .setRecordSubmoduleLabels(true)
+ .call();
+
+ String idStr = commit.getId().name() + ":" + ".gitmodules";
+ ObjectId modId = dest.resolve(idStr);
+
+ try (ObjectReader reader = dest.newObjectReader()) {
+ byte[] bytes = reader.open(modId).getCachedBytes(Integer.MAX_VALUE);
+ Config base = new Config();
+ BlobBasedConfig cfg = new BlobBasedConfig(base, bytes);
+ String subUrl = cfg.getString("submodule", "src", "url");
+ assertEquals("https://chromium.googlesource.com/chromium/src", subUrl);
+ }
+ fetchSlash = !fetchSlash;
+ } while (fetchSlash);
+ baseSlash = !baseSlash;
+ } while (baseSlash);
+ child.close();
+ dest.close();
+ }
+
@Test
public void testAddRepoManifest() throws Exception {
StringBuilder xmlContent = new StringBuilder();
@@ -248,46 +364,42 @@ public class RepoCommandTest extends RepositoryTestCase {
@Test
public void testBareRepo() throws Exception {
- try (
- Repository remoteDb = createBareRepository();
- Repository tempDb = createWorkRepository()) {
- 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("\" />").append("</manifest>");
- JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
- xmlContent.toString());
- RepoCommand command = new RepoCommand(remoteDb);
- command.setPath(
- tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
- .setURI(rootUri).call();
- // Clone it
- File directory = createTempDirectory("testBareRepo");
- Repository localDb = Git.cloneRepository().setDirectory(directory)
- .setURI(remoteDb.getDirectory().toURI().toString()).call()
- .getRepository();
- // The .gitmodules file should exist
- File gitmodules = new File(localDb.getWorkTree(), ".gitmodules");
- assertTrue("The .gitmodules file should exist", gitmodules.exists());
- // The first line of .gitmodules file should be expected
- BufferedReader reader = new BufferedReader(new FileReader(
- gitmodules));
- String content = reader.readLine();
- reader.close();
- assertEquals(
- "The first line of .gitmodules file should be as expected",
- "[submodule \"foo\"]", content);
- // The gitlink should be the same as remote head sha1
- String gitlink = localDb.resolve(Constants.HEAD + ":foo").name();
- localDb.close();
- String remote = defaultDb.resolve(Constants.HEAD).name();
- assertEquals("The gitlink should be the same as remote head",
- remote, gitlink);
- }
+ Repository remoteDb = createBareRepository();
+ Repository tempDb = createWorkRepository();
+
+ 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("\" />").append("</manifest>");
+ JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
+ xmlContent.toString());
+ RepoCommand command = new RepoCommand(remoteDb);
+ command.setPath(
+ tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
+ .setURI(rootUri).call();
+ // Clone it
+ File directory = createTempDirectory("testBareRepo");
+ Repository localDb = Git.cloneRepository().setDirectory(directory)
+ .setURI(remoteDb.getDirectory().toURI().toString()).call()
+ .getRepository();
+ // The .gitmodules file should exist
+ File gitmodules = new File(localDb.getWorkTree(), ".gitmodules");
+ assertTrue("The .gitmodules file should exist", gitmodules.exists());
+ // The first line of .gitmodules file should be expected
+ BufferedReader reader = new BufferedReader(new FileReader(gitmodules));
+ String content = reader.readLine();
+ reader.close();
+ assertEquals("The first line of .gitmodules file should be as expected",
+ "[submodule \"foo\"]", content);
+ // The gitlink should be the same as remote head sha1
+ String gitlink = localDb.resolve(Constants.HEAD + ":foo").name();
+ localDb.close();
+ String remote = defaultDb.resolve(Constants.HEAD).name();
+ assertEquals("The gitlink should be the same as remote head", remote,
+ gitlink);
}
@Test
@@ -370,208 +482,192 @@ public class RepoCommandTest extends RepositoryTestCase {
@Test
public void testRevisionBare() throws Exception {
- try (
- Repository remoteDb = createBareRepository();
- Repository tempDb = createWorkRepository()) {
- StringBuilder xmlContent = new StringBuilder();
- xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
- .append("<manifest>")
- .append("<remote name=\"remote1\" fetch=\".\" />")
- .append("<default revision=\"").append(BRANCH)
- .append("\" remote=\"remote1\" />")
- .append("<project path=\"foo\" name=\"").append(defaultUri)
- .append("\" />").append("</manifest>");
- JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
- xmlContent.toString());
- RepoCommand command = new RepoCommand(remoteDb);
- command.setPath(
- tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
- .setURI(rootUri).call();
- // Clone it
- File directory = createTempDirectory("testRevisionBare");
- Repository localDb = Git.cloneRepository().setDirectory(directory)
- .setURI(remoteDb.getDirectory().toURI().toString()).call()
- .getRepository();
- // The gitlink should be the same as oldCommitId
- String gitlink = localDb.resolve(Constants.HEAD + ":foo").name();
- localDb.close();
- assertEquals("The gitlink is same as remote head",
- oldCommitId.name(), gitlink);
- }
+ Repository remoteDb = createBareRepository();
+ Repository tempDb = createWorkRepository();
+
+ StringBuilder xmlContent = new StringBuilder();
+ xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
+ .append("<manifest>")
+ .append("<remote name=\"remote1\" fetch=\".\" />")
+ .append("<default revision=\"").append(BRANCH)
+ .append("\" remote=\"remote1\" />")
+ .append("<project path=\"foo\" name=\"").append(defaultUri)
+ .append("\" />").append("</manifest>");
+ JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
+ xmlContent.toString());
+ RepoCommand command = new RepoCommand(remoteDb);
+ command.setPath(
+ tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
+ .setURI(rootUri).call();
+ // Clone it
+ File directory = createTempDirectory("testRevisionBare");
+ Repository localDb = Git.cloneRepository().setDirectory(directory)
+ .setURI(remoteDb.getDirectory().toURI().toString()).call()
+ .getRepository();
+ // The gitlink should be the same as oldCommitId
+ String gitlink = localDb.resolve(Constants.HEAD + ":foo").name();
+ localDb.close();
+ assertEquals("The gitlink is same as remote head", oldCommitId.name(),
+ gitlink);
}
@Test
public void testCopyFileBare() throws Exception {
- try (
- Repository remoteDb = createBareRepository();
- Repository tempDb = createWorkRepository()) {
- 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("\" revision=\"").append(BRANCH).append("\" >")
- .append("<copyfile src=\"hello.txt\" dest=\"Hello\" />")
- .append("<copyfile src=\"hello.txt\" dest=\"foo/Hello\" />")
- .append("</project>").append("</manifest>");
- JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
- xmlContent.toString());
- RepoCommand command = new RepoCommand(remoteDb);
- command.setPath(
- tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
- .setURI(rootUri).call();
- // Clone it
- File directory = createTempDirectory("testCopyFileBare");
- Repository localDb = Git.cloneRepository().setDirectory(directory)
- .setURI(remoteDb.getDirectory().toURI().toString()).call()
- .getRepository();
- // The Hello file should exist
- File hello = new File(localDb.getWorkTree(), "Hello");
- assertTrue("The Hello file should exist", hello.exists());
- // The foo/Hello file should be skipped.
- File foohello = new File(localDb.getWorkTree(), "foo/Hello");
- assertFalse(
- "The foo/Hello file should be skipped", foohello.exists());
- localDb.close();
- // The content of Hello file should be expected
- BufferedReader reader = new BufferedReader(new FileReader(hello));
- String content = reader.readLine();
- reader.close();
- assertEquals("The Hello file should have expected content",
- "branch world", content);
- }
+ Repository remoteDb = createBareRepository();
+ Repository tempDb = createWorkRepository();
+
+ 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("\" revision=\"").append(BRANCH).append("\" >")
+ .append("<copyfile src=\"hello.txt\" dest=\"Hello\" />")
+ .append("<copyfile src=\"hello.txt\" dest=\"foo/Hello\" />")
+ .append("</project>").append("</manifest>");
+ JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
+ xmlContent.toString());
+ RepoCommand command = new RepoCommand(remoteDb);
+ command.setPath(
+ tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
+ .setURI(rootUri).call();
+ // Clone it
+ File directory = createTempDirectory("testCopyFileBare");
+ Repository localDb = Git.cloneRepository().setDirectory(directory)
+ .setURI(remoteDb.getDirectory().toURI().toString()).call()
+ .getRepository();
+ // The Hello file should exist
+ File hello = new File(localDb.getWorkTree(), "Hello");
+ assertTrue("The Hello file should exist", hello.exists());
+ // The foo/Hello file should be skipped.
+ File foohello = new File(localDb.getWorkTree(), "foo/Hello");
+ assertFalse("The foo/Hello file should be skipped", foohello.exists());
+ localDb.close();
+ // The content of Hello file should be expected
+ BufferedReader reader = new BufferedReader(new FileReader(hello));
+ String content = reader.readLine();
+ reader.close();
+ assertEquals("The Hello file should have expected content",
+ "branch world", content);
}
@Test
public void testReplaceManifestBare() throws Exception {
- try (
- Repository remoteDb = createBareRepository();
- Repository tempDb = createWorkRepository()) {
- 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("\" revision=\"").append(BRANCH).append("\" >")
- .append("<copyfile src=\"hello.txt\" dest=\"Hello\" />")
- .append("</project>").append("</manifest>");
- JGitTestUtil.writeTrashFile(tempDb, "old.xml",
- xmlContent.toString());
- RepoCommand command = new RepoCommand(remoteDb);
- command.setPath(tempDb.getWorkTree().getAbsolutePath() + "/old.xml")
- .setURI(rootUri).call();
- 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=\"bar\" name=\"")
- .append(defaultUri)
- .append("\" revision=\"")
- .append(BRANCH)
- .append("\" >")
- .append("<copyfile src=\"hello.txt\" dest=\"Hello.txt\" />")
- .append("</project>").append("</manifest>");
- JGitTestUtil.writeTrashFile(tempDb, "new.xml",
- xmlContent.toString());
- command = new RepoCommand(remoteDb);
- command.setPath(tempDb.getWorkTree().getAbsolutePath() + "/new.xml")
- .setURI(rootUri).call();
- // Clone it
- File directory = createTempDirectory("testReplaceManifestBare");
- Repository localDb = Git.cloneRepository().setDirectory(directory)
- .setURI(remoteDb.getDirectory().toURI().toString()).call()
- .getRepository();
- // The Hello file should not exist
- File hello = new File(localDb.getWorkTree(), "Hello");
- assertFalse("The Hello file shouldn't exist", hello.exists());
- // The Hello.txt file should exist
- File hellotxt = new File(localDb.getWorkTree(), "Hello.txt");
- assertTrue("The Hello.txt file should exist", hellotxt.exists());
- // The .gitmodules file should have 'submodule "bar"' and shouldn't
- // have
- // 'submodule "foo"' lines.
- File dotmodules = new File(localDb.getWorkTree(),
- Constants.DOT_GIT_MODULES);
- localDb.close();
- BufferedReader reader = new BufferedReader(new FileReader(
- dotmodules));
- boolean foo = false;
- boolean bar = false;
- while (true) {
- String line = reader.readLine();
- if (line == null)
- break;
- if (line.contains("submodule \"foo\""))
- foo = true;
- if (line.contains("submodule \"bar\""))
- bar = true;
- }
- reader.close();
- assertTrue("The bar submodule should exist", bar);
- assertFalse("The foo submodule shouldn't exist", foo);
+ Repository remoteDb = createBareRepository();
+ Repository tempDb = createWorkRepository();
+
+ 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("\" revision=\"").append(BRANCH).append("\" >")
+ .append("<copyfile src=\"hello.txt\" dest=\"Hello\" />")
+ .append("</project>").append("</manifest>");
+ JGitTestUtil.writeTrashFile(tempDb, "old.xml", xmlContent.toString());
+ RepoCommand command = new RepoCommand(remoteDb);
+ command.setPath(tempDb.getWorkTree().getAbsolutePath() + "/old.xml")
+ .setURI(rootUri).call();
+ 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=\"bar\" name=\"").append(defaultUri)
+ .append("\" revision=\"").append(BRANCH).append("\" >")
+ .append("<copyfile src=\"hello.txt\" dest=\"Hello.txt\" />")
+ .append("</project>").append("</manifest>");
+ JGitTestUtil.writeTrashFile(tempDb, "new.xml", xmlContent.toString());
+ command = new RepoCommand(remoteDb);
+ command.setPath(tempDb.getWorkTree().getAbsolutePath() + "/new.xml")
+ .setURI(rootUri).call();
+ // Clone it
+ File directory = createTempDirectory("testReplaceManifestBare");
+ Repository localDb = Git.cloneRepository().setDirectory(directory)
+ .setURI(remoteDb.getDirectory().toURI().toString()).call()
+ .getRepository();
+ // The Hello file should not exist
+ File hello = new File(localDb.getWorkTree(), "Hello");
+ assertFalse("The Hello file shouldn't exist", hello.exists());
+ // The Hello.txt file should exist
+ File hellotxt = new File(localDb.getWorkTree(), "Hello.txt");
+ assertTrue("The Hello.txt file should exist", hellotxt.exists());
+ // The .gitmodules file should have 'submodule "bar"' and shouldn't
+ // have
+ // 'submodule "foo"' lines.
+ File dotmodules = new File(localDb.getWorkTree(),
+ Constants.DOT_GIT_MODULES);
+ localDb.close();
+ BufferedReader reader = new BufferedReader(new FileReader(dotmodules));
+ boolean foo = false;
+ boolean bar = false;
+ while (true) {
+ String line = reader.readLine();
+ if (line == null)
+ break;
+ if (line.contains("submodule \"foo\""))
+ foo = true;
+ if (line.contains("submodule \"bar\""))
+ bar = true;
}
+ reader.close();
+ assertTrue("The bar submodule should exist", bar);
+ assertFalse("The foo submodule shouldn't exist", foo);
}
@Test
public void testRemoveOverlappingBare() throws Exception {
- try (
- Repository remoteDb = createBareRepository();
- Repository tempDb = createWorkRepository()) {
- 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/bar\" name=\"")
- .append(groupBUri).append("\" />")
- .append("<project path=\"a\" name=\"").append(groupAUri)
- .append("\" />").append("<project path=\"foo\" name=\"")
- .append(defaultUri).append("\" />").append("</manifest>");
- JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
- xmlContent.toString());
- RepoCommand command = new RepoCommand(remoteDb);
- command.setPath(
- tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
- .setURI(rootUri).call();
- // Clone it
- File directory = createTempDirectory("testRemoveOverlappingBare");
- Repository localDb = Git.cloneRepository().setDirectory(directory)
- .setURI(remoteDb.getDirectory().toURI().toString()).call()
- .getRepository();
- // The .gitmodules file should have 'submodule "foo"' and shouldn't
- // have
- // 'submodule "foo/bar"' lines.
- File dotmodules = new File(localDb.getWorkTree(),
- Constants.DOT_GIT_MODULES);
- localDb.close();
- BufferedReader reader = new BufferedReader(new FileReader(
- dotmodules));
- boolean foo = false;
- boolean foobar = false;
- boolean a = false;
- while (true) {
- String line = reader.readLine();
- if (line == null)
- break;
- if (line.contains("submodule \"foo\""))
- foo = true;
- if (line.contains("submodule \"foo/bar\""))
- foobar = true;
- if (line.contains("submodule \"a\""))
- a = true;
- }
- reader.close();
- assertTrue("The foo submodule should exist", foo);
- assertFalse("The foo/bar submodule shouldn't exist", foobar);
- assertTrue("The a submodule should exist", a);
+ Repository remoteDb = createBareRepository();
+ Repository tempDb = createWorkRepository();
+
+ 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/bar\" name=\"").append(groupBUri)
+ .append("\" />").append("<project path=\"a\" name=\"")
+ .append(groupAUri).append("\" />")
+ .append("<project path=\"foo\" name=\"").append(defaultUri)
+ .append("\" />").append("</manifest>");
+ JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
+ xmlContent.toString());
+ RepoCommand command = new RepoCommand(remoteDb);
+ command.setPath(
+ tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
+ .setURI(rootUri).call();
+ // Clone it
+ File directory = createTempDirectory("testRemoveOverlappingBare");
+ Repository localDb = Git.cloneRepository().setDirectory(directory)
+ .setURI(remoteDb.getDirectory().toURI().toString()).call()
+ .getRepository();
+ // The .gitmodules file should have 'submodule "foo"' and shouldn't
+ // have
+ // 'submodule "foo/bar"' lines.
+ File dotmodules = new File(localDb.getWorkTree(),
+ Constants.DOT_GIT_MODULES);
+ localDb.close();
+ BufferedReader reader = new BufferedReader(new FileReader(dotmodules));
+ boolean foo = false;
+ boolean foobar = false;
+ boolean a = false;
+ while (true) {
+ String line = reader.readLine();
+ if (line == null)
+ break;
+ if (line.contains("submodule \"foo\""))
+ foo = true;
+ if (line.contains("submodule \"foo/bar\""))
+ foobar = true;
+ if (line.contains("submodule \"a\""))
+ a = true;
}
+ reader.close();
+ assertTrue("The foo submodule should exist", foo);
+ assertFalse("The foo/bar submodule shouldn't exist", foobar);
+ assertTrue("The a submodule should exist", a);
}
@Test
@@ -670,178 +766,157 @@ public class RepoCommandTest extends RepositoryTestCase {
@Test
public void testTargetBranch() throws Exception {
- try (
- Repository remoteDb1 = createBareRepository();
- Repository remoteDb2 = createBareRepository();
- Repository tempDb = createWorkRepository()) {
- 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("\" />").append("</manifest>");
- JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
- xmlContent.toString());
- RepoCommand command = new RepoCommand(remoteDb1);
- command
- .setPath(tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
- .setURI(rootUri)
- .setTargetBranch("test")
- .call();
- ObjectId branchId = remoteDb1.resolve(
- Constants.R_HEADS + "test^{tree}");
- command = new RepoCommand(remoteDb2);
- command
- .setPath(tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
- .setURI(rootUri)
- .call();
- ObjectId defaultId = remoteDb2.resolve(Constants.HEAD + "^{tree}");
- assertEquals(
+ Repository remoteDb1 = createBareRepository();
+ Repository remoteDb2 = createBareRepository();
+ Repository tempDb = createWorkRepository();
+
+ 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("\" />").append("</manifest>");
+ JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
+ xmlContent.toString());
+ RepoCommand command = new RepoCommand(remoteDb1);
+ command.setPath(
+ tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
+ .setURI(rootUri).setTargetBranch("test").call();
+ ObjectId branchId = remoteDb1
+ .resolve(Constants.R_HEADS + "test^{tree}");
+ command = new RepoCommand(remoteDb2);
+ command.setPath(
+ tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
+ .setURI(rootUri).call();
+ ObjectId defaultId = remoteDb2.resolve(Constants.HEAD + "^{tree}");
+ assertEquals(
"The tree id of branch db and default db should be the same",
branchId, defaultId);
- }
}
@Test
public void testRecordRemoteBranch() throws Exception {
- try (
- Repository remoteDb = createBareRepository();
- Repository tempDb = createWorkRepository()) {
- StringBuilder xmlContent = new StringBuilder();
- xmlContent
- .append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
+ Repository remoteDb = createBareRepository();
+ Repository tempDb = createWorkRepository();
+
+ 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=\"with-branch\" ")
- .append("revision=\"master\" ")
- .append("name=\"").append(notDefaultUri).append("\" />")
+ .append("revision=\"master\" ").append("name=\"")
+ .append(notDefaultUri).append("\" />")
.append("<project path=\"with-long-branch\" ")
- .append("revision=\"refs/heads/master\" ")
- .append("name=\"").append(defaultUri).append("\" />")
- .append("</manifest>");
- JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
+ .append("revision=\"refs/heads/master\" ").append("name=\"")
+ .append(defaultUri).append("\" />").append("</manifest>");
+ JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
xmlContent.toString());
- RepoCommand command = new RepoCommand(remoteDb);
- command.setPath(tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
- .setURI(rootUri)
- .setRecordRemoteBranch(true)
- .call();
- // Clone it
- File directory = createTempDirectory("testBareRepo");
- try (Repository localDb = Git.cloneRepository()
- .setDirectory(directory)
- .setURI(remoteDb.getDirectory().toURI().toString()).call()
- .getRepository();) {
- // The .gitmodules file should exist
- File gitmodules = new File(localDb.getWorkTree(),
- ".gitmodules");
- assertTrue("The .gitmodules file should exist",
- gitmodules.exists());
- FileBasedConfig c = new FileBasedConfig(gitmodules,
- FS.DETECTED);
- c.load();
- assertEquals("Recording remote branches should work for short branch descriptions", "master",
- c.getString("submodule", "with-branch", "branch"));
- assertEquals("Recording remote branches should work for full ref specs", "refs/heads/master",
- c.getString("submodule", "with-long-branch", "branch"));
- }
+ RepoCommand command = new RepoCommand(remoteDb);
+ command.setPath(
+ tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
+ .setURI(rootUri).setRecordRemoteBranch(true).call();
+ // Clone it
+ File directory = createTempDirectory("testBareRepo");
+ try (Repository localDb = Git.cloneRepository().setDirectory(directory)
+ .setURI(remoteDb.getDirectory().toURI().toString()).call()
+ .getRepository();) {
+ // The .gitmodules file should exist
+ File gitmodules = new File(localDb.getWorkTree(), ".gitmodules");
+ assertTrue("The .gitmodules file should exist",
+ gitmodules.exists());
+ FileBasedConfig c = new FileBasedConfig(gitmodules, FS.DETECTED);
+ c.load();
+ assertEquals(
+ "Recording remote branches should work for short branch descriptions",
+ "master",
+ c.getString("submodule", "with-branch", "branch"));
+ assertEquals(
+ "Recording remote branches should work for full ref specs",
+ "refs/heads/master",
+ c.getString("submodule", "with-long-branch", "branch"));
}
}
@Test
public void testRecordSubmoduleLabels() throws Exception {
- try (
- Repository remoteDb = createBareRepository();
- Repository tempDb = createWorkRepository()) {
- StringBuilder xmlContent = new StringBuilder();
- xmlContent
- .append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
+ Repository remoteDb = createBareRepository();
+ Repository tempDb = createWorkRepository();
+
+ 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=\"test\" ")
- .append("revision=\"master\" ")
- .append("name=\"").append(notDefaultUri).append("\" ")
- .append("groups=\"a1,a2\" />")
- .append("</manifest>");
- JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
+ .append("revision=\"master\" ").append("name=\"")
+ .append(notDefaultUri).append("\" ")
+ .append("groups=\"a1,a2\" />").append("</manifest>");
+ JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
xmlContent.toString());
- RepoCommand command = new RepoCommand(remoteDb);
- command.setPath(tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
- .setURI(rootUri)
- .setRecordSubmoduleLabels(true)
- .call();
- // Clone it
- File directory = createTempDirectory("testBareRepo");
- try (Repository localDb = Git.cloneRepository()
- .setDirectory(directory)
- .setURI(remoteDb.getDirectory().toURI().toString()).call()
- .getRepository();) {
- // The .gitattributes file should exist
- File gitattributes = new File(localDb.getWorkTree(),
+ RepoCommand command = new RepoCommand(remoteDb);
+ command.setPath(
+ tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
+ .setURI(rootUri).setRecordSubmoduleLabels(true).call();
+ // Clone it
+ File directory = createTempDirectory("testBareRepo");
+ try (Repository localDb = Git.cloneRepository().setDirectory(directory)
+ .setURI(remoteDb.getDirectory().toURI().toString()).call()
+ .getRepository();) {
+ // The .gitattributes file should exist
+ File gitattributes = new File(localDb.getWorkTree(),
".gitattributes");
- assertTrue("The .gitattributes file should exist",
- gitattributes.exists());
- try (BufferedReader reader = new BufferedReader(
- new FileReader(gitattributes));) {
- String content = reader.readLine();
- assertEquals(".gitattributes content should be as expected",
+ assertTrue("The .gitattributes file should exist",
+ gitattributes.exists());
+ try (BufferedReader reader = new BufferedReader(
+ new FileReader(gitattributes));) {
+ String content = reader.readLine();
+ assertEquals(".gitattributes content should be as expected",
"/test a1 a2", content);
- }
}
}
}
@Test
public void testRecordShallowRecommendation() throws Exception {
- try (
- Repository remoteDb = createBareRepository();
- Repository tempDb = createWorkRepository()) {
- StringBuilder xmlContent = new StringBuilder();
- xmlContent
- .append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
+ Repository remoteDb = createBareRepository();
+ Repository tempDb = createWorkRepository();
+
+ 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=\"shallow-please\" ")
- .append("name=\"").append(defaultUri).append("\" ")
- .append("clone-depth=\"1\" />")
- .append("<project path=\"non-shallow\" ")
- .append("name=\"").append(defaultUri).append("\" />")
- .append("</manifest>");
- JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
+ .append("<project path=\"shallow-please\" ").append("name=\"")
+ .append(defaultUri).append("\" ").append("clone-depth=\"1\" />")
+ .append("<project path=\"non-shallow\" ").append("name=\"")
+ .append(defaultUri).append("\" />").append("</manifest>");
+ JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
xmlContent.toString());
- RepoCommand command = new RepoCommand(remoteDb);
- command.setPath(tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
- .setURI(rootUri)
- .setRecommendShallow(true)
- .call();
- // Clone it
- File directory = createTempDirectory("testBareRepo");
- try (Repository localDb = Git.cloneRepository()
- .setDirectory(directory)
- .setURI(remoteDb.getDirectory().toURI().toString()).call()
- .getRepository();) {
- // The .gitmodules file should exist
- File gitmodules = new File(localDb.getWorkTree(),
- ".gitmodules");
- assertTrue("The .gitmodules file should exist",
- gitmodules.exists());
- FileBasedConfig c = new FileBasedConfig(gitmodules,
- FS.DETECTED);
- c.load();
- assertEquals("Recording shallow configuration should work", "true",
- c.getString("submodule", "shallow-please", "shallow"));
- assertNull("Recording non shallow configuration should work",
- c.getString("submodule", "non-shallow", "shallow"));
- }
+ RepoCommand command = new RepoCommand(remoteDb);
+ command.setPath(
+ tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
+ .setURI(rootUri).setRecommendShallow(true).call();
+ // Clone it
+ File directory = createTempDirectory("testBareRepo");
+ try (Repository localDb = Git.cloneRepository().setDirectory(directory)
+ .setURI(remoteDb.getDirectory().toURI().toString()).call()
+ .getRepository();) {
+ // The .gitmodules file should exist
+ File gitmodules = new File(localDb.getWorkTree(), ".gitmodules");
+ assertTrue("The .gitmodules file should exist",
+ gitmodules.exists());
+ FileBasedConfig c = new FileBasedConfig(gitmodules, FS.DETECTED);
+ c.load();
+ assertEquals("Recording shallow configuration should work", "true",
+ c.getString("submodule", "shallow-please", "shallow"));
+ assertNull("Recording non shallow configuration should work",
+ c.getString("submodule", "non-shallow", "shallow"));
}
}

Back to the top