mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-07 05:55:44 +01:00
Specify not mergeable files in merge result
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user