diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeStrategy.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeStrategy.java index 8e9f79d1b9..4b8280c669 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeStrategy.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeStrategy.java @@ -88,7 +88,14 @@ abstract class GitMergeStrategy extends AbstractGitCommand.GitCloneWorker { + FileWriter fw = null; + try { + fw = new FileWriter(new File(git.getRepository().getWorkTree(), "b.txt"), true); + BufferedWriter bw = new BufferedWriter(fw); + bw.write("change"); + bw.newLine(); + bw.close(); + } catch (IOException e) { + e.printStackTrace(); + } + }); + MergeCommandRequest request = new MergeCommandRequest(); + request.setBranchToMerge("mergeable"); + request.setTargetBranch("master"); + request.setMergeStrategy(MergeStrategy.MERGE_COMMIT); + request.setAuthor(new Person("Dirk Gently", "dirk@holistic.det")); + request.setMessageTemplate("simple"); + + Assertions.assertThrows(UnexpectedMergeResultException.class, () -> command.merge(request)); + } + @Test public void shouldTakeAuthorFromSubjectIfNotSet() throws IOException, GitAPIException { SimplePrincipalCollection principals = new SimplePrincipalCollection(); principals.add("admin", REALM); - principals.add( new User("dirk", "Dirk Gently", "dirk@holistic.det"), REALM); + principals.add(new User("dirk", "Dirk Gently", "dirk@holistic.det"), REALM); shiro.setSubject( new Subject.Builder() .principals(principals) @@ -364,6 +395,20 @@ public class GitMergeCommandTest extends AbstractGitCommandTestBase { } private GitMergeCommand createCommand() { - return new GitMergeCommand(createContext(), repository, new SimpleGitWorkdirFactory(new WorkdirProvider())); + return createCommand(git -> { + }); + } + + private GitMergeCommand createCommand(Consumer interceptor) { + return new GitMergeCommand(createContext(), repository, new SimpleGitWorkdirFactory(new WorkdirProvider())) { + @Override + > R inClone(Function workerSupplier, GitWorkdirFactory workdirFactory, String initialBranch) { + Function interceptedWorkerSupplier = git -> { + interceptor.accept(git); + return workerSupplier.apply(git); + }; + return super.inClone(interceptedWorkerSupplier, workdirFactory, initialBranch); + } + }; } } diff --git a/scm-webapp/src/main/resources/locales/de/plugins.json b/scm-webapp/src/main/resources/locales/de/plugins.json index 95179a94e2..809da9d0df 100644 --- a/scm-webapp/src/main/resources/locales/de/plugins.json +++ b/scm-webapp/src/main/resources/locales/de/plugins.json @@ -199,6 +199,10 @@ "8LRncum0S1": { "displayName": "Interner Fehler im Repository", "description": "Bei der Bearbeitung des internen Repositories ist ein Fehler oder ein unerwarteter Zustand aufgetreten. Bitte prüfen Sie die Logs für weitere Informationen." + }, + "4GRrgkSC01": { + "displayName": "Unerwartetes Merge-Ergebnis", + "description": "Der Merge hatte ein unerwartetes Ergebis, das nicht automatisiert behandelt werden konnte. Nähere Details sind im Log zu finden. Führen Sie den Merge ggf. manuell durch." } }, "namespaceStrategies": { diff --git a/scm-webapp/src/main/resources/locales/en/plugins.json b/scm-webapp/src/main/resources/locales/en/plugins.json index 2353184ada..69e8d057ee 100644 --- a/scm-webapp/src/main/resources/locales/en/plugins.json +++ b/scm-webapp/src/main/resources/locales/en/plugins.json @@ -199,6 +199,10 @@ "8LRncum0S1": { "displayName": "Internal repository error", "description": "There was an error or an unexpected condition while handling the native repository. Please consult the logs for further information." + }, + "4GRrgkSC01": { + "displayName": "Unexpected merge result", + "description": "The merge led to an unexpected result, that could not be handled automatically. More details could be found in the log. Please merge the branches manually." } }, "namespaceStrategies": {