mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-06 21:45:43 +01:00
Include dry run in merge command
This commit is contained in:
@@ -6,6 +6,8 @@ import sonia.scm.repository.CloseableWrapper;
|
||||
import sonia.scm.repository.GitWorkdirPool;
|
||||
import sonia.scm.repository.InternalRepositoryException;
|
||||
import sonia.scm.repository.Repository;
|
||||
import sonia.scm.repository.api.MergeCommandResult;
|
||||
import sonia.scm.repository.api.MergeDryRunCommandResult;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -19,7 +21,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean merge(MergeCommandRequest request) {
|
||||
public MergeCommandResult merge(MergeCommandRequest request) {
|
||||
try (CloseableWrapper<org.eclipse.jgit.lib.Repository> workingCopy = workdirPool.getWorkingCopy(context.open().getDirectory())) {
|
||||
org.eclipse.jgit.lib.Repository repository = workingCopy.get();
|
||||
ResolveMerger merger = (ResolveMerger) MergeStrategy.RECURSIVE.newMerger(repository);
|
||||
@@ -27,7 +29,18 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
|
||||
if (mergeResult) {
|
||||
// TODO push and verify push was successful
|
||||
}
|
||||
return mergeResult;
|
||||
return new MergeCommandResult(mergeResult);
|
||||
} catch (IOException e) {
|
||||
throw new InternalRepositoryException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public MergeDryRunCommandResult dryRun(MergeCommandRequest request) {
|
||||
try {
|
||||
org.eclipse.jgit.lib.Repository repository = context.open();
|
||||
ResolveMerger merger = (ResolveMerger) MergeStrategy.RECURSIVE.newMerger(repository, true);
|
||||
return new MergeDryRunCommandResult(merger.merge(repository.resolve(request.getBranchToMerge()), repository.resolve(request.getTargetBranch())));
|
||||
} catch (IOException e) {
|
||||
throw new InternalRepositoryException(e);
|
||||
}
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -241,11 +241,6 @@ public class GitRepositoryServiceProvider extends RepositoryServiceProvider
|
||||
return new GitTagsCommand(context, repository);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MergeDryRunCommand getMergeDryRunCommand() {
|
||||
return new GitMergeDryRunCommand(context, repository);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MergeCommand getMergeCommand() {
|
||||
return new GitMergeCommand(context, repository, handler.getWorkdirPool());
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package sonia.scm.repository.spi;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class GitMergeCommandTest extends AbstractGitCommandTestBase {
|
||||
@Test
|
||||
public void shouldDetectNotMergeableBranches() {
|
||||
GitMergeCommand command = createCommand();
|
||||
MergeCommandRequest request = new MergeCommandRequest();
|
||||
request.setBranchToMerge("test-branch");
|
||||
request.setTargetBranch("master");
|
||||
|
||||
boolean mergeable = command.dryRun(request).isMergeable();
|
||||
|
||||
Assert.assertFalse(mergeable);
|
||||
}
|
||||
|
||||
private GitMergeCommand createCommand() {
|
||||
return new GitMergeCommand(createContext(), repository, null);
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user