使用SvnKit获得提交记录

由于工作需要通过JAVA获得SVN的提交记录,所以看了下SVNKit,

下面是代码,保存备份。

SvnKit项目地址:http://svnkit.com/index.html

package com.svnkit;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.apache.log4j.Logger;
import org.junit.BeforeClass;
import org.junit.Test;
import org.tmatesoft.svn.core.ISVNLogEntryHandler;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNLogEntry;
import org.tmatesoft.svn.core.SVNLogEntryPath;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.io.SVNRepositoryFactory;
import org.tmatesoft.svn.core.wc.SVNWCUtil;

public class SVNUtilTest {
    private static String url = "项目SVN路径";
    private static SVNRepository repository = null;

    @BeforeClass
    public static void setupLibrary() {
        DAVRepositoryFactory.setup();
        SVNRepositoryFactoryImpl.setup();
        FSRepositoryFactory.setup();
        try {
            repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(url));
        }
        catch (SVNException e) {
            logger.error(e.getErrorMessage(), e);
        }
        // 身份验证
        ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager("SVN用户名","SVN密码");
        repository.setAuthenticationManager(authManager);
    }

    @Test
    public void filterCommitHistoryTest() throws Exception {
        // 过滤条件
        final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        final Date begin = format.parse("2014-02-13");
        final Date end = format.parse("2014-02-14");
        final String author = "";
        long startRevision = 0;
        long endRevision = -1;//表示最后一个版本
        final List<String> history = new ArrayList<String>();
		//String[] 为过滤的文件路径前缀,为空表示不进行过滤
        repository.log(new String[]{""},
                       startRevision,
                       endRevision,
                       true,
                       true,
                       new ISVNLogEntryHandler() {
                           @Override
                           public void handleLogEntry(SVNLogEntry svnlogentry)
                                   throws SVNException {
				//依据提交时间进行过滤
                               if (svnlogentry.getDate().after(begin)
                                   && svnlogentry.getDate().before(end)) {
                                   // 依据提交人过滤
                                   if (!"".equals(author)) {
                                       if (author.equals(svnlogentry.getAuthor())) {
                                           fillResult(svnlogentry);
                                       }
                                   } else {
                                       fillResult(svnlogentry);
                                   }
                               }
                           }

                           public void fillResult(SVNLogEntry svnlogentry) {
                          //getChangedPaths为提交的历史记录MAP key为文件名,value为文件详情
                               history.addAll(svnlogentry.getChangedPaths().keySet());
                           }
                       });
        for (String path : history) {
            System.out.println(path);
        }
    }
}

猜你喜欢

转载自mjm13.iteye.com/blog/2017056