package com.beijunyi.parallelgit.filesystem.commands; import java.io.IOException; import com.beijunyi.parallelgit.AbstractParallelGitTest; import com.beijunyi.parallelgit.filesystem.Gfs; import com.beijunyi.parallelgit.filesystem.GitFileSystem; import com.beijunyi.parallelgit.filesystem.ParallelGitMergeTest; import com.beijunyi.parallelgit.filesystem.merge.MergeNote; import org.eclipse.jgit.lib.AnyObjectId; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.revwalk.RevCommit; import org.junit.After; import org.junit.Before; import org.junit.Test; import static com.beijunyi.parallelgit.filesystem.Gfs.newFileSystem; import static com.beijunyi.parallelgit.utils.BranchUtils.getHeadCommit; import static java.nio.file.Files.write; import static org.junit.Assert.*; public class GfsCommitAfterMergeTest extends AbstractParallelGitTest implements ParallelGitMergeTest { private GitFileSystem gfs; @Before public void setUp() throws IOException { initRepository(); writeSomethingToCache(); AnyObjectId base = commit(); writeToCache("/test_file.txt", "OUR VERSION"); commitToBranch(OURS, base); clearCache(); writeSomethingToCache(); commitToBranch(THEIRS, base); writeSomethingToCache(); commitToBranch(THEIRS); gfs = newFileSystem(OURS, repo); } @After public void tearDown() throws IOException { if(gfs != null) { gfs.close(); gfs = null; } } @Test public void commitAfterMerge_resultCommitShouldHaveTheMessageSpecifiedInTheMergeNote() throws IOException { Gfs.merge(gfs).source(THEIRS).commit(false).execute(); MergeNote note = gfs.getStatusProvider().mergeNote(); RevCommit commit = Gfs.commit(gfs).execute().getCommit(); assertNotNull(note); assertNotNull(commit); assertEquals(note.getMessage(), commit.getFullMessage()); } @Test public void commitAfterMerge_resultCommitSecondParentShouldBeTheSourceCommitSpecifiedInTheMergeNote() throws IOException { Gfs.merge(gfs).source(THEIRS).commit(false).execute(); MergeNote note = gfs.getStatusProvider().mergeNote(); RevCommit commit = Gfs.commit(gfs).execute().getCommit(); assertNotNull(note); assertNotNull(commit); assertEquals(note.getSource(), commit.getParent(1)); } @Test public void commitAfterSquashMerge_resultCommitShouldHavePreviousHeadCommitAsOnlyParent() throws IOException { ObjectId previousHead = getHeadCommit(OURS, repo); Gfs.merge(gfs).source(THEIRS).squash(true).execute(); RevCommit commit = Gfs.commit(gfs).execute().getCommit(); assertEquals(1, commit.getParentCount()); assertEquals(previousHead, commit.getParent(0)); } @Test public void commitAfterConflictingMerge_resultCommitShouldHaveOneParent() throws IOException { writeToCache("/test_file.txt", "THEIR VERSION"); commitToBranch(THEIRS); Gfs.merge(gfs).source(THEIRS).execute(); MergeNote note = gfs.getStatusProvider().mergeNote(); write(gfs.getPath("/test_file.txt"), Constants.encodeASCII("COMBINED VERSION")); RevCommit commit = Gfs.commit(gfs).execute().getCommit(); assertNotNull(note); assertNotNull(commit); assertEquals(note.getSource(), commit.getParent(1)); } }