通过svnkit,获取最新的revision以及判断某个revsion是否存在
来源:互联网 发布:淘宝助理验证 编辑:程序博客网 时间:2024/04/29 10:32
在java下,已经有一个非常强大的工具,svnkit,为我们封装了非常全面的svn操作类。但是,笔者在使用时,就碰到两个问题,还是稍微琢磨了一阵子,才想到解决办法(我使用的是1.x版本的svnkit,不清楚2.x版本的,是否有更直接的方法)
问题1:如何获取指定svn路径的最新revsion
问题2:判断某svn路径下,某个revsion号是否存在
讲这两个问题前,首先要理清Repository及revsion的概念。svn的核心是Repository(版本库),很多信息都是基于整个Repository来做记录的;revision则记录了每一次的commit操作,每当我们做一次commit操作,这个Repository的revsion就会增加1。所以revsion有时候也被称为svn版本号,因为通过这个revsion,可以指向具体某一次svn的变更。好吧,说了那么多,其实就是想说明图1的意思,假设你有一个Repository的svn路径是root/r,该Repository下有子路径root/r/r1,那么,如果你用svnkit来获取root/r/r1的最新revsion,它返回的是root/r的最新revsion,而不是root/r/r1的。你用其他工具,查看的历史变更记录,最新revsion明明是5,但svnkit返回给你的,却可能是7,就是这个原因。
图1:对于r1目录,它是属于上一层的repository的,因此它的当前revision,也是7
问题1:
基于图1,直接获取r1的revision,不能返回我们想要的值,而应该用getCommittedRevision()这个方法
代码节选
问题2:
基于图1,用svnkit,指定svn路径为root/r/r1,revision为7,还是会有返回值,不会报错。这时候应该用另外一种思路,如果7这个revision,是属于另外一个目录的变更,那么root/r/r1路径下,revsion为7的日志,就会是空的,这种情况,就可认为,7这个revisin,在root/r/r1下,是不存在的。
代码节选
类SimpleISVNLogEntryHandler,将svn log写入list这个变量
判断变更日志是否为空
说明1:revisionNum下,没有log,那么handler.list.size() == 0
说明2:如果该revisionNum在整个Repository都不存在,是会抛SVNException的,对应的错误码160006表示revision不存在
问题1:如何获取指定svn路径的最新revsion
问题2:判断某svn路径下,某个revsion号是否存在
讲这两个问题前,首先要理清Repository及revsion的概念。svn的核心是Repository(版本库),很多信息都是基于整个Repository来做记录的;revision则记录了每一次的commit操作,每当我们做一次commit操作,这个Repository的revsion就会增加1。所以revsion有时候也被称为svn版本号,因为通过这个revsion,可以指向具体某一次svn的变更。好吧,说了那么多,其实就是想说明图1的意思,假设你有一个Repository的svn路径是root/r,该Repository下有子路径root/r/r1,那么,如果你用svnkit来获取root/r/r1的最新revsion,它返回的是root/r的最新revsion,而不是root/r/r1的。你用其他工具,查看的历史变更记录,最新revsion明明是5,但svnkit返回给你的,却可能是7,就是这个原因。
图1:对于r1目录,它是属于上一层的repository的,因此它的当前revision,也是7
问题1:
基于图1,直接获取r1的revision,不能返回我们想要的值,而应该用getCommittedRevision()这个方法
代码节选
rSVNURL epositoryBaseUrl = SVNURL.parseURIEncoded(svnPath);SVNInfo info = client.doInfo(repositoryBaseUrl, SVNRevision.HEAD, SVNRevision.HEAD);result = info.getCommittedRevision().getNumber();
问题2:
基于图1,用svnkit,指定svn路径为root/r/r1,revision为7,还是会有返回值,不会报错。这时候应该用另外一种思路,如果7这个revision,是属于另外一个目录的变更,那么root/r/r1路径下,revsion为7的日志,就会是空的,这种情况,就可认为,7这个revisin,在root/r/r1下,是不存在的。
代码节选
类SimpleISVNLogEntryHandler,将svn log写入list这个变量
public class SimpleISVNLogEntryHandler implements ISVNLogEntryHandler{ public List<SVNLogEntry> list = new ArrayList<SVNLogEntry>(); @Override public void handleLogEntry(SVNLogEntry logEntry) throws SVNException { System.out.println(logEntry.getDate()); list.add(logEntry); }}
判断变更日志是否为空
try{ SimpleISVNLogEntryHandler handler = new SimpleISVNLogEntryHandler(); SVNRevision r = SVNRevision.create(revisionNum); repositoryBaseUrl = SVNURL.parseURIEncoded(svnPath); logClient.doLog(repositoryBaseUrl, new String[] {}, r, r, r, false, false, true, 1, new String[] {}, handler); if (null != handler.list && handler.list.size() > 0) { result = Constant.REVISION_EXIST; } else { result = Constant.REVISION_NOT_EXIST; }}catch (SVNException e){ logger.error("SvnManageOperation.isFileExit error", e.getMessage()); logger.error("error code:" + e.getErrorMessage().getErrorCode().getCode()); if (e.getErrorMessage().getErrorCode().getCode() == 160006) { result = Constant.REVISION_NOT_EXIST; }}
说明1:revisionNum下,没有log,那么handler.list.size() == 0
说明2:如果该revisionNum在整个Repository都不存在,是会抛SVNException的,对应的错误码160006表示revision不存在
- 通过svnkit,获取最新的revision以及判断某个revsion是否存在
- Linux Shell中判断某个环境变量是否存在以及获取某个环境变量的值
- 判断某个条件的记录是否存在
- 如何在Shell中通过脚本判断某个服务是否存在的解决方法
- 通过JS,Jquery判断某个字符在一个字符串中是否存在的方法
- python3判断字典、列表、元组为空以及字典是否存在某个key的方法
- 判断某个进程是否存在
- 判断某个路径是否存在
- 判断某个路径是否存在
- sqlite 中判断某个表是否存在的方法
- c# 判断文件是否存在某个文件夹的方法
- Oracle判断某个表是否存在的方法
- jquery判断字符串中是否存在某个的字符串
- php判断数组元素是否存在某个字符串的方法
- jquery判断字符串中是否存在某个的字符串
- 【Android】判断assets文件夹下的某个文件是否存在
- java 获取elasticsearch Client以及 判断是否存在此索引
- iOS随笔之获取可用空间及某个文件或文件夹的大小及判断文件是否存在
- 入职快一年的感想
- RMAN维护
- Windows COM编程
- 页面变灰 样式
- EJB
- 通过svnkit,获取最新的revision以及判断某个revsion是否存在
- Web开发者不容错过的20段CSS代码
- IDC:2012年国产服务器厂商进入第一阵营
- SCN and checkpoint
- 关于TabActivity的菜单点击
- UML类图关系大全
- 男生追女生的方法有哪些?
- Java中遍历出指定目录中的所有文件
- hdu2043密码