summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test
diff options
context:
space:
mode:
authorRobin Stocker <robin@nibor.org>2012-10-20 22:00:13 +0200
committerRobin Stocker <robin@nibor.org>2012-11-12 22:51:18 +0100
commit0f88d7b72ff09297954930cbe2a23cf8feff9382 (patch)
treeef4358f7897c96fff2215f4b8c3e58dfac92920a /org.eclipse.jgit.test
parent106e8b87625cd1ad6b2cec14d676c23174422352 (diff)
downloadjgit-0f88d7b72ff09297954930cbe2a23cf8feff9382.tar.gz
jgit-0f88d7b72ff09297954930cbe2a23cf8feff9382.zip
CommitCommand: Ensure unmerged paths are added correctly with setOnly
With bug 391855, PathEdit will be changed to apply an edit for each stage. With that, CommitCommand would no longer work correctly when committing an unmerged path. This changes it to use a DirCacheBuilder which allows us to correctly replace the entries for the three stages with one, which is not possible with PathEdit. Bug: 391859 Change-Id: I6dc180aec7e2cbf8d1e91f50482c95bc420f79de
Diffstat (limited to 'org.eclipse.jgit.test')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java54
1 files changed, 54 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java
index 3e73c7598e..45f312f38c 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java
@@ -55,6 +55,8 @@ import java.util.TimeZone;
import org.eclipse.jgit.api.errors.WrongRepositoryStateException;
import org.eclipse.jgit.diff.DiffEntry;
import org.eclipse.jgit.dircache.DirCache;
+import org.eclipse.jgit.dircache.DirCacheBuilder;
+import org.eclipse.jgit.dircache.DirCacheEntry;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.FileMode;
@@ -471,4 +473,56 @@ public class CommitCommandTest extends RepositoryTestCase {
assertEquals("New Author", amendedAuthor.getName());
assertEquals("newauthor@example.org", amendedAuthor.getEmailAddress());
}
+
+ @Test
+ public void commitOnlyShouldCommitUnmergedPathAndNotAffectOthers()
+ throws Exception {
+ DirCache index = db.lockDirCache();
+ DirCacheBuilder builder = index.builder();
+ addUnmergedEntry("unmerged1", builder);
+ addUnmergedEntry("unmerged2", builder);
+ DirCacheEntry other = new DirCacheEntry("other");
+ other.setFileMode(FileMode.REGULAR_FILE);
+ builder.add(other);
+ builder.commit();
+
+ writeTrashFile("unmerged1", "unmerged1 data");
+ writeTrashFile("unmerged2", "unmerged2 data");
+ writeTrashFile("other", "other data");
+
+ assertEquals("[other, mode:100644]"
+ + "[unmerged1, mode:100644, stage:1]"
+ + "[unmerged1, mode:100644, stage:2]"
+ + "[unmerged1, mode:100644, stage:3]"
+ + "[unmerged2, mode:100644, stage:1]"
+ + "[unmerged2, mode:100644, stage:2]"
+ + "[unmerged2, mode:100644, stage:3]",
+ indexState(0));
+
+ Git git = new Git(db);
+ RevCommit commit = git.commit().setOnly("unmerged1")
+ .setMessage("Only one file").call();
+
+ assertEquals("[other, mode:100644]" + "[unmerged1, mode:100644]"
+ + "[unmerged2, mode:100644, stage:1]"
+ + "[unmerged2, mode:100644, stage:2]"
+ + "[unmerged2, mode:100644, stage:3]",
+ indexState(0));
+
+ TreeWalk walk = TreeWalk.forPath(db, "unmerged1", commit.getTree());
+ assertEquals(FileMode.REGULAR_FILE, walk.getFileMode(0));
+ walk.release();
+ }
+
+ private static void addUnmergedEntry(String file, DirCacheBuilder builder) {
+ DirCacheEntry stage1 = new DirCacheEntry(file, DirCacheEntry.STAGE_1);
+ DirCacheEntry stage2 = new DirCacheEntry(file, DirCacheEntry.STAGE_2);
+ DirCacheEntry stage3 = new DirCacheEntry(file, DirCacheEntry.STAGE_3);
+ stage1.setFileMode(FileMode.REGULAR_FILE);
+ stage2.setFileMode(FileMode.REGULAR_FILE);
+ stage3.setFileMode(FileMode.REGULAR_FILE);
+ builder.add(stage1);
+ builder.add(stage2);
+ builder.add(stage3);
+ }
}