java - svnkit:如何以编程方式将 'svn status' 的精确结果作为字符串获取?

标签 java svn svnkit

我只找到了How to list locally-modified/unversioned files using svnkit?这将需要实现复杂的逻辑才能在存储库的根目录上获得 svn status 的准确输出。

由于 svnkit 还提供了一个命令行工具 jsvn,它在 svnkit-cli 中实现,我在 org.tmatesoft.svn 中找到了我想使用的代码.cli.svn.SVNStatusCommand.run().

但我无法让它工作,也没有找到 jsvn 的确切工作方式。我会调试 jsvn,但无法设置 gradle 构建,很可能是因为我们的 windows ntlm http 代理在这里...

到目前为止我尝试了什么:

StringBuffer result = new StringBuffer();
SVNStatusCommand svnStatusCall = new SVNStatusCommand();
File statusResult = new File(System.getProperty("java.io.tmpdir") + File.separator + System.currentTimeMillis() + "svnStatusCalls");
PrintStream stream = new PrintStream(statusResult);
SVNCommandEnvironment env = new SVNCommandEnvironment("mySvn", stream, stream, null);
env.getTargets().add("/home/user/svnroot");
svnStatusCall.init(env);
svnStatusCall.run();
stream.flush();
Scanner scanner = new Scanner(statusResult);
while (scanner.hasNextLine()) {
    result.append(scanner.nextLine());
}
scanner.close();

这失败是因为 SVNCommandEnvironment 的 myTargets 尚未初始化,即为空。目的是获取字符串中的输出。我不喜欢 PrintStream 和文件系统中的额外文件,但没有看到不同的方式。

最佳答案

AbstractSVNCommand.registerCommand(new SVNStatusCommand());

final ByteArrayOutputStream bos = new ByteArrayOutputStream();
final PrintStream stream = new PrintStream(bos);

final SVNCommandLine commandLine = new SVNCommandLine();
commandLine.init(new String[] {"status", "d:/svntest/small.svn17"});

final SVNCommandEnvironment env = new SVNCommandEnvironment("mySvn", stream, stream, System.in);
env.init(commandLine);
env.initClientManager();

final SVNStatusCommand svnStatusCall = new SVNStatusCommand();
svnStatusCall.init(env);
svnStatusCall.run();
stream.flush();
System.out.println(new String(bos.toByteArray()));

关于java - svnkit:如何以编程方式将 'svn status' 的精确结果作为字符串获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12970223/

相关文章:

java - com.google.api.client.extensions.android.http.androidhttp 已弃用

java - 在P2P架构中使用超时

java - 使用 EJB 定时器服务执行外部服务

java - 定制SVN深度值

svn - 在 Jenkins 中配置 Subversion 插件以使用 1.6 工作副本

java - 如何使方法采用空值?

c# - 从 Visual Studio 添加 Dll 到 Subversion

svn - 自动化 Red Gate 源代码控制数据库链接并提交到 SVN

java - 将用户定义的库添加到 SVN

java - 为什么以下应用程序在使用 ForkJoinPool 时会立即终止,而在我使用 ThreadPoolExecutor 时却不会?