1

svnkitを使用してローカルで変更された/バージョン管理されていないファイルを一覧表示する方法のみが見つかりましたか? svn statusリポジトリのルート ディレクトリで正確な出力を取得するには、複雑なロジックを実装する必要があります。

svnkitjsvnは で実装されているコマンド ライン ツールも提供する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 がまだ初期化されていない、つまり null であるため失敗します。目的は、文字列で出力を取得することです。ファイルシステム内の PrintStream と余分なファイルは好きではありませんが、別の方法はありません。

4

1 に答える 1

4
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()));
于 2012-10-19T09:05:19.827 に答える