`
runfriends
  • 浏览: 229210 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javasvn

阅读更多

最近发现了一个纯java实现的svn。

把它用到了当前项目中用于管理指定项目的代码。

废话不多说了,帖代码吧。一目了然

package me.jor.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.Set;
import java.util.concurrent.locks.ReentrantReadWriteLock;

import org.tmatesoft.svn.core.SVNDepth;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNProperties;
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc.SVNWCClient;

public class SVN {
	
	static{
//在javasvn api内没有公开这三个类,但这是初始化svn repository最简单的方法
                SVNRepositoryFactoryImpl.setup();//初始化svn/svn+ssh协议
		DAVRepositoryFactory.setup();//初始化http/https协议
		FSRepositoryFactory.setup();//初始化本地文件系统file://协议
	}
	
	private static final SVNClientManager svn=SVNClientManager.newInstance();
	
	public static final ReentrantReadWriteLock.ReadLock SVN_READ_LOCK = LockMap
			.getReadLock("common_svn_lock");
	public static final ReentrantReadWriteLock.WriteLock SVN_WRITE_LOCK = LockMap
			.getWriteLock("common_svn_lock");

	/**
	 * @throws SVNException 
	 * 
	 * @throws InterruptedException
	 * @throws IOException
	 * */
	public static void ci(String target, ReentrantReadWriteLock.WriteLock lock)
			throws FileNotFoundException, SVNException {
		ci(new File(target), lock);
	}

	/**
	 * @throws SVNException 
	 * 
	 * @throws InterruptedException
	 * @throws IOException
	 * */
	public static void ci(File target, ReentrantReadWriteLock.WriteLock lock)
			throws FileNotFoundException, SVNException {
		try {
			lock.lock();
			SVNWCClient wc=add(target);
			svn.getCommitClient().doCommit(
				new File[] { target },
				false,
				"commit " + target.toString() + " on " + new Date(),
				new SVNProperties(), null, false, false,
				SVNDepth.INFINITY);
			wc.doCleanup(target);
		} finally {
			lock.unlock();
		}
	}
	
	private static SVNWCClient add(File path) throws SVNException {
		SVNWCClient wc=svn.getWCClient();
		if(path.isDirectory()){
			wc.doAdd(path, true, true, true, SVNDepth.INFINITY, true, true);
			for(File f:path.listFiles()){
				if(f.toString().indexOf(".svn")<0){
					add(f);
				}
			}
		}else{
			wc.doAdd(path, true, false, true, SVNDepth.INFINITY, true, true);
		}
		
		return wc;
	}

	/**
	 * @param target
	 *            接受Set<File>或Set<String>
	 * @param filePath
	 *            true:targets是目录路径,false:是目录文件对象
	 * */
	public static enum CommitType {
		ABSOLUTE_PATH, FILE
	}

	@SuppressWarnings("unchecked")
	public static void ci(Set<?> targets, CommitType type,
			ReentrantReadWriteLock.WriteLock lock) throws IOException,
			InterruptedException, SVNException {
		switch (type) {
		case FILE:
			for (File target : (Set<File>) targets) {
				ci(target, lock);
			}
			break;
		case ABSOLUTE_PATH:
			for (String target : (Set<String>) targets) {
				ci(target, lock);
			}
			break;
		}
	}

	public static void up(String target, ReentrantReadWriteLock.WriteLock lock)
			throws FileNotFoundException, SVNException, InterruptedException {
		up(new File(target),lock);
	}
	
	private static Thread upThread;
	public static void up(File target, ReentrantReadWriteLock.WriteLock lock)
			throws FileNotFoundException, SVNException, InterruptedException {
		if (target.exists()) {
			if(upThread==null){
				lock.lock();
				upThread=Thread.currentThread();
				svn.getUpdateClient().doUpdate(target, SVNRevision.HEAD, SVNDepth.INFINITY, true, true);
				upThread=null;
				lock.unlock();
			}
			if(upThread!=null){
				upThread.join();
			}
		} else {
			throw new FileNotFoundException(target.toString());
		}
	}

//	public static void main(String[] args) throws SVNException,
//			FileNotFoundException, InterruptedException {
//		SVN.up("E:\\workspace\\dev_processDef\\");
//	}
}
分享到:
评论

相关推荐

    java svn 插件和svn客户端

    Java SVN 插件和SVN客户端是版本控制系统Subversion(SVN)在Java开发环境中的应用工具,主要用于协同开发和代码版本管理。Subversion是一种开放源码的版本控制系统,能够跟踪文件和目录的修改,方便团队成员之间的...

    java svn操作

    Java SVN操作是将Java编程语言与Subversion(SVN)版本控制系统相结合,以实现对代码仓库的自动化管理。Subversion是一种广泛使用的开源版本控制系统,它允许开发者跟踪和控制代码的修改历史,支持多人协作开发。在...

    svnant.jar,svnClientAdapter.jar,svnjavahl.jar,javasvn.jar,ganymed.jar

    包括文件:svnant.jar,svnClientAdapter.jar,svnjavahl.jar,javasvn.jar,ganymed.jar 是使用ANT工具自动导出,编译,部署SVN服务器上的JAVA 程序的必须包

    javaSVN visualSVN

    javaSVN visualSVN java开发版本控制工具

    纯java操作svn--svnkit API

    ### 纯Java操作SVN——SVNKit API详解 #### 概述 在软件开发过程中,版本控制系统如Subversion(SVN)是必不可少的工具之一。为了更好地集成SVN功能到Java应用中,SVNKit提供了一套全面且强大的API。本文将详细...

    java操作svn把资源下载到服务器

    Java操作SVN将资源下载到服务器是一个常见的任务,在软件开发过程中,版本控制系统如SVN(Subversion)用于管理代码和其他资源的历史版本。本教程将详细解释如何使用Java与SVN进行交互,以便从SVN仓库中拉取资源并将...

    java http svn上传工具

    用java实现的基于http协议的svn程序

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

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

    JAVA编写SVN统计代码数量系统

    这通常涉及到SVN的API或者库,如`svnkit`或`javasvn`,通过这些工具可以获取仓库的历史信息,包括作者、时间戳和修改的文件列表。 5. **代码分析**:统计代码数量通常涉及解析源代码文件,区分注释、空格和实际代码...

    Java SVN/ANT Software Auto Updater-开源

    【Java SVN/ANT Software Auto Updater】是一款基于Java编写的开源工具,主要用于自动化更新Java应用程序。这个工具的独特之处在于它能够连接到Subversion(SVN)版本控制系统,检索最新的代码和资源,以此来确保...

    java实现的svn统计修改代码行数完整源码

    Java实现的SVN统计修改代码行数的源码解析 在软件开发过程中,代码行数(LOC,Lines of Code)经常被用作评估项目规模、工作量和复杂度的一个指标。对于版本控制系统如Subversion(SVN),了解每次提交中修改的代码...

    java实现svn更新和提交.rar

    Java 实现 SVN 更新和提交是基于版本控制系统 Subversion(简称 SVN)进行的,它主要用于团队协作中的代码管理和版本控制。Subversion 提供了多种接口,包括命令行工具、图形界面工具以及 API,使得开发者能够在各种...

    svn安装包,java开发工具

    在Java开发过程中,SVN扮演着至关重要的角色,它允许开发者们协同工作,同时保持代码的一致性和可追溯性。 **一、SVN安装过程** 1. **获取SVN安装包**: 首先,你需要从官方网站或其他可信源下载SVN的安装文件。在...

    timerTask定时任务使用java代码操作svn

    在本项目中,`TimerTask`被用来自动化创建文件夹,并通过Java代码直接与Subversion(SVN)进行交互,从而实现版本控制系统的自动化操作,避免了手动干预。 1. **TimerTask的使用**: - 创建一个继承自`TimerTask`...

    Java操作svn所需jar包

    包含antlr-runtime-3.4.jar;jna-3.4.0.jar;sequence-library-1.0.2.jar;sqljet-1.1.10.jar;svnkit-1.7.14.jar;svnkit-cli-1.7.14.jar;svnkit-javahl16-1.7.14.jar;...Java链接SVN以及用执行语句操作SVN所需jar包

    Java代码管理工具SVN简易操作说明

    **Java代码管理工具SVN简易操作说明** 在软件开发过程中,代码管理是非常关键的一环,它确保了团队成员之间的协作高效、代码版本控制有序。Subversion(简称SVN)是广泛应用的一种集中式版本控制系统,特别适合Java...

    配置管理工具-SVN

    配置管理工具-SVN,全称Subversion(简称SVN),是软件开发领域广泛使用的版本控制系统之一。它能够帮助团队协作开发,管理和跟踪代码的变更历史,确保项目的源代码始终保持整洁、有序且可追溯。SVN的核心理念是通过...

    svn增量包工具

    这个工具的来源:  从事了几年的工作之后,发现在部署服务的时候,总是需要将自己修改的源码编译... 源于上述遇到的问题,综合平时上班所需,开发了这个小工具,简称(svn增量包工具); 希望对各位小伙伴有所帮助

    SVN变更发送邮件通知Java实现

    "SVN变更发送邮件通知Java实现"是一个这样的功能,它能够在 SVN 仓库发生变动时自动发送邮件通知给相关人员。 首先,我们需要理解如何通过Java来实现这一功能。Java 提供了丰富的类库来处理邮件发送,比如JavaMail ...

    svn服务器,svnServer

    【标题】"svn服务器,svnServer"所指的是一种版本控制系统,Subversion(简称svn)服务器,用于管理和协同开发团队的代码。Subversion是开源的软件版本控制系统,它允许开发者在多个用户之间共享和同步代码,同时...

Global site tag (gtag.js) - Google Analytics