svn判断通过svnkit,获取最新的revision以及判断某个revsion是否存在
每日一贴,今天的内容关键字为svn判断
在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()这个方法
代码节选
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>();@Overridepublic 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不存在
文章结束给大家分享下程序员的一些笑话语录: 一程序员告老还乡,想安度晚年,于是决定在书法上有所造诣。省略数字……,准备好文房4宝,挥起毛笔在白纸上郑重的写下:Hello World
--------------------------------- 原创文章 By
svn和判断
---------------------------------
svn判断通过svnkit,获取最新的revision以及判断某个revsion是否存在相关推荐
- 简析Jenkins的SVN插件未更新到最新代码
摘要 简析Jenkins的SVN插件未更新到最新代码 在使用Jenkins做持续集成时,遇到Jenkins的SVN插件没有更新到最新的代码的情况. 例如,在代码提交之后就立即使用Jenkins更新代码 ...
- Android 调用原生API获取地理位置和经纬度,判断所在国家
public static boolean isCN(Context context) {TelephonyManager tm = (TelephonyManager) context.getSys ...
- Java通过steam实现数据去重、去重获取最新一条
目录 1.添加依赖 2.测试实体类 3.三种方式去 1.添加依赖 <dependency><groupId>com.alibaba</groupId><art ...
- File类 判断功能和获取功能
1 package cn.zmh.File; 2 3 import java.io.File; 4 /* 5 * 6 * File判断功能 7 * 8 * */ 9 public class File ...
- Swift - 文本输入框内容改变时响应,并获取最新内容
1,问题描述 有时我们开发的时候需要先把"确认"按钮初始设置为不可用,当文本框中输入文字以后,再将输入按钮变为可用. 2,实现原理 (1)要检测文本框内容的变化,我们需要让新界面的 ...
- 通知:即日起本博客暂停更新,请移步至yanxin8.com获取最新文章
通知:即日起本博客暂停更新,请移步至yanxin8.com与博主交流及获取最新文章 转载于:https://www.cnblogs.com/iplus/p/4467089.html
- PHP JSON文件解析并获取key、value,判断key是否存在
/******************************************************************************* PHP JSON文件解析并获取key. ...
- git拉取远程分支并创建本地分支和Git中从远程的分支获取最新的版本到本地
git拉取远程分支并创建本地分支 一.查看远程分支 使用如下Git命令查看所有远程分支: git branch -r 二.拉取远程分支并创建本地分支 方法一 使用如下命令: git checkout ...
- SQL 去除重复、获取最新记录
应用中常会有需要去除重复的记录,或者获取某些最新记录(如:每个用户可以答题多次,每次答题时间不同,现在要获取所有用户的最新答题记录,即每个用户取最新的一条) 使用group 和max 即可实现上述功能 ...
最新文章
- 1.1 对象的概念及面向对象的三个基本特征
- 比特币可视化工具_比特币再破1.2万大关 你还要做打工人吗?
- 交大网院计算机第五次作业答案,交大网院计算机第三次作业分析.docx
- 7-11 堆栈操作合法性 (20 分)以及堆栈讲解(c语言实现)
- 关于原生AJAX和jQueryAJAX的编程
- 如何理解Beta分布和Dirichlet分布?
- ubuntu+火狐浏览器+印象笔记+剪藏+国内版配置
- 《自卑与超越》读书笔记
- 关于服务端渲染/预渲染/数据直出/页面直出的学习总结
- mysql 解压版 64位_Windows解压版安装64位mysql-5.7.19
- shell - 在文本中的前一行或后一行添加一行内容,指定行前后增加一行内容
- NOIP 2005 篝火晚会
- oracle备份数据库的格式,ORACLE 数据库备份文件的后缀是()。
- Kinetics400/600/700数据集免费下载
- 嵌入式linux环境视频采集知识(V4L2)
- 2013.12.26:4G
- Python日期时间处理库dateutil
- 微型计算机原理存储器,微机原理存储器扩展详情解析
- 《模拟电子技术基础》课程笔记(二)——课程概要
- SVS迅控小型会议室视频跟踪会议