最近发现了一个纯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客户端是版本控制系统Subversion(SVN)在Java开发环境中的应用工具,主要用于协同开发和代码版本管理。Subversion是一种开放源码的版本控制系统,能够跟踪文件和目录的修改,方便团队成员之间的...
Java SVN操作是将Java编程语言与Subversion(SVN)版本控制系统相结合,以实现对代码仓库的自动化管理。Subversion是一种广泛使用的开源版本控制系统,它允许开发者跟踪和控制代码的修改历史,支持多人协作开发。在...
包括文件:svnant.jar,svnClientAdapter.jar,svnjavahl.jar,javasvn.jar,ganymed.jar 是使用ANT工具自动导出,编译,部署SVN服务器上的JAVA 程序的必须包
javaSVN visualSVN java开发版本控制工具
### 纯Java操作SVN——SVNKit API详解 #### 概述 在软件开发过程中,版本控制系统如Subversion(SVN)是必不可少的工具之一。为了更好地集成SVN功能到Java应用中,SVNKit提供了一套全面且强大的API。本文将详细...
Java操作SVN将资源下载到服务器是一个常见的任务,在软件开发过程中,版本控制系统如SVN(Subversion)用于管理代码和其他资源的历史版本。本教程将详细解释如何使用Java与SVN进行交互,以便从SVN仓库中拉取资源并将...
用java实现的基于http协议的svn程序
利用svnkit操作svn,实现对版本修改文件的导出,可以导出多个版本,.java文件将会在本地取出.class文件,导出后压缩成压缩包,主要用于服务器上的资源更新,不需要开发人员去找到对应的.class文件或其他文件压缩然后...
这通常涉及到SVN的API或者库,如`svnkit`或`javasvn`,通过这些工具可以获取仓库的历史信息,包括作者、时间戳和修改的文件列表。 5. **代码分析**:统计代码数量通常涉及解析源代码文件,区分注释、空格和实际代码...
【Java SVN/ANT Software Auto Updater】是一款基于Java编写的开源工具,主要用于自动化更新Java应用程序。这个工具的独特之处在于它能够连接到Subversion(SVN)版本控制系统,检索最新的代码和资源,以此来确保...
Java实现的SVN统计修改代码行数的源码解析 在软件开发过程中,代码行数(LOC,Lines of Code)经常被用作评估项目规模、工作量和复杂度的一个指标。对于版本控制系统如Subversion(SVN),了解每次提交中修改的代码...
Java 实现 SVN 更新和提交是基于版本控制系统 Subversion(简称 SVN)进行的,它主要用于团队协作中的代码管理和版本控制。Subversion 提供了多种接口,包括命令行工具、图形界面工具以及 API,使得开发者能够在各种...
在Java开发过程中,SVN扮演着至关重要的角色,它允许开发者们协同工作,同时保持代码的一致性和可追溯性。 **一、SVN安装过程** 1. **获取SVN安装包**: 首先,你需要从官方网站或其他可信源下载SVN的安装文件。在...
在本项目中,`TimerTask`被用来自动化创建文件夹,并通过Java代码直接与Subversion(SVN)进行交互,从而实现版本控制系统的自动化操作,避免了手动干预。 1. **TimerTask的使用**: - 创建一个继承自`TimerTask`...
包含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简易操作说明** 在软件开发过程中,代码管理是非常关键的一环,它确保了团队成员之间的协作高效、代码版本控制有序。Subversion(简称SVN)是广泛应用的一种集中式版本控制系统,特别适合Java...
配置管理工具-SVN,全称Subversion(简称SVN),是软件开发领域广泛使用的版本控制系统之一。它能够帮助团队协作开发,管理和跟踪代码的变更历史,确保项目的源代码始终保持整洁、有序且可追溯。SVN的核心理念是通过...
这个工具的来源: 从事了几年的工作之后,发现在部署服务的时候,总是需要将自己修改的源码编译... 源于上述遇到的问题,综合平时上班所需,开发了这个小工具,简称(svn增量包工具); 希望对各位小伙伴有所帮助
"SVN变更发送邮件通知Java实现"是一个这样的功能,它能够在 SVN 仓库发生变动时自动发送邮件通知给相关人员。 首先,我们需要理解如何通过Java来实现这一功能。Java 提供了丰富的类库来处理邮件发送,比如JavaMail ...
【标题】"svn服务器,svnServer"所指的是一种版本控制系统,Subversion(简称svn)服务器,用于管理和协同开发团队的代码。Subversion是开源的软件版本控制系统,它允许开发者在多个用户之间共享和同步代码,同时...