SVN可视化平台(3) -- svnkit移动文件,实现一键归档

avatar 2021年12月20日11:23:01 0 118 views

续接上文

本文介绍svnkit移动文件

业务需求时,在页面对某个项目进行一键归档,输入版本号

会把项目里的开发库和基线库复制到历史库中,然后创建新的开发库和历史库模板

本文主要介绍移动文件这部分

直接上代码

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.tmatesoft.svn.core.SVNException;
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.io.dav.DAVRepositoryFactory;
import org.tmatesoft.svn.core.wc.ISVNOptions;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNCopySource;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc.SVNWCUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * @author liuyanzhao
 * @date 2021/12/20 10:02
 */
@Slf4j
public class SVNUtilDemo
{

    public static ISVNOptions isvnOptions;

    // 初始化
    static
    {
        //1.根据访问协议初始化工厂
        DAVRepositoryFactory.setup();
        //2.使用默认选项
        isvnOptions = SVNWCUtil.createDefaultOptions(true);
    }

    /**
     * 拷贝文件夹
     * 注意:支持多层文件夹创建,支持目标文件夹已存在不报错,支持一次复制多个文件夹
     *
     * @param username
     * @param password
     * @param sourceUrlList
     * @param targetUrl
     * @param message
     * @throws SVNException
     */
    public static void doMove(String username, String password, List<String> sourceUrlList, String targetUrl, String message) throws  Exception
    {
        try
        {
            //3.初始化权限
            ISVNAuthenticationManager isvnAuthenticationManager = SVNWCUtil.createDefaultAuthenticationManager(username, password.toCharArray());
            //4.创建SVNClientManager的实例
            SVNClientManager svnClientManager = SVNClientManager.newInstance(isvnOptions, isvnAuthenticationManager);
            // 5.进行copy
            SVNCopySource[] sources = new SVNCopySource[sourceUrlList.size()];
            for (int i = 0; i < sourceUrlList.size(); i++)
            {
                sources[i] = new SVNCopySource(SVNRevision.HEAD, SVNRevision.HEAD, SVNURL.parseURIEncoded(sourceUrlList.get(i)));
            }
            svnClientManager.getCopyClient().doCopy(sources, SVNURL.parseURIEncoded(targetUrl),
                    true, true, false, message, new SVNProperties());
        } catch (Exception e)
        {
            log.error("复制文件夹失败,username:{}, password:{}, sourceUrlList:{}, targetUrl:{}, message:{}, e:{}",
                    username, password, JSON.toJSONString(sourceUrlList), targetUrl, message, e);
            throw new Exception("复制文件夹失败");
        }
    }

    /**
     * 功能说明:
     * 判断文件是否存在
     */
    public static void main(String[] args) throws Exception
    {
        String username = "admin"; // svn账号
        String password = "123456"; // svn密码
        List<String> sourceUrl = new ArrayList<>();
        sourceUrl.add("http://127.0.0.1/svn/项目/测试项目1/开发库");
        sourceUrl.add("http://127.0.0.1/svn/项目/测试项目1/基线库");
        String targetUrl = "http://127.0.0.1/svn/项目/测试项目1/历史库/v1.0.0";
        String message = "移动开发库基线库到历史库";
        doMove(username, password, sourceUrl, targetUrl, message);
    }

}
  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

avatar 登录者:匿名
可以匿名评论或者登录后台评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0