Specify not mergeable files in merge result

This commit is contained in:
René Pfeuffer
2018-11-07 13:34:35 +01:00
parent 26d5e6e062
commit 2d04e6c2f0
3 changed files with 41 additions and 18 deletions

View File

@@ -35,9 +35,10 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
public MergeCommandResult merge(MergeCommandRequest request) {
try (WorkingCopy workingCopy = workdirFactory.createWorkingCopy(context)) {
Repository repository = workingCopy.get();
logger.debug("cloned repository to folder {}", repository.getWorkTree());
return new MergeWorker(repository).merge(request);
} catch (IOException e) {
throw new InternalRepositoryException(e);
throw new InternalRepositoryException("could not clone repository for merge", e);
}
}
@@ -48,7 +49,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
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);
throw new InternalRepositoryException("could not clone repository for merge", e);
}
}
@@ -65,7 +66,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
try {
clone.checkout().setName(target).call();
} catch (GitAPIException e) {
throw new InternalRepositoryException("could not checkout target branch " + target, e);
throw new InternalRepositoryException("could not checkout target branch for merge: " + target, e);
}
MergeResult result;
try {
@@ -78,16 +79,17 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
throw new InternalRepositoryException("could not merge branch " + toMerge + " into " + target, e);
}
if (result.getMergeStatus().isSuccessful()) {
logger.info("merged branch {} into {}", toMerge, target);
logger.debug("merged branch {} into {}", toMerge, target);
try {
clone.push().call();
} catch (GitAPIException e) {
throw new InternalRepositoryException("could not push merged branch " + toMerge + " to origin", e);
}
return new MergeCommandResult(true);
logger.debug("pushed merged branch {}", target);
return MergeCommandResult.success();
} else {
logger.info("could not merged branch {} into {} due to {}", toMerge, target, result.getConflicts().keySet());
return new MergeCommandResult(false);
logger.info("could not merged branch {} into {} due to conflict in paths {}", toMerge, target, result.getConflicts().keySet());
return MergeCommandResult.failure(result.getConflicts().keySet());
}
}

View File

@@ -1,9 +1,11 @@
package sonia.scm.repository.spi;
import org.junit.Assert;
import org.assertj.core.api.Assertions;
import org.junit.Test;
import sonia.scm.repository.api.MergeCommandResult;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
public class GitMergeCommandTest extends AbstractGitCommandTestBase {
@@ -38,9 +40,9 @@ public class GitMergeCommandTest extends AbstractGitCommandTestBase {
request.setTargetBranch("master");
request.setBranchToMerge("mergeable");
boolean mergeable = command.merge(request).isSuccess();
MergeCommandResult mergeCommandResult = command.merge(request);
assertThat(mergeable).isTrue();
assertThat(mergeCommandResult.isSuccess()).isTrue();
}
@Test
@@ -50,9 +52,10 @@ public class GitMergeCommandTest extends AbstractGitCommandTestBase {
request.setBranchToMerge("test-branch");
request.setTargetBranch("master");
boolean mergeable = command.merge(request).isSuccess();
MergeCommandResult mergeCommandResult = command.merge(request);
assertThat(mergeable).isFalse();
assertThat(mergeCommandResult.isSuccess()).isFalse();
assertThat(mergeCommandResult.getFilesWithConflict()).containsExactly("a.txt");
}
private GitMergeCommand createCommand() {