fix get modifications for SVN

This commit is contained in:
Mohamed Karray
2019-01-29 14:05:12 +01:00
parent af3166c2e6
commit d201c156f0

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;
@@ -23,20 +25,31 @@ public class SvnModificationsCommand extends AbstractSvnCommand implements Modif
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Modifications getModifications(String revision) { public Modifications getModifications(String revision) {
Modifications modifications = null; final Modifications modifications = new Modifications();
log.debug("get modifications {}", revision); log.debug("get modifications {}", revision);
try { try {
long revisionNumber = SvnUtil.parseRevision(revision, repository); 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(); SVNRepository repo = open();
Collection<SVNLogEntry> entries = repo.log(null, null, revisionNumber, Collection<SVNLogEntry> entries = repo.log(null, null, revisionNumber,
revisionNumber, true, true); revisionNumber, true, true);
if (Util.isNotEmpty(entries)) { if (Util.isNotEmpty(entries)) {
modifications = SvnUtil.createModifications(entries.iterator().next(), revision); return SvnUtil.createModifications(entries.iterator().next(), revision);
}
} }
} catch (SVNException ex) { } catch (SVNException ex) {
throw new InternalRepositoryException(repository, "could not open repository", ex); throw new InternalRepositoryException(repository, "could not open repository", ex);
} }
return modifications; return null;
} }
@Override @Override