package util;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import org.tmatesoft.svn.core.ISVNLogEntryHandler;
import org.tmatesoft.svn.core.SVNDirEntry;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNLogEntry;
import org.tmatesoft.svn.core.SVNLogEntryPath;
import org.tmatesoft.svn.core.SVNNodeKind;
import org.tmatesoft.svn.core.SVNProperties;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.io.SVNRepositoryFactory;
import org.tmatesoft.svn.core.wc.SVNDiffClient;
import org.tmatesoft.svn.core.wc.SVNLogClient;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc.SVNWCUtil;
public class SvnStatistical {
//svn账号
private static String userName = "";
//svn密码
private static String password = "";
//svn地址,注意地址以svn开始和以https开始的调用的方法是不一样的,SVNRepository jar里会自动区分
private static String urlString = "";
//临时文件存放地址
private static String tempDir = "E:\\demo\\";
//提交人
private static String submitAuth = "";
private static DefaultSVNOptions options = SVNWCUtil.createDefaultOptions(true);
//临时文件名
private static Random random = new Random();
private static SVNRepository repos;
private static ISVNAuthenticationManager authManager;
//新增文件数量
private static int addFileNum = 0;
//修改文件数量
private static int updateFileNum = 0;
public static void main(String[] args) throws ParseException, SVNException {
authManager = SVNWCUtil.createDefaultAuthenticationManager(new File(tempDir+"/auth"), userName, password.toCharArray());
options.setDiffCommand("-x -w");
repos = SVNRepositoryFactory.create(SVNURL
.parseURIEncoded(urlString));
repos.setAuthenticationManager(authManager);
Calendar calendar = Calendar.getInstance();
if(calendar.get(Calendar.DAY_OF_WEEK)==2) {//如果当天是周一则需要统计周五至周天的数据
calendar.add(Calendar.DAY_OF_MONTH, -3);
} else {
calendar.add(Calendar.DAY_OF_MONTH, -1);
}
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//统计昨天代码提交情况
Date after = format.parse(format.format(new Date()));
Date before = format.parse(format.format(calendar.getTime()));
try {
int sum = staticticsCodeAddByTime(before, after);
submitAuth = submitAuth.substring(1,submitAuth.length());
int total = updateFileNum+addFileNum;
System.out.println("代码提交明细\n"+format.format(before)+" 00:00:00 to "+format.format(before)+" 23:59:59"
+ "\n提交行数:sum="+sum+""
+ "\n涉及文件"+total+"个,其中修改文件"+updateFileNum+"个,新增文件"+addFileNum+"个"
+ "\n提交人:"+submitAuth);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取(st,et)时间内的提交记录
public static SVNLogEntry[] getLogByTime(Date st, Date et) throws SVNException{
long startRevision