From 33e8d30b6210566ec54f7b5f1cef6672fed00933 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Mon, 7 Aug 2023 23:17:25 +0200 Subject: [PATCH] Throw `NoChangesMadeException` for empty commits in SVN repositories Committed-by: Florian Scholdei --- gradle/changelog/svn_no_changes_exception.yaml | 2 ++ .../java/sonia/scm/repository/spi/SvnLogCommand.java | 1 - .../sonia/scm/repository/spi/SvnModifyCommand.java | 4 ++++ .../scm/repository/spi/SvnModifyCommandTest.java | 11 +++++++++++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 gradle/changelog/svn_no_changes_exception.yaml diff --git a/gradle/changelog/svn_no_changes_exception.yaml b/gradle/changelog/svn_no_changes_exception.yaml new file mode 100644 index 0000000000..5e32d9efc4 --- /dev/null +++ b/gradle/changelog/svn_no_changes_exception.yaml @@ -0,0 +1,2 @@ +- type: fixed + description: Throw `NoChangesMadeException` for empty commits in SVN repositories diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnLogCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnLogCommand.java index a7103d77e0..139a007d32 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnLogCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnLogCommand.java @@ -29,7 +29,6 @@ import com.google.common.base.Strings; import com.google.common.collect.Lists; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.tmatesoft.svn.core.ISVNLogEntryHandler; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNLogEntry; import org.tmatesoft.svn.core.io.SVNRepository; diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModifyCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModifyCommand.java index 667b140f87..8f83c89ea0 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModifyCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModifyCommand.java @@ -35,6 +35,7 @@ import org.tmatesoft.svn.core.wc.SVNWCClient; import org.tmatesoft.svn.core.wc.SVNWCUtil; import sonia.scm.ConcurrentModificationException; import sonia.scm.ContextEntry; +import sonia.scm.NoChangesMadeException; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; import sonia.scm.repository.SvnWorkingCopyFactory; @@ -112,6 +113,9 @@ public class SvnModifyCommand implements ModifyCommand { true, SVNDepth.INFINITY ); + if (svnCommitInfo.toString().equals("EMPTY COMMIT")) { + throw new NoChangesMadeException(repository); + } return String.valueOf(svnCommitInfo.getNewRevision()); } catch (SVNException e) { throw withPattern(SVN_ERROR_PATTERN).forMessage(repository, e.getErrorMessage().getRootErrorMessage().getFullMessage()); diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnModifyCommandTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnModifyCommandTest.java index 8128a1e5f2..cfd07c54a3 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnModifyCommandTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnModifyCommandTest.java @@ -35,6 +35,7 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; import sonia.scm.AlreadyExistsException; import sonia.scm.ConcurrentModificationException; +import sonia.scm.NoChangesMadeException; import sonia.scm.ScmConstraintViolationException; import sonia.scm.repository.Person; import sonia.scm.repository.api.FileLock; @@ -124,6 +125,16 @@ public class SvnModifyCommandTest extends AbstractSvnCommandTestBase { assertThat(new File(workingCopy.getWorkingRepository(), "Test123")).exists(); } + @Test + public void shouldThrowNoChangesMadeExceptionIfEmptyCommit() throws IOException { + File testfile = temporaryFolder.newFile("Test123"); + + ModifyCommandRequest request = prepareModifyCommandRequest(); + request.addRequest(new ModifyCommandRequest.ModifyFileRequest("g/h/j.txt", testfile)); + + assertThrows(NoChangesMadeException.class, () -> svnModifyCommand.execute(request)); + } + @Test public void shouldAddNewFileInDefaultPath() throws IOException { File testfile = temporaryFolder.newFile("Test123");