2016-10-24 10 views
0

SVNタグの最終リビジョンを知りたい。私の場合は、実際のものではなく、以前のもの(または言い換えれば、リポジトリからタグ付けされたリビジョン)です。私はたくさんの私は必要ありませんリビジョンの取得と、それはあまりにも遅いです大きなSVNリポジトリで、しかしSVNKitのX最新ログ項目を取得する

 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)); 

は、私が欲しいものを私を取得し、このコードを持っています。私はstartRevisionを設定することはほとんどできません。(プログラムで)どこから取得するかについての情報がありません。

ログからX最新の要素を取得できればうれしいでしょう。私は必要な情報を得ることができましたが、たとえEclipseがSVNKitを使用していても履歴を制限していても、そのようなことをする方法はないので、startRevisionを明示的に設定しなくても最後のNリビジョンを取得することができなければなりません。

SVNKit APIについて私が理解していない大きな秘密は何ですか?

Iは、以下のインポートを有する:

compile group: 'org.tmatesoft.svnkit', name: 'svnkit', version: '1.8.12' 

はUPDATE:

を私は、次のアプローチを試みた:

 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でフィルタリングは(としても表現することができませんラムダ)はリポジトリからではなく、上のサンプルと同じように実行され、最後のものではなく最初の15個の結果が表示されます。

答えて

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が< 500ならば、それは1をとることを確かめるためにそれをリファクタリングします。

私はまだです私はログのサイズを検証する必要があり、< 2が別の500を取得した場合、私はこの潜在的なバグをすぐに(これは私の使い方のためのツールで、私が展開するものではない)生きていきます。そのようなことに対処することは目的のためにあまりにも多くのコーディングです...

関連する問題