今天使用java的svnkit库的时候,想要获取提交代码时的备注信息,却发现为空值,原始的代码为这样:
List<SVNDirEntry> es = new ArrayList<>();
clientManager.getLogClient().doList(SVNURL.parseURIEncoded(url), SVNRevision.HEAD, SVNRevision.HEAD,
true, false, new ISVNDirEntryHandler() {
@Override
public void handleDirEntry(SVNDirEntry e) throws SVNException {
es.add(e);
}
});
通常获取SVN中的条目都是使用logClient也就是日志客户端,然后列出子目录下的每个条目,一个SVNDirEntry表示一个条目,刚开始看到e.getCommitMessage()的时候欣喜若狂,然后试了很多次,返回值为null. 没办法,java开发的宗旨,work with doc,还是认真看下DOC。
public String getCommitMessage()
Returns the commit log message for the revision of this entry.
This is guaranteed to be non-null only for the target entry returned by the SVNRepository.getDir(String, long, boolean, java.util.Collection) method.
doc的意思说,getCommitMessage方法只能保证SVNRepository.getDir(String, long, boolean, java.util.Collection) 返回的SVNDirEntry 备注信息不为空, 于是将代码改成下面的方式:
List<SVNDirEntry> es = new ArrayList<>();
SVNRepository svnRepository = clientManager.createRepository(
SVNURL.parseURIEncoded(url), true);
svnRepository.getDir("", SVNRevision.HEAD.getNumber(), true, es);
es.sort(Comparator.comparing((SVNDirEntry e)->e.getKind().toString()));
return es;
终于在页面显示出了备注信息的值,但是在提交SVN的时候,必须先写上备注才行:
clientManager.getCommitClient().doImport(localFile, SVNURL.parseURIEncoded(url),
"此处是备注的值哦", new SVNProperties(), false, false, SVNDepth.FILES);