mirror of
				https://github.com/scm-manager/scm-manager.git
				synced 2025-10-31 10:35:56 +01:00 
			
		
		
		
	Merged in bugfix/get_modifications_for_svn (pull request #169)
fix get modifications for SVN
This commit is contained in:
		| @@ -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; | ||||
| @@ -19,23 +21,45 @@ public class SvnModificationsCommand extends AbstractSvnCommand implements Modif | ||||
|     super(context, repository); | ||||
|   } | ||||
|  | ||||
|  | ||||
|   @Override | ||||
|   @SuppressWarnings("unchecked") | ||||
|   public Modifications getModifications(String revision) { | ||||
|     Modifications modifications = null; | ||||
|     log.debug("get modifications {}", revision); | ||||
|   public Modifications getModifications(String revisionOrTransactionId) { | ||||
|     Modifications modifications; | ||||
|     try { | ||||
|       long revisionNumber = SvnUtil.parseRevision(revision, repository); | ||||
|       SVNRepository repo = open(); | ||||
|       Collection<SVNLogEntry> entries = repo.log(null, null, revisionNumber, | ||||
|         revisionNumber, true, true); | ||||
|       if (Util.isNotEmpty(entries)) { | ||||
|         modifications = SvnUtil.createModifications(entries.iterator().next(), revision); | ||||
|       if (SvnUtil.isTransactionEntryId(revisionOrTransactionId)) { | ||||
|         modifications = getModificationsFromTransaction(SvnUtil.getTransactionId(revisionOrTransactionId)); | ||||
|       } else { | ||||
|         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<SVNLogEntry> 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; | ||||
|   } | ||||
|  | ||||
| @@ -44,5 +68,4 @@ public class SvnModificationsCommand extends AbstractSvnCommand implements Modif | ||||
|     return getModifications(request.getRevision()); | ||||
|   } | ||||
|  | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user