1. util.DefaultSVNAnnotateHandler.java
package util;
import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.wc.ISVNAnnotateHandler;
public class DefaultSVNAnnotateHandler implements ISVNAnnotateHandler {
private Map<Integer,String> lineAuthorMap = new HashMap<Integer,String>();
public void handleEOF() throws SVNException {
// TODO Auto-generated method stub
}
public void handleLine(Date date, long revision, String author, String line)
throws SVNException {
}
public void handleLine(Date date, long revision, String author,
String line, Date mergedDate, long mergedRevision,
String mergedAuthor, String mergedPath, int lineNumber)
throws SVNException {
lineAuthorMap.put(lineNumber, author);
}
public boolean handleRevision(Date date, long revision, String author,
File contents) throws SVNException {
// TODO Auto-generated method stub
return false;
}
public Map<Integer, String> getLineAuthorMap() {
return lineAuthorMap;
}
}
2. util.SVNUtil.java
package util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;
import java.util.logging.Logger;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.auth.BasicAuthenticationManager;
import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNRevision;
public class SVNUtil {
private static Logger logger = Logger.getLogger(SVNUtil.class.getName());
private static SVNClientManager getSVNClientManager(){
SVNClientManager svnClientManager = SVNClientManager.newInstance();
ISVNAuthenticationManager authManager = new BasicAuthenticationManager("xiao", "xiao");
svnClientManager.setAuthenticationManager(authManager );
return svnClientManager;
}
public static File getFileFromSVN(String filePath,
long revision,String destFilePath) {
File file = new File(destFilePath);
SVNURL reponsitoryURL = null;
FileOutputStream fos = null;
try {
reponsitoryURL = SVNURL.parseURIEncoded(filePath);
fos = new FileOutputStream(file);
SVNRepository reponsitory = getSVNClientManager().createRepository(reponsitoryURL, false);
reponsitory.getFile("", revision, null, fos);
} catch (Exception e) {
throw new RuntimeException(e);
}finally{
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
logger.warning(e.getMessage());
}
}
}
return file;
}
public static Map<Integer,String> getFileInfo(String filePath,long revision) throws SVNException{
SVNURL url = SVNURL.parseURIEncoded(filePath);
SVNRevision pegRevision = SVNRevision.create(revision);
SVNRevision startRevision = SVNRevision.create(0);
SVNRevision endRevision = SVNRevision.create(revision);
DefaultSVNAnnotateHandler handler = new DefaultSVNAnnotateHandler();
getSVNClientManager().getLogClient().doAnnotate(url, pegRevision, startRevision, endRevision, handler);
return handler.getLineAuthorMap();
}
}
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>svn</groupId> <artifactId>svn</artifactId> <packaging>jar</packaging> <version>0.0.1-SNAPSHOT</version> <name>svn</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>org.tmatesoft.svnkit</groupId> <artifactId>svnkit</artifactId> <version>1.8.5</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>