From d201c156f0fb927dd3efbf21448ec9d55214538a Mon Sep 17 00:00:00 2001 From: Mohamed Karray Date: Tue, 29 Jan 2019 14:05:12 +0100 Subject: [PATCH 1/3] fix get modifications for SVN --- .../spi/SvnModificationsCommand.java | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModificationsCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModificationsCommand.java index 4b4f655b12..bbcaa9a9d5 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModificationsCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModificationsCommand.java @@ -4,6 +4,8 @@ import lombok.extern.slf4j.Slf4j; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNLogEntry; import org.tmatesoft.svn.core.io.SVNRepository; +import org.tmatesoft.svn.core.wc.SVNClientManager; +import org.tmatesoft.svn.core.wc.admin.SVNLookClient; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Modifications; import sonia.scm.repository.Repository; @@ -23,20 +25,31 @@ public class SvnModificationsCommand extends AbstractSvnCommand implements Modif @Override @SuppressWarnings("unchecked") public Modifications getModifications(String revision) { - Modifications modifications = null; + final Modifications modifications = new Modifications(); log.debug("get modifications {}", revision); try { - long revisionNumber = SvnUtil.parseRevision(revision, repository); - SVNRepository repo = open(); - Collection entries = repo.log(null, null, revisionNumber, - revisionNumber, true, true); - if (Util.isNotEmpty(entries)) { - modifications = SvnUtil.createModifications(entries.iterator().next(), revision); + if (SvnUtil.isTransactionEntryId(revision)) { + + SVNLookClient client = SVNClientManager.newInstance().getLookClient(); + client.doGetChanged(context.getDirectory(), SvnUtil.getTransactionId(revision), + e -> SvnUtil.appendModification(modifications, e.getType(), e.getPath()), true); + + return modifications; + + } else { + + long revisionNumber = SvnUtil.getRevisionNumber(revision, repository); + SVNRepository repo = open(); + Collection entries = repo.log(null, null, revisionNumber, + revisionNumber, true, true); + if (Util.isNotEmpty(entries)) { + return SvnUtil.createModifications(entries.iterator().next(), revision); + } } } catch (SVNException ex) { throw new InternalRepositoryException(repository, "could not open repository", ex); } - return modifications; + return null; } @Override From 5ac065e5dac68e92eb8bf5e16a06435c857d8832 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 4 Feb 2019 11:39:59 +0100 Subject: [PATCH 2/3] separate methods for reading modification from transaction and from revision --- .../spi/SvnModificationsCommand.java | 56 +++++++++++-------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModificationsCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModificationsCommand.java index bbcaa9a9d5..580bc0b77d 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModificationsCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModificationsCommand.java @@ -21,41 +21,51 @@ public class SvnModificationsCommand extends AbstractSvnCommand implements Modif super(context, repository); } - @Override - @SuppressWarnings("unchecked") - public Modifications getModifications(String revision) { - final Modifications modifications = new Modifications(); - log.debug("get modifications {}", revision); + public Modifications getModifications(String revisionOrTransactionId) { + Modifications modifications; try { - if (SvnUtil.isTransactionEntryId(revision)) { - - SVNLookClient client = SVNClientManager.newInstance().getLookClient(); - client.doGetChanged(context.getDirectory(), SvnUtil.getTransactionId(revision), - e -> SvnUtil.appendModification(modifications, e.getType(), e.getPath()), true); - - return modifications; - + if (SvnUtil.isTransactionEntryId(revisionOrTransactionId)) { + modifications = getModificationsFromTransaction(SvnUtil.getTransactionId(revisionOrTransactionId)); } else { - - long revisionNumber = SvnUtil.getRevisionNumber(revision, repository); - SVNRepository repo = open(); - Collection entries = repo.log(null, null, revisionNumber, - revisionNumber, true, true); - if (Util.isNotEmpty(entries)) { - return SvnUtil.createModifications(entries.iterator().next(), revision); - } + modifications = getModificationFromRevision(revisionOrTransactionId); } + return modifications; } catch (SVNException ex) { - throw new InternalRepositoryException(repository, "could not open repository", ex); + throw new InternalRepositoryException( + repository, + "failed to get svn modifications for " + revisionOrTransactionId, + ex + ); + } + } + + @SuppressWarnings("unchecked") + private Modifications getModificationFromRevision(String revision) throws SVNException { + log.debug("get svn modifications from revision: {}", revision); + long revisionNumber = SvnUtil.getRevisionNumber(revision, repository); + SVNRepository repo = open(); + Collection entries = repo.log(null, null, revisionNumber, + revisionNumber, true, true); + if (Util.isNotEmpty(entries)) { + return SvnUtil.createModifications(entries.iterator().next(), revision); } return null; } + private Modifications getModificationsFromTransaction(String transaction) throws SVNException { + log.debug("get svn modifications from transaction: {}", transaction); + final Modifications modifications = new Modifications(); + SVNLookClient client = SVNClientManager.newInstance().getLookClient(); + client.doGetChanged(context.getDirectory(), transaction, + e -> SvnUtil.appendModification(modifications, e.getType(), e.getPath()), true); + + return modifications; + } + @Override public Modifications getModifications(ModificationsCommandRequest request) { return getModifications(request.getRevision()); } - } From 1dfbcc336f8ac9b9989446997475ed3fc99e8f8e Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 4 Feb 2019 11:59:47 +0000 Subject: [PATCH 3/3] Close branch bugfix/get_modifications_for_svn