最近发现了一个纯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客户端
包括文件:svnant.jar,svnClientAdapter.jar,svnjavahl.jar,javasvn.jar,ganymed.jar 是使用ANT工具自动导出,编译,部署SVN服务器上的JAVA 程序的必须包
纯java操作svn--svnkit API!
javaSVN visualSVN java开发版本控制工具
使用java对svn进行操作,包括导入,检出,更新,提交等操作
用java实现的基于http协议的svn程序
利用svnkit操作svn,实现对版本修改文件的导出,可以导出多个版本,.java文件将会在本地取出.class文件,导出后压缩成压缩包,主要用于服务器上的资源更新,不需要开发人员去找到对应的.class文件或其他文件压缩然后...
这是一个自动创建文件夹的定时任务,并且使用java代码直接操纵svn上传,无需手动操纵svn。内容仅供大家参考学习,本人不是高手,若有不足之处请大家见谅,并请大家提出宝贵意见,谢谢!
svn安装包。svn的安装文件,可根据网上的操作步骤,进行安装。本人已经成功安装,特此分享。
SVN变更发送邮件通知Java实现, svn只要一但变化便可发送邮件通知
配置管理工具-SVN。包含了32位和64位的安装包。以及安装流程和教程。
这个工具的来源: 从事了几年的工作之后,发现在部署服务的时候,总是需要将自己修改的源码编译... 源于上述遇到的问题,综合平时上班所需,开发了这个小工具,简称(svn增量包工具); 希望对各位小伙伴有所帮助
svn服务器,svnServer,32位管网下载的
svn客户端与服务端
SVN服务器搭建
每次整理需要部署文件的时候,都会发现要做的工作很多,而且效率很低,因此想到开发个工具,快速提取出...这个工具完全免费的,只适用于java,增量部署项目。与1.x版本比起来增加了通过svn时间自动判断修改的项目文件。
SVN 1.8版本管理工具,亲测有用!最后祝愿大家年年发大财!
svn 插件集成eclipse;百度云下载,如果失效请联系我!
java操作svn的例子,本人网上查找整理的。java操作svn的例子,本人网上查找整理的。
svn的个人总结,包括服务端的使用的一些命令还有就是客户端的一些常见问题的概述