`

svnkit获取SVN信息

    博客分类:
  • Java
 
阅读更多
public class SVNOperationServiceBean implements SVNOperationService
{
    
    private final DataVoiceLogger logger = DataVoiceLogFactory.getLogger(getClass());
    
    private SVNRepository repository = null;
    
    @PostConstruct
    public void initSVNOperationService()
    {
        
        DAVRepositoryFactory.setup();
        
        SVNRepositoryFactoryImpl.setup();
        
        FSRepositoryFactory.setup();
        
    }
    
    public void login(String username, String password, String url)
            throws Exception
    {
        password = new String(Base64.decode(password.getBytes()));
        this.repository = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(url));
        
        ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(username,
                password);
        
        this.repository.setAuthenticationManager(authManager);
        
        testConnection();
    }
    
    private void testConnection() throws SVNException
    {
        this.repository.testConnection();
    }
    
    @Override
    public boolean testRepositoryConnected(SvnConfigInfo conf)
    {
        boolean isSucceed = false;
        try
        {
            login(conf.getUserAccount(), conf.getUserPassword(), conf.getConfigCodePath());
            String[] codepath = getCodePaths(conf.getConfigCodePath());
            SVNDirEntry dir = getTargetInfo(codepath[0], -1);
            if (dir != null)
            {
                isSucceed = true;
                logger.info(conf.getConfigCodePath() + "  testlogin success ");
            }
            
        }
        catch (SVNAuthenticationException e)
        {
            
            logger.error("login error" + e.getMessage());
        }
        catch (Exception e)
        {
            logger.error(e.getMessage());
        }
        return isSucceed;
    }
    
    public SVNDirEntry getTargetInfo(String path, long revision)
    {
        SVNDirEntry collect = null;
        try
        {
            collect = this.repository.info(path, revision);
        }
        catch (SVNException e)
        {
            collect = null;
            logger.error(e.getMessage());
        }
        return collect;
    }
    
    public List<SVNLogEntry> getSVNLog(long startRevision, long endRevision,
            String[] codePaths)
    {
        List<SVNLogEntry> entries = new ArrayList<SVNLogEntry>();
        try
        {
            this.repository.log(codePaths,
                    entries,
                    startRevision,
                    endRevision,
                    true,
                    true);
        }
        catch (SVNException e)
        {
            logger.error(e.getMessage());
        }
        return entries;
    }
    
    public SvnLogFileInfo getLastFileRevision(SvnLogFileInfo fInfo)
    {
    	SvnLogFileInfo fileInfo = null;
    	List<SVNFileRevision> s = new ArrayList<SVNFileRevision>();
        int index = -2;
        try
        {
            this.repository.getFileRevisions(fInfo.getFilename(), s, 0, fInfo.getRevision());
        }
        catch (SVNException e)
        {
            logger.error(e.getMessage());
        }
        
        index = s.size() + index;
        
        if (index >= 0)
        {
            SVNFileRevision revision = s.get(index);
            fileInfo = new SvnLogFileInfo();
            fileInfo.setFilename(revision.getPath(),this.getRepositoryType());
            fileInfo.setRevision(revision.getRevision());
        }
        
        return fileInfo;
    }
    
    public boolean copyFile(String workspace, String type, SvnLogFileInfo fileInfo)
    {
        
        FileOutputStream fo = null;
        boolean isSuccess = false;
        try
        {
            SVNProperties pro = new SVNProperties();
            File file = new File(workspace + "\\" + type + "\\" + fileInfo.getShortFileName());
            fo = new FileOutputStream(file);
            try
            {
                this.repository.getFile(fileInfo.getFilename(), fileInfo.getRevision(), pro, fo);
            }
            catch (SVNException e)
            {
            	logger.error("query the file "+fileInfo.getShortFileName()+"'info from repository, but file copy failed!");
            }
            fo.close();
            isSuccess = true;
        }
        catch (Exception e)
        {
        	logger.error(e.getMessage());
        }
        finally
        {
            try
            {
                if (fo != null)
                {
                    fo.close();
                }
            }
            catch (IOException e)
            {
            	logger.error(e.getMessage());
            }
        }
        return isSuccess;
    }
    
    public long getLatestRevision()
    {
        long lastRevision = 0;
        try
        {
            lastRevision = this.repository.getLatestRevision();
        }
        catch (SVNException e)
        {
            logger.error("Lastest revision of this repository is not exists!");
        }
        return lastRevision;
    }
    
    public String getSvnRoot()
    {
        SVNURL url = null;
        try
        {
            url = this.repository.getRepositoryRoot(false);
            return url.getPath();
        }
        catch (SVNException e)
        {
            e.printStackTrace();
            logger.error("You have no right get this repository root url !!!");
        }
        return null;
    }
    
    public String[] getCodePaths(String url)
    {
        String codepath = getSvnRoot();
        int homeIndex = url.indexOf(codepath);
        return new String[] { url.substring(homeIndex + codepath.length()) };
    }

	@Override
	public String getRepositoryType() {
		
		return RepositoryOperation.IREP_TYPE_SVN;
	}
}

分享到:
评论

相关推荐

    SVNKit获取SVN信息

    安装完成后,你可以开始编写代码来获取SVN信息。首先,创建一个`SVNClientManager`实例,这是SVNKit的核心类,它提供了对各种SVN操作的支持: ```java import org.tmatesoft.svn.core.SVNClientManager; import org...

    java代码利用svnkit操作svn导出某版本或多个版本修改的文件

    利用svnkit操作svn,实现对版本修改文件的导出,可以导出多个版本,.java文件将会在本地取出.class文件,导出后压缩成压缩包,主要用于服务器上的资源更新,不需要开发人员去找到对应的.class文件或其他文件压缩然后...

    svnkit操作svn简单案例

    `doCheckout()`方法用于从SVN仓库获取最新代码到本地,`doUpdate()`用于更新本地代码到最新的仓库版本,而`doCommit()`则用于将本地更改提交回仓库。 需要注意的是,在进行SVN操作时,你可能需要配置用户名和密码,...

    ant获取SVN版本信息的jar包xmltask以及安装,使用方法

    本主题聚焦于如何利用Ant与XMLTask jar包来获取SVN(Subversion)版本信息。下面将详细介绍这个过程以及相关知识点。 首先,了解Ant。Ant是一个基于Java的构建工具,它提供了跨平台的构建脚本能力,能够执行编译、...

    svnKit java操作svn

    ### SVNKit Java操作SVN详解 #### 一、SVN快速入门 SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和追踪多个开发者共享的文件变更。本文将详细介绍如何使用SVNKit进行SVN的基本操作,包括上传、下载、...

    java 调用svn获取历史方法

    需要svnkit 使用方法 SVNUtil.getHistoryByDate("https://127.0.0.1:8443/svn/Test/mytestprotect/", "username", "password"); 如果jar 在我的其它资源里

    svnkit插件开发包 支持Java开发svn一键打包

    6. **Status**:获取文件或目录的状态信息,如是否被修改、新增或删除。 三、源码软件 SVNKit是开源的,这意味着你可以访问其源代码,理解其工作原理,甚至根据项目需求进行定制。这对于调试、优化或者扩展功能非常...

    java调用SVNKit示例

    Java调用SVNKit是为了在Java程序中集成Subversion(SVN)版本控制系统的能力。SVNKit是一个纯Java实现的Subversion库,允许开发者在Java应用中执行各种SVN操作,如检出、提交、更新、回滚等。以下是对标题和描述中所...

    java实现svn,svnkit框架的简单应用

    1. **获取日志信息**:查询特定文件或目录的变更历史,包括每次提交的作者、日期、修改描述等。 2. **遍历日志条目**:通过API迭代所有日志条目,进行分析或展示。 3. **搜索日志**:根据关键词、作者或日期范围...

    svnkit-demo.rar

    通过这个示例项目,开发者可以学习如何在 Java 应用中使用 SVNKit 进行版本控制操作,例如如何连接到 SVN 服务器,如何查询版本信息,如何执行 CRUD(创建、读取、更新、删除)操作,以及如何将这些信息格式化为 ...

    一个基于svnkit的简单增量发布工具

    虽然描述部分为空,但我们可以通过提供的博客链接获取更详细的信息。在这个博客中,作者可能会详细介绍如何利用SVNKit来开发这个工具,包括但不限于设置环境、理解SVNKit的基本API、如何检测文件的改动、如何实现...

    svnkit 1.3.5

    使用类SVNRepository可以检查一个subversion仓库中是否存在制定的文件(SVNRepository.checkPath)、获取一个 ISVNEdirot向subversion仓库中commit(SVNRepository.getCommitEditor)等等。 PS: 有两个使用svnkit...

    java实现svn,svnkit框架的简单应用 - 曾经沧海难为水的博客 - CSDN博客1

    以下是一个简单的示例,展示如何使用SvnKit登录SVN仓库并获取版本信息: ```java import org.tmatesoft.svn.core.*; import org.tmatesoft.svn.core.auth.*; import org.tmatesoft.svn.core.wc.*; public class ...

    SVNKit实例 + jar包 + SVNKit API

    3. **检查版本**:使用`SVNInfo`对象获取文件或目录的版本信息,包括版本号、作者、日期等。 4. **添加文件到仓库**:调用`SVNWCUtil.createDefaultOptions`配置选项,然后使用`SVNCommitClient.doAdd`方法将本地...

    SVNKit开发的Demo

    `SVNInfo`类用于获取文件或目录的版本信息,`SVNRevision`表示版本号,`SVNProperties`则用于处理属性。 6. **注意事项** - 在实际应用中,需要正确处理异常,确保与SVN服务器的通信顺利。 - 考虑性能优化,避免...

    svnkit的demo

    SVNKit是一个强大的Java库,它实现了Subversion(SVN)客户端功能,允许开发者在Java应用程序中集成版本控制系统。SVNKit提供了丰富的API,用于执行常见的SVN操作,如检查、更新、提交、合并和分支等。这个"svnkit的...

    svnkit1.8.15

    - 版本控制:通过API可以获取SVN仓库的版本信息,包括每个文件和目录的历史版本。 - 提交和更新:允许开发者提交代码更改到仓库,并从仓库获取最新的代码更新。 - 差异和合并:提供代码差异对比和多版本间的合并...

    svnkit帮助文档API

    - SVNKit提供了获取文件或目录历史版本的能力,包括版本号、作者、日期和提交信息。 - 可以比较不同版本之间的差异,这对于查看历史变更非常有用。 7. 连接管理: - SVNKit支持多种连接方式,包括HTTP(S)、SVN(S...

    SVNKit-tmatesoft 1.10.0

    以下是一个基本示例,展示如何使用SVNKit 1.10.0获取SVN仓库的日志: ```java import com.tmatesoft.svn.core.*; import com.tmatesoft.svn.core.wc.*; import com.tmatesoft.svn.core.io.*; import ...

    eclipse svn插件 官方下载绿色版

    例如,Subversive的特性文件可能包含与SVN连接、版本控制操作等相关的信息。 "plugins"目录则是实际的插件实现,包含了插件运行所需的Java类和其他资源。在Eclipse中安装插件时,这些文件会被复制到Eclipse的安装...

Global site tag (gtag.js) - Google Analytics