svn根据版本号查找文件并下载到本地

来源:互联网 发布:调节阀口径计算软件 编辑:程序博客网 时间:2024/05/29 18:09
svn根据版本号查找文件并下载到本地
package com.mingya.util;import java.io.File;import java.io.FileWriter;import java.util.ArrayList;import java.util.Calendar;import java.util.Collection;import java.util.Iterator;import java.util.List;import org.tmatesoft.svn.core.SVNDepth;import org.tmatesoft.svn.core.SVNDirEntry;import org.tmatesoft.svn.core.SVNException;import org.tmatesoft.svn.core.SVNNodeKind;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.wc.DefaultSVNOptions;import org.tmatesoft.svn.core.io.SVNRepository;import org.tmatesoft.svn.core.io.SVNRepositoryFactory;import org.tmatesoft.svn.core.wc.ISVNOptions;import org.tmatesoft.svn.core.wc.SVNClientManager;import org.tmatesoft.svn.core.wc.SVNRevision;import org.tmatesoft.svn.core.wc.SVNUpdateClient;import org.tmatesoft.svn.core.wc.SVNWCUtil;public class DisplayRepositoryTree {private static String url = "https://192.168.30.32/svn/R/r_erp/源码";private static String name = "zhuxb";private static String password = "zhuxb";private static SVNURL repositoryURL = null;private static SVNRepository repository = null;private static SVNClientManager ourClientManager=null;private static SVNUpdateClient updateClient=null;    public void  execDownload(List<Integer> version){StringBuffer sb = new StringBuffer();Calendar ca = Calendar.getInstance();    StringBuffer year = new StringBuffer(""+ ca.get(Calendar.YEAR)+(ca.get(Calendar.MONTH)+1)+ca.get(Calendar.DATE));    File wcDir = new File("D:\\transfer\\"+year);if(wcDir.exists())wcDir.delete();//判断传入版本号if(version==null||version.size()==0){sb.append("版本号不能为空!");}else{//首先处理版本号 for(int i=0;i<version.size()-1;i++) {for(int j=1;j<version.size()-i;j++) {    Integer a;    if((version.get(j-1)).compareTo(version.get(j))>0) {   //比较两个整数的大小    a=version.get(j-1);    version.set((j-1),version.get(j));    version.set(j,a);    }} }int len = version.size();         DAVRepositoryFactory.setup();        try {        repositoryURL=SVNURL.parseURIEncoded(url);            repository = SVNRepositoryFactory.create(repositoryURL);                        ISVNOptions options = SVNWCUtil.createDefaultOptions(true);  //实例化客户端管理类  ourClientManager = SVNClientManager.newInstance((DefaultSVNOptions) options, name, password);  //要把版本库的内容check out到的目录  //通过客户端管理类获得updateClient类的实例。  updateClient = ourClientManager.getUpdateClient();  updateClient.setIgnoreExternals(false);  ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(name, password);    repository.setAuthenticationManager(authManager);    for(int i=0;i<len;i++){        sb.append(listEntries("",version.get(i),year.toString()));    }        } catch (SVNException svne) {            System.err.println("创建版本库实例时失败,版本库的URL是 '"+ url + "': " + svne.getMessage());            System.exit(1);        }                long latestRevision = -1;        try {            latestRevision = repository.getLatestRevision();        } catch (SVNException svne) {            System.err                    .println("获取最新版本号时出错: "                            + svne.getMessage());            System.exit(1);        }}//写日志if(sb.length()>0){File file = new File("D:/svndownlog/"+year+".txt");//if(!file.exists()) file.mkdir();FileWriter writer=null;      try {    writer = new FileWriter(file);     writer.write(sb.toString());    writer.flush();    writer.close();  } catch (Exception e) {e.printStackTrace();}      }}/*     * 此函数递归的获取版本库中某一目录下的所有条目。     */    public static String listEntries(String path, int version,String year)            throws SVNException {    StringBuffer sb = new StringBuffer();        //获取版本库的path目录下的所有条目。参数-1表示是最新版本。        Collection entries = repository.getDir(path, version, null,                (Collection) null);        Iterator iterator = entries.iterator();        int size=0;        while (iterator.hasNext()) {            SVNDirEntry entry = (SVNDirEntry) iterator.next();            if(entry.getRevision()==version){            if(entry.getKind()==SVNNodeKind.FILE){            System.out.println("/" + (path.equals("") ? "" : path + "/")                    + entry.getName()) ;            sb.append("第"+(size+1)+"个版本号"+version+"开始下载->>>>\n");            SVNURL u = SVNURL.parseURIEncoded(repositoryURL+"/"+path+"/"+entry.getName());            File fi = new File("D:/transfer/"+year+"/"+path+"/"+entry.getName());long workingVersion = 0;try {workingVersion = updateClient.doExport(u, fi, SVNRevision.HEAD,SVNRevision.parse(version+""), "downloadModel", true, false);//workingVersion = updateClient.doCheckout(u, fi, SVNRevision.HEAD, SVNRevision.parse(version+""), SVNDepth.INFINITY,false);} catch (SVNException e) {e.printStackTrace();}System.out.println("把版本:"+workingVersion+" check out 到目录:"+fi+"中。");  sb.append("第"+(size+1)+"个版本号"+version+"结束下载-<<<<\n");size++;            }            /*             * 检查此条目是否为目录,如果为目录递归执行             */            if (entry.getKind() == SVNNodeKind.DIR) {                listEntries((path.equals("")) ? entry.getName()                        : path + "/" + entry.getName(),version,year);            }            }        }        return sb.toString();    }        public static void main(String[] args) {    List<Integer> version = new ArrayList<Integer>();    version.add(36724);    version.add(36718);    //version.add(e);    //version.add(e);        DisplayRepositoryTree rt = new DisplayRepositoryTree();    rt.execDownload(version);    }}
 
代码下载见下方链接

0 0
原创粉丝点击