如何使用 SVNKit 获取从一个分支合并到另一个分支的所有修订列表?
How to use SVNKit to get the list of all revisions merged from one branch to another?
目的:
作为质量检查,我们需要确保所有合格的修订都合并到所有更高的修订。
示例:
Release_10 --> Release_11
在 TortoiseSVN 中,通过单击“显示日志”按钮可以很容易地找出哪些修订已被合并。合并的修订通过格式和合并图标清楚地区分。
你也可以通过纯SVN列出所有合并的修订:
C:\Release_11>svn mergeinfo --show-revs merged https://svn_repo/project/branches/releases/Release_10
r32894
r32897
r32901
r32903
r32929
r32987
r32994
r32996
r33006
r33017
r33020
r33021
r33041
r33045
r33077
目前,我有列出所有修订信息的代码:
SVNURL svnURL = SVNURL.parseURIEncoded(url);
SVNRepository repository = SVNRepositoryFactory.create(svnURL);
BasicAuthenticationManager authManager = BasicAuthenticationManager.newInstance("username", "password".toCharArray());
authManager.setProxy("00.00.00.00", 8080, null, (char[])null);
repository.setAuthenticationManager(authManager);
@SuppressWarnings("unchecked")
Collection<SVNLogEntry> logEntries = repository.log(new String[] { "" }, null, 0, -1, true, true);
现在我只需要弄清楚哪些已经合并了。
首选项:
- 一次调用 repo 获取所有合并的修订。 (或者更好的是:一次调用即可获取所有修订以及它们是否已合并。)
- 不希望本地签出 SVN 存储库。
备注:
- 使用 SVNKIT v1.8.14,但未锁定到特定版本。
如果您 运行 svn mergeinfo
具有源和目标的绝对 URL,则不需要本地签出存储库:
svn mergeinfo --show-revs merged https://svn_repo/project/branches/releases/Release_10 https://svn_repo/project/branches/releases/Release_11
到运行这个命令,在SVNKit 1.7或更高版本上,你可以使用SvnLogMergeInfo
:
SvnOperationFactory svnOperationFactory = new SvnOperationFactory();
try {
String repo = "https://svn_repo/project/branches/releases/";
String srcBranch = repo + "Release_10";
String dstBranch = repo + "Release_11";
// svnOperationFactory.setAuthenticationManager(null);
SvnLogMergeInfo op = svnOperationFactory.createLogMergeInfo();
op.setFindMerged(true); // --show-revs merged
op.setSource(SvnTarget.fromURL(SVNURL.parseURIEncoded(srcBranch)));
op.setSingleTarget(SvnTarget.fromURL(SVNURL.parseURIEncoded(dstBranch)));
op.setReceiver(new ISvnObjectReceiver<SVNLogEntry>() {
@Override
public void receive(SvnTarget target, SVNLogEntry logEntry) throws SVNException {
System.out.println("------\n" + logEntry);
}
});
op.run();
} finally {
svnOperationFactory.dispose();
}
对于旧版本,您可以使用 SVNDiffClient.doGetLogMergedMergeInfo
。
目的:
作为质量检查,我们需要确保所有合格的修订都合并到所有更高的修订。
示例:
Release_10 --> Release_11
在 TortoiseSVN 中,通过单击“显示日志”按钮可以很容易地找出哪些修订已被合并。合并的修订通过格式和合并图标清楚地区分。
你也可以通过纯SVN列出所有合并的修订:
C:\Release_11>svn mergeinfo --show-revs merged https://svn_repo/project/branches/releases/Release_10
r32894
r32897
r32901
r32903
r32929
r32987
r32994
r32996
r33006
r33017
r33020
r33021
r33041
r33045
r33077
目前,我有列出所有修订信息的代码:
SVNURL svnURL = SVNURL.parseURIEncoded(url);
SVNRepository repository = SVNRepositoryFactory.create(svnURL);
BasicAuthenticationManager authManager = BasicAuthenticationManager.newInstance("username", "password".toCharArray());
authManager.setProxy("00.00.00.00", 8080, null, (char[])null);
repository.setAuthenticationManager(authManager);
@SuppressWarnings("unchecked")
Collection<SVNLogEntry> logEntries = repository.log(new String[] { "" }, null, 0, -1, true, true);
现在我只需要弄清楚哪些已经合并了。
首选项:
- 一次调用 repo 获取所有合并的修订。 (或者更好的是:一次调用即可获取所有修订以及它们是否已合并。)
- 不希望本地签出 SVN 存储库。
备注:
- 使用 SVNKIT v1.8.14,但未锁定到特定版本。
如果您 运行 svn mergeinfo
具有源和目标的绝对 URL,则不需要本地签出存储库:
svn mergeinfo --show-revs merged https://svn_repo/project/branches/releases/Release_10 https://svn_repo/project/branches/releases/Release_11
到运行这个命令,在SVNKit 1.7或更高版本上,你可以使用SvnLogMergeInfo
:
SvnOperationFactory svnOperationFactory = new SvnOperationFactory();
try {
String repo = "https://svn_repo/project/branches/releases/";
String srcBranch = repo + "Release_10";
String dstBranch = repo + "Release_11";
// svnOperationFactory.setAuthenticationManager(null);
SvnLogMergeInfo op = svnOperationFactory.createLogMergeInfo();
op.setFindMerged(true); // --show-revs merged
op.setSource(SvnTarget.fromURL(SVNURL.parseURIEncoded(srcBranch)));
op.setSingleTarget(SvnTarget.fromURL(SVNURL.parseURIEncoded(dstBranch)));
op.setReceiver(new ISvnObjectReceiver<SVNLogEntry>() {
@Override
public void receive(SvnTarget target, SVNLogEntry logEntry) throws SVNException {
System.out.println("------\n" + logEntry);
}
});
op.run();
} finally {
svnOperationFactory.dispose();
}
对于旧版本,您可以使用 SVNDiffClient.doGetLogMergedMergeInfo
。