我想知道SVN标签的最新修订版。在我的情况下,不是实际的,而是之前的(或者说不同的是,从中标记存储库的版本)。
我有这个代码可以让我得到我想要的东西:
Collection<SVNLogEntry> log = repository.log(new String[]{""}, null, 1, -1, false, false);
List<Long> revisions = log.stream().map(entry -> entry.getRevision()).sorted().collect(Collectors.toList());
System.out.println("Wanted Revision:" + revisions.get(revisions.size()-2));
然而,对于一个庞大的SVN存储库来说,它太慢了,因为我得到了很多我不需要的修订版。我几乎无法设置startRevision,因为我没有关于从哪里获取它的信息(以编程方式)......
如果我能从日志中获取X最新元素,我会很高兴,这样它会表现良好我可以得到我需要的信息,但我发现没办法做这样的事情,即使Eclipse确实有限历史甚至使用SVNKit,因此必须可以在不明确设置startRevision的情况下获得最后的N个修订。
我不了解SVNKit API的秘诀是什么?
我有以下导入:
compile group: 'org.tmatesoft.svnkit', name: 'svnkit', version: '1.8.12'
更新:
我尝试了以下方法:
repository.log(new String[]{""}, 1, -1, false, false, 15 /* limit */, false, null,
new ISVNLogEntryHandler()
{
@Override
public void handleLogEntry(SVNLogEntry logEntry) throws SVNException
{
logs.add(logEntry);
}
});
然而,这用Java中的过滤(也可以表示为lambda),而不是来自存储库,因此它的执行与上面的示例相同,而且它显示前15个结果,而不是最后的结果。 ..
答案 0 :(得分:0)
我在想这个问题没有干净的解决方案(虽然我不知道SVN的内部结构)......
我发现可行的方法如下:
SVNDirEntry info = repository.info("", -1);
Collection<SVNLogEntry> log = repository.log(new String[]{""}, null, info.getRevision() - 500, -1, false, false);
List<Long> revisions = log.stream().map(entry -> entry.getRevision()).sorted().collect(Collectors.toList());
revision = revisions.get(revisions.size()-2);
这样它就不会检索到这么多结果(只有最后500次修订)。对于我的例子,也许-10或-50会这样做,但我想确定...仍然会重构它以确保如果info.getRevision是&lt; 500它需要1。
我仍然对此不满意,因为我应该验证日志的大小,如果&lt; 2得到另外500,但我现在将忍受这个潜在的错误(这是我使用的工具,而不是我将部署)......处理这些事情的目的太多了......