1

IDEAのPlastic SCMプラグインを開発していますが、バージョンコントロールのローカル変更ウィンドウ(Alt + 9)をリフレッシュする方法がわかりません。ファイルが保存される時間。私は正常に私が前面にIDEAウィンドウをもたらすことは、この方法だけでなく、バ​​ージョン管理ウィンドウでリフレッシュボタンをクリックをトリガーすることを確認する方法IntelliJ IDEA VCS Plugin:保存時にVCSウィンドウを更新する

void getChanges(VcsDirtyScope, ChangelistBuilder, ProgressIndicator, ChangelistManagerGate) 

を使用してチェンジを更新するChangeProviderインタフェースを実装しました。両方のシナリオでチェンジリストが正常に更新され、[バージョン管理]ウィンドウに現在のワークスペースのステータスが反映されます。

ただし、変更したドキュメントを保存するとChangeProvider.getChangesメソッドがトリガされますが、ウィンドウのチェンジリストは更新されません。私は、ユーザーがまだ手動でリフレッシュする必要があるので、これは、何らかの理由で新しい変更を確認するにはIDEAのために十分ではありません、私の変更が適切にプラスチックSCMから取得されていることを確認し、方法

void ChangelistBuilder.processChange(Change, VcsKey) 

を使用してチェンジに追加しましたバージョンコントロールウィンドウ。ドキュメンテーションが不足していても役に立ちません。 -/

何が欠けていますか?この問題に関するヒントは高く評価されます。

EDITED

これはChangeオブジェクトが作成されている方法である。

private void addChangedFiles(ChangelistBuilder builder, ProjectStatus status) { 
    Set<String> modified = new HashSet<String>(status.CheckedOut); 
    modified.removeAll(status.Added); 

    modified.addAll(status.Changed); 
    modified.addAll(status.Moved); 
    modified.addAll(status.Copied); 

    for (String path : modified) 
    { 
     ContentRevision beforeRevision = PlasticContentRevision.createParentRevision(
       mPlasticVcs.getProject(), path, false); 

     ContentRevision afterRevision = PlasticContentRevision.createRevision(
       mPlasticVcs.getProject(), path, null, false); 

     Change ch = new Change(beforeRevision, afterRevision, FileStatus.MODIFIED); 

     builder.processChange(ch, mPlasticVcs.getKeyInstanceMethod()); 
    } 
} 

ProjectStatusクラスはcm statusコマンドの結果を格納PlasticSCMの一つです。

class PlasticVcsParentRevisionNumber implements VcsRevisionNumber { 

    private PlasticFile mPlasticFile; 

    public PlasticVcsParentRevisionNumber(PlasticFile plasticFile) { 
     mPlasticFile = plasticFile; 
    } 

    public String asString() { 
     return "parent revision"; 
    } 

    public int compareTo(VcsRevisionNumber other) { 
     if (other == this) { 
      return 0; 

     long parentRevId = mPlasticFile.getRevisionInfo().getParentRevId(); 
     if (!(other instanceof PlasticVcsParentRevisionNumber)) 
      return -1; 

     PlasticVcsParentRevisionNumber plasticRevNumber = 
      (PlasticVcsParentRevisionNumber)other; 

     long otherParentRevId = 
      plasticRevNumber.mPlasticFile.getRevisionInfo().getParentRevId(); 

     if (parentRevId > otherParentRevId) 
      return 1; 
     if (parentRevId == otherParentRevId) 
      return 0; 
     return -1; 
    } 
} 
+0

processChangeに渡すChangeオブジェクトをどのように構築していますか? – yole

+0

@yole質問した情報を含めて私の質問を編集しました:) – MiG42

答えて

0

だから、私は最終的に考え出したものを、この「謎」:

は、それが親リビジョンだと、それはカスタムVcsRevisionNumberを使用しているため、返された beforeRevisionオブジェクトでは問題があり得ることに私に発生しましたSCMプロバイダ(Plastic SCM CLIパーサ)は、Windowsの絶対パスを小文字のドライブ文字で返していました。これは、大文字と小文字を区別した比較を実行する格納されたIDEAデータと一致しませんでした。その結果、SCMからの変更がディスク上の実際のファイルに対応していないため、変更は検出されませんでした。

はい。私には恥ずべき。

関連する問題