博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SVNKit getFileFromSVN
阅读量:5880 次
发布时间:2019-06-19

本文共 9762 字,大约阅读时间需要 32 分钟。

 

/* * ==================================================================== * Copyright (c) 2004-2011 TMate Software Ltd.  All rights reserved. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution.  The terms * are also available at http://svnkit.com/license.html * If newer versions of this license are posted there, you may use a * newer version instead, at your option. * ==================================================================== */package org.tmatesoft.svn.examples.repository;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.Iterator;import org.tmatesoft.svn.core.SVNException;import org.tmatesoft.svn.core.SVNNodeKind;import org.tmatesoft.svn.core.SVNProperties;import org.tmatesoft.svn.core.SVNProperty;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;/* * This example shows how to fetch a file and its properties from the repository * at the latest (HEAD) revision . If the file is a text (either it has no * svn:mime-type property at all or if has and the property value is text/-like) * its contents as well as properties will be displayed in the console, * otherwise - only properties.  * As an example here's a part of one of the * program layouts (for the default url and file path used in the program): *   * File property: svn:entry:revision=2802 * File property: svn:entry:checksum=435f2f0d33d12907ddb6dfd611825ec9 * File property: svn:wc:ra_dav:version-url=/repos/svnkit/!svn/ver/2795/trunk/www/license.html * File property: svn:entry:last-author=alex * File property: svn:entry:committed-date=2006-11-13T21:34:27.908657Z * File property: svn:entry:committed-rev=2795 * File contents: *  *  *  * 
* SVNKit :: License * * *

The TMate Open Source License.

*
 * ...................................... * --------------------------------------------- * Repository latest revision: 2802 */public class DisplayFile {    /*     * args parameter is used to obtain a repository location URL, user's     * account name & password to authenticate him to the server, the file path     * in the rpository (the file path should be relative to the the     * path/to/repository part of the repository location URL).     */    public static void main(String[] args) {        /*         * Default values:         */        String url = "http://svn.svnkit.com/repos/svnkit/trunk";        String name = "anonymous";        String password = "anonymous";        String filePath = "www/license.html";        /*         * Initializes the library (it must be done before ever using the         * library itself)         */        setupLibrary();        if (args != null) {            /*             * Obtains a repository location URL             */            url = (args.length >= 1) ? args[0] : url;            /*             * Obtains a file path             */            filePath = (args.length >= 2) ? args[1] : filePath;            /*             * Obtains an account name (will be used to authenticate the user to             * the server)             */            name = (args.length >= 3) ? args[2] : name;            /*             * Obtains a password             */            password = (args.length >= 4) ? args[3] : password;        }        SVNRepository repository = null;        try {            /*             * Creates an instance of SVNRepository to work with the repository.             * All user's requests to the repository are relative to the             * repository location used to create this SVNRepository.             * SVNURL is a wrapper for URL strings that refer to repository locations.             */            repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(url));        } catch (SVNException svne) {            /*             * Perhaps a malformed URL is the cause of this exception             */            System.err                    .println("error while creating an SVNRepository for the location '"                            + url + "': " + svne.getMessage());            System.exit(1);        }        /*         * User's authentication information (name/password) is provided via  an          * ISVNAuthenticationManager  instance.  SVNWCUtil  creates  a   default          * authentication manager given user's name and password.         *          * Default authentication manager first attempts to use provided user name          * and password and then falls back to the credentials stored in the          * default Subversion credentials storage that is located in Subversion          * configuration area. If you'd like to use provided user name and password          * only you may use BasicAuthenticationManager class instead of default          * authentication manager:         *          *  authManager = new BasicAuthenticationsManager(userName, userPassword);         *           * You may also skip this point - anonymous access will be used.          */        ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(name, password);        repository.setAuthenticationManager(authManager);        /*         * This Map will be used to get the file properties. Each Map key is a         * property name and the value associated with the key is the property         * value.         */        SVNProperties fileProperties = new SVNProperties();        ByteArrayOutputStream baos = new ByteArrayOutputStream();        try {            /*             * Checks up if the specified path really corresponds to a file. If             * doesn't the program exits. SVNNodeKind is that one who says what is             * located at a path in a revision. -1 means the latest revision.             */            SVNNodeKind nodeKind = repository.checkPath(filePath, -1);                        if (nodeKind == SVNNodeKind.NONE) {                System.err.println("There is no entry at '" + url + "'.");                System.exit(1);            } else if (nodeKind == SVNNodeKind.DIR) {                System.err.println("The entry at '" + url                        + "' is a directory while a file was expected.");                System.exit(1);            }            /*             * Gets the contents and properties of the file located at filePath             * in the repository at the latest revision (which is meant by a             * negative revision number).             */            repository.getFile(filePath, -1, fileProperties, baos);        } catch (SVNException svne) {            System.err.println("error while fetching the file contents and properties: " + svne.getMessage());            System.exit(1);        }        /*         * Here the SVNProperty class is used to get the value of the         * svn:mime-type property (if any). SVNProperty is used to facilitate         * the work with versioned properties.         */        String mimeType = fileProperties.getStringValue(SVNProperty.MIME_TYPE);        /*         * SVNProperty.isTextMimeType(..) method checks up the value of the mime-type         * file property and says if the file is a text (true) or not (false).         */        boolean isTextType = SVNProperty.isTextMimeType(mimeType);        Iterator iterator = fileProperties.nameSet().iterator();        /*         * Displays file properties.         */        while (iterator.hasNext()) {            String propertyName = (String) iterator.next();            String propertyValue = fileProperties.getStringValue(propertyName);            System.out.println("File property: " + propertyName + "="                    + propertyValue);        }        /*         * Displays the file contents in the console if the file is a text.         */        if (isTextType) {            System.out.println("File contents:");            System.out.println();            try {                baos.writeTo(System.out);            } catch (IOException ioe) {                ioe.printStackTrace();            }        } else {            System.out                    .println("File contents can not be displayed in the console since the mime-type property says that it's not a kind of a text file.");        }        /*         * Gets the latest revision number of the repository         */        long latestRevision = -1;        try {            latestRevision = repository.getLatestRevision();        } catch (SVNException svne) {            System.err.println("error while fetching the latest repository revision: " + svne.getMessage());            System.exit(1);        }        System.out.println("");        System.out.println("---------------------------------------------");        System.out.println("Repository latest revision: " + latestRevision);        System.exit(0);    }    /*     * Initializes the library to work with a repository via      * different protocols.     */    private static void setupLibrary() {        /*         * For using over http:// and https://         */        DAVRepositoryFactory.setup();        /*         * For using over svn:// and svn+xxx://         */        SVNRepositoryFactoryImpl.setup();                /*         * For using over file:///         */        FSRepositoryFactory.setup();    }}

 

http://wiki.svnkit.com/Printing_Out_File_Contents

http://svn.svnkit.com/repos/svnkit/tags/1.3.5/doc/examples/src/org/tmatesoft/svn/examples/repository/DisplayFile.java

 

转载地址:http://rgcix.baihongyu.com/

你可能感兴趣的文章
Xcode全局替换内容,一键Replace
查看>>
1000 加密算法
查看>>
exif_imagetype() 函数在linux下的php中不存在
查看>>
Ruby的case语句
查看>>
Linux的链接文件-ln命令
查看>>
maven的tomcat插件如何进行debug调试
查看>>
table表头固定
查看>>
截取字符串中两个字符串中的字符串
查看>>
spring xml properties split with comma for list
查看>>
判断点是否在三角形内
查看>>
Android实战简易教程-第二十三枪(基于Baas的用户注冊验证username是否反复功能!)...
查看>>
在odl中怎样实现rpc
查看>>
leetcode 110 Balanced Binary Tree
查看>>
python活用isdigit方法显示系统进程
查看>>
项目开发总结
查看>>
知行合一
查看>>
jmeter插件之jsonpath提取响应结果和做断言
查看>>
发布支持多线程的PowerShell模块 —— MultiThreadTaskRunner
查看>>
Ubuntu ctrl+alt会导致窗口还原的问题
查看>>
第四十期百度技术沙龙笔记整理
查看>>