Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Lay2010-07-28 10:43:03 -0400
committerStefan Lay2010-07-28 10:43:03 -0400
commitdf27ebc65d7eb50b3c8eae96155e58c865241b7e (patch)
treee83077b89f329e578ff87d07a350a888e1ce35c9 /org.eclipse.egit.core.test
parent1cc6c07e67e2e07e00aa86cd05dc5ada12964ba2 (diff)
downloadegit-df27ebc65d7eb50b3c8eae96155e58c865241b7e.tar.gz
egit-df27ebc65d7eb50b3c8eae96155e58c865241b7e.tar.xz
egit-df27ebc65d7eb50b3c8eae96155e58c865241b7e.zip
Make use of JGit Add porcelain command
Now whole subtrees can be added by the Add menu item. It stages changes, adds files and resolves conflicts. Files ignored by .gitignore or by Eclipse are not added to the repository. Change-Id: I23ddb4be38d668f675f2fc936863dc4e72822f14 Signed-off-by: Stefan Lay <stefan.lay@sap.com>
Diffstat (limited to 'org.eclipse.egit.core.test')
-rw-r--r--org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/TestRepository.java23
-rw-r--r--org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/TestUtils.java3
-rw-r--r--org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/AddOperationTest.java199
-rw-r--r--org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ResetOperationTest.java6
4 files changed, 225 insertions, 6 deletions
diff --git a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/TestRepository.java b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/TestRepository.java
index f81713d2a..cd5a5a87f 100644
--- a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/TestRepository.java
+++ b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/TestRepository.java
@@ -24,6 +24,7 @@ import org.eclipse.jgit.api.JGitInternalException;
import org.eclipse.jgit.api.NoHeadException;
import org.eclipse.jgit.api.NoMessageException;
import org.eclipse.jgit.api.WrongRepositoryStateException;
+import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.errors.UnmergedPathException;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.GitIndex;
@@ -204,9 +205,27 @@ public class TestRepository {
}
public boolean inIndex(String path) throws IOException {
+// String repoPath = getRepoRelativePath(path);
+// GitIndex index = repository.getIndex();
+// return index.getEntry(repoPath) != null;
String repoPath = getRepoRelativePath(path);
- GitIndex index = repository.getIndex();
- return index.getEntry(repoPath) != null;
+ DirCache dc = DirCache.read(repository.getIndexFile(), repository.getFS());
+
+ return dc.getEntry(repoPath) != null;
+ }
+
+ public long lastModifiedInIndex(String path) throws IOException {
+ String repoPath = getRepoRelativePath(path);
+ DirCache dc = DirCache.read(repository.getIndexFile(), repository.getFS());
+
+ return dc.getEntry(repoPath).getLastModified();
+ }
+
+ public int getDirCacheEntryLength(String path) throws IOException {
+ String repoPath = getRepoRelativePath(path);
+ DirCache dc = DirCache.read(repository.getIndexFile(), repository.getFS());
+
+ return dc.getEntry(repoPath).getLength();
}
public String getRepoRelativePath(String path) {
diff --git a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/TestUtils.java b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/TestUtils.java
index d9e66590a..33c97dd1b 100644
--- a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/TestUtils.java
+++ b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/TestUtils.java
@@ -129,7 +129,8 @@ public class TestUtils {
} else {
folder = folder.getFolder(filePath.segment(i));
}
- folder.create(false, true, null);
+ if (!folder.exists())
+ folder.create(false, true, null);
}
IFile file = project.getFile(filePath);
file.create(new ByteArrayInputStream(content.getBytes(project
diff --git a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/AddOperationTest.java b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/AddOperationTest.java
new file mode 100644
index 000000000..70f2d6ebf
--- /dev/null
+++ b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/AddOperationTest.java
@@ -0,0 +1,199 @@
+/*******************************************************************************
+ * Copyright (C) 2010, Stefan Lay <stefan.lay@sap.com>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.core.test.op;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.egit.core.op.AddToIndexOperation;
+import org.eclipse.egit.core.test.GitTestCase;
+import org.eclipse.egit.core.test.TestRepository;
+import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.lib.Repository;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class AddOperationTest extends GitTestCase {
+
+ private List<IResource> resources = new ArrayList<IResource>();
+
+ TestRepository testRepository;
+
+ Repository repository;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ gitDir = new File(project.getProject()
+ .getLocationURI().getPath(), Constants.DOT_GIT);
+ testRepository = new TestRepository(gitDir);
+ repository = testRepository.getRepository();
+ testRepository.connect(project.getProject());
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ testRepository.dispose();
+ repository = null;
+ super.tearDown();
+ }
+
+ @Test
+ public void testTrackFile() throws Exception {
+ IFile file1 = testUtils.addFileToProject(project.getProject(), "a.txt",
+ "some text");
+
+ resources.add(file1);
+ new AddToIndexOperation(resources).execute(null);
+
+ assertTrue(testRepository.inIndex(file1.getLocation()
+ .toPortableString()));
+ assertTrue(testRepository.getDirCacheEntryLength(file1.getLocation()
+ .toPortableString()) == 9);
+ }
+
+ @Test
+ public void testTrackFilesInFolder() throws Exception {
+ IFile file1 = testUtils.addFileToProject(project.getProject(),
+ "sub/a.txt", "some text");
+ IFile file2 = testUtils.addFileToProject(project.getProject(),
+ "sub/b.txt", "some text");
+
+ resources.add(project.getProject().getFolder("sub"));
+ new AddToIndexOperation(resources).execute(null);
+
+ assertTrue(testRepository.inIndex(file1.getLocation()
+ .toPortableString()));
+ assertTrue(testRepository.inIndex(file2.getLocation()
+ .toPortableString()));
+ assertTrue(testRepository.getDirCacheEntryLength(file1.getLocation()
+ .toPortableString()) == 9);
+ assertTrue(testRepository.getDirCacheEntryLength(file2.getLocation()
+ .toPortableString()) == 9);
+ }
+
+ @Test
+ public void testAddFile() throws Exception {
+ IFile file1 = testUtils.addFileToProject(project.getProject(), "a.txt",
+ "some text");
+
+ resources.add(file1);
+ new AddToIndexOperation(resources).execute(null);
+
+ testRepository.commit("first commit");
+
+ assertEquals(file1.getLocalTimeStamp(),
+ testRepository.lastModifiedInIndex(file1.getLocation()
+ .toPortableString()));
+
+ Thread.sleep(1000);
+ file1.setContents(
+ new ByteArrayInputStream("other text".getBytes(project.project
+ .getDefaultCharset())), 0, null);
+
+ assertFalse(file1.getLocalTimeStamp() == testRepository
+ .lastModifiedInIndex(file1.getLocation().toPortableString()));
+
+ new AddToIndexOperation(resources).execute(null);
+
+ assertTrue(testRepository.inIndex(file1.getLocation()
+ .toPortableString()));
+ // does not work yet due to the racy git problem: DirCache.writeTo
+ // smudges the
+ // timestamp of an added file
+ assertEquals(file1.getLocalTimeStamp() / 10,
+ testRepository.lastModifiedInIndex(file1.getLocation().toPortableString()) / 10);
+ }
+
+ @Test
+ public void testAddFilesInFolder() throws Exception {
+ IFile file1 = testUtils.addFileToProject(project.getProject(),
+ "sub/a.txt", "some text");
+ IFile file2 = testUtils.addFileToProject(project.getProject(),
+ "sub/b.txt", "some text");
+
+ resources.add(project.getProject().getFolder("sub"));
+ new AddToIndexOperation(resources).execute(null);
+
+ testRepository.commit("first commit");
+
+ assertEquals(file1.getLocalTimeStamp(),
+ testRepository.lastModifiedInIndex(file1.getLocation()
+ .toPortableString()));
+
+ file1.setContents(
+ new ByteArrayInputStream("other text".getBytes(project.project
+ .getDefaultCharset())), 0, null);
+ file2.setContents(
+ new ByteArrayInputStream("other text".getBytes(project.project
+ .getDefaultCharset())), 0, null);
+
+ Thread.sleep(1000);
+ assertFalse(file1.getLocalTimeStamp() == testRepository
+ .lastModifiedInIndex(file1.getLocation().toPortableString()));
+ assertFalse(file2.getLocalTimeStamp() == testRepository
+ .lastModifiedInIndex(file1.getLocation().toPortableString()));
+
+ new AddToIndexOperation(resources).execute(null);
+
+ assertTrue(testRepository.inIndex(file1.getLocation()
+ .toPortableString()));
+ assertTrue(testRepository.inIndex(file2.getLocation()
+ .toPortableString()));
+
+ assertEquals(file1.getLocalTimeStamp() / 10,
+ testRepository.lastModifiedInIndex(file1.getLocation().toPortableString()) / 10);
+ assertEquals(file2.getLocalTimeStamp() / 10,
+ testRepository.lastModifiedInIndex(file1.getLocation().toPortableString()) / 10);
+ }
+
+ @Test
+ public void testAddFilesInFolderWithDerivedFile() throws Exception {
+ IFile file1 = testUtils.addFileToProject(project.getProject(),
+ "sub/a.txt", "some text");
+ IFile file2 = testUtils.addFileToProject(project.getProject(),
+ "sub/b.txt", "some text");
+ file2.setDerived(true, null);
+
+ resources.add(project.getProject().getFolder("sub"));
+ new AddToIndexOperation(resources).execute(null);
+
+ assertTrue(testRepository.inIndex(file1.getLocation()
+ .toPortableString()));
+ assertFalse(testRepository.inIndex(file2.getLocation()
+ .toPortableString()));
+ }
+
+ @Test
+ public void testAddWholeProject() throws Exception {
+ IFile file1 = testUtils.addFileToProject(project.getProject(),
+ "sub/a.txt", "some text");
+ IFile file2 = testUtils.addFileToProject(project.getProject(),
+ "sub/b.txt", "some text");
+ file2.setDerived(true, null);
+
+ resources.add(project.getProject());
+ new AddToIndexOperation(resources).execute(null);
+
+ assertTrue(testRepository.inIndex(file1.getLocation()
+ .toPortableString()));
+ assertFalse(testRepository.inIndex(file2.getLocation()
+ .toPortableString()));
+ }
+
+}
diff --git a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ResetOperationTest.java b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ResetOperationTest.java
index 5da8306d4..7fe76d88b 100644
--- a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ResetOperationTest.java
+++ b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ResetOperationTest.java
@@ -58,7 +58,7 @@ public class ResetOperationTest extends GitTestCase {
@Test
public void testHardReset() throws Exception {
setupRepository();
- String fileInIndexPath = fileInIndex.getLocation().toOSString();
+ String fileInIndexPath = fileInIndex.getLocation().toPortableString();
new ResetOperation(repository, initialCommit.getName(),
ResetOperation.ResetType.HARD).execute(null);
// .project must disappear, related Eclipse project must be deleted
@@ -77,7 +77,7 @@ public class ResetOperationTest extends GitTestCase {
@Test
public void testSoftReset() throws Exception {
setupRepository();
- String fileInIndexPath = fileInIndex.getLocation().toOSString();
+ String fileInIndexPath = fileInIndex.getLocation().toPortableString();
new ResetOperation(repository, initialCommit.getName(),
ResetOperation.ResetType.SOFT).execute(null);
// .project must remain
@@ -97,7 +97,7 @@ public class ResetOperationTest extends GitTestCase {
@Test
public void testMixedReset() throws Exception {
setupRepository();
- String fileInIndexPath = fileInIndex.getLocation().toOSString();
+ String fileInIndexPath = fileInIndex.getLocation().toPortableString();
new ResetOperation(repository, initialCommit.getName(),
ResetOperation.ResetType.MIXED).execute(null);
// .project must remain

Back to the top