Implement simple merge dry run

This commit is contained in:
René Pfeuffer
2018-11-06 14:40:55 +01:00
parent 8df0b53f36
commit e0cc99a3d8
3 changed files with 55 additions and 2 deletions

View File

@@ -0,0 +1,25 @@
package sonia.scm.repository.spi;
import org.eclipse.jgit.merge.MergeStrategy;
import org.eclipse.jgit.merge.ResolveMerger;
import sonia.scm.repository.InternalRepositoryException;
import sonia.scm.repository.Repository;
import java.io.IOException;
public class GitMergeDryRunCommand extends AbstractGitCommand implements MergeDryRunCommand {
GitMergeDryRunCommand(GitContext context, Repository repository) {
super(context, repository);
}
@Override
public boolean isMergeable(MergeDryRunCommandRequest request) {
try {
org.eclipse.jgit.lib.Repository repository = context.open();
ResolveMerger merger = (ResolveMerger) MergeStrategy.RECURSIVE.newMerger(repository, true);
return merger.merge(repository.resolve(request.getBranchToMerge()), repository.resolve(request.getTargetBranch()));
} catch (IOException e) {
throw new InternalRepositoryException(e);
}
}
}

View File

@@ -63,7 +63,8 @@ public class GitRepositoryServiceProvider extends RepositoryServiceProvider
Command.INCOMING,
Command.OUTGOING,
Command.PUSH,
Command.PULL
Command.PULL,
Command.MERGE_DRY_RUN
);
//J+
@@ -240,7 +241,11 @@ public class GitRepositoryServiceProvider extends RepositoryServiceProvider
return new GitTagsCommand(context, repository);
}
//~--- fields ---------------------------------------------------------------
@Override
public MergeDryRunCommand getMergeDryRunCommand() {
return new GitMergeDryRunCommand(context, repository);
}
//~--- fields ---------------------------------------------------------------
/** Field description */
private GitContext context;

View File

@@ -0,0 +1,23 @@
package sonia.scm.repository.spi;
import org.junit.Assert;
import org.junit.Test;
public class GitMergeDryRunCommandTest extends AbstractGitCommandTestBase {
@Test
public void shouldDetectNotMergeableBranches() {
GitMergeDryRunCommand command = createCommand();
MergeDryRunCommandRequest request = new MergeDryRunCommandRequest();
request.setBranchToMerge("test-branch");
request.setTargetBranch("master");
boolean mergeable = command.isMergeable(request);
Assert.assertFalse(mergeable);
}
private GitMergeDryRunCommand createCommand()
{
return new GitMergeDryRunCommand(createContext(), repository);
}
}