2016-07-26 3 views
2

特定のパスに影響を及ぼすチェンジリストを取得しようとすると、p4api.net(バージョン2015.1.105.4164)を使用しています。 私の問題は:返されたすべてのリストは全くファイルを持たないと宣言しています。これはかなりパラドックスです。影響を受けていない変更リストは実際には全く変更を表していないためです。 P4Vでは、返されたチェンジリストには少なくとも1つのファイルが表示されます。Perforce API:Repository.GetChangeListsはファイルのないリストを返します

私は間違っていますか?返される変更リストのFiles.Propertyが常に空白なのはなぜですか?

private void ListSubmittedChangeLists(string path, string client, string user, int maxLists) 
    { 
    ChangesCmdFlags flags = ChangesCmdFlags.IncludeTime & ChangesCmdFlags.FullDescription; 
    var options = new Options(flags, client, maxLists, ChangeListStatus.Submitted, user); 
    IList<Changelist> lists = Repository.GetChangelists(options, new FileSpec(new DepotPath(path), VersionSpec.Head)); 
    Console.WriteLine("{0} lists found.", lists.Count); 
    foreach (Changelist list in lists) 
    {    
     Console.WriteLine("{0} files found in changelist {1}.", list.Files.Count, list.Id); 
     foreach (FileMetaData file in list.Files) 
     {    
      Console.WriteLine(file.ClientPath); 
     } 
    } 
    Console.WriteLine("Done."); 
    Console.ReadLine(); 
    } 

編集:私は回避策が見つかりました:返された各チェンジのために、私はRepository.GetChangeList(list.Id)を呼び出す必要があります。これは、ファイルコレクションがいっぱいになっているリストオブジェクトを返します。

答えて

2

あなたの質問にあなたの編集で説明する回避策は、実際には正解です。

GetChangelistsは変更の概要情報を返しますが、変更の各ファイルに関する情報は返しません。 GetChangeListは、変更のファイルに関する詳細情報を返します。

+1

私はそれがどのようにして働くのが好ましいか分かりません。それは私が得ているのと同じタイプなので、同じ機能が期待されます。とにかく、thx! – Udontknow

+1

私は同意する、それは奇妙な動作です。 'GetChangelists'メソッドは、著者、日付、説明などの各チェンジリスト記述の「スケルトン」を構築し、' GetChangeList'メソッドは詳細を埋めます。 2つの異なるメソッドは、実際にはサーバーのデータベース内の異なるテーブルにアクセスし、異なるクエリを実行して実行します。一部のアプリケーションでは、「骨格」情報のみが必要なため、完全な詳細が必要なアプリケーションでは余分なクエリを作成する必要があります。 –

+1

はい、それは理にかなっていますが、GetChangeLists(Filesプロパティを実装していない祖先かもしれません)を介して別の型を返すことによってこれを表示する方が直感的でしたし、ヒントで例外をスローするファイルプロパティPerforceの人たちは、APIをプログラミングする独自の特別な方法を持っているようです(特に、私はparamsを別のメソッドに渡す恐ろしい方法を考えています。 – Udontknow

関連する問題