Merged in bugfix/get_modifications_for_svn (pull request #169)

fix get modifications for SVN
This commit is contained in:
Sebastian Sdorra
2019-02-04 11:59:47 +00:00

View File

@@ -4,6 +4,8 @@ import lombok.extern.slf4j.Slf4j;
import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNLogEntry; import org.tmatesoft.svn.core.SVNLogEntry;
import org.tmatesoft.svn.core.io.SVNRepository; 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.InternalRepositoryException;
import sonia.scm.repository.Modifications; import sonia.scm.repository.Modifications;
import sonia.scm.repository.Repository; import sonia.scm.repository.Repository;
@@ -19,23 +21,45 @@ public class SvnModificationsCommand extends AbstractSvnCommand implements Modif
super(context, repository); super(context, repository);
} }
@Override @Override
@SuppressWarnings("unchecked") public Modifications getModifications(String revisionOrTransactionId) {
public Modifications getModifications(String revision) { Modifications modifications;
Modifications modifications = null;
log.debug("get modifications {}", revision);
try { try {
long revisionNumber = SvnUtil.parseRevision(revision, repository); if (SvnUtil.isTransactionEntryId(revisionOrTransactionId)) {
SVNRepository repo = open(); modifications = getModificationsFromTransaction(SvnUtil.getTransactionId(revisionOrTransactionId));
Collection<SVNLogEntry> entries = repo.log(null, null, revisionNumber, } else {
revisionNumber, true, true); modifications = getModificationFromRevision(revisionOrTransactionId);
if (Util.isNotEmpty(entries)) {
modifications = SvnUtil.createModifications(entries.iterator().next(), revision);
} }
return modifications;
} catch (SVNException ex) { } 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; return modifications;
} }
@@ -44,5 +68,4 @@ public class SvnModificationsCommand extends AbstractSvnCommand implements Modif
return getModifications(request.getRevision()); return getModifications(request.getRevision());
} }
} }