2016-07-26 21 views
2

Ich benutze p4api.net (Version 2015.1.105.4164) versuche einige Änderungslisten zu finden, die einen bestimmten Pfad betreffen. Mein Problem ist: Alle zurückgegebenen Listen geben an, keine Dateien zu haben, was ziemlich paradox ist, da eine Änderungsliste ohne eine betroffene Datei überhaupt keine Änderung darstellt. In P4V zeigen die zurückgegebenen Änderungslisten natürlich mindestens eine Datei.Perforce API: Repository.GetChangeLists gibt Listen ohne Dateien zurück

Was mache ich falsch? Warum ist die Datei.Property jeder zurückgegebenen Änderungsliste immer leer?

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

EDIT: Ich fand eine Abhilfe: Für jeden Änderungsliste zurückgegeben, muss ich Repository.GetChangeList (list.Id) nennen; Dies gibt ein Listenobjekt zurück, dessen Files-Auflistung gefüllt ist.

Antwort

2

Die Problemumgehung, die Sie in Ihrer Bearbeitung für Ihre Frage beschreiben, ist in der Tat die richtige Antwort.

GetChangelists gibt zusammenfassende Informationen über die Änderung, aber nicht Informationen über jede Datei in der Änderung zurück. GetChangeList gibt die detaillierten Informationen zu den Dateien in der Änderung zurück.

+1

Ich verstehe wirklich nicht, wie das die bevorzugte Arbeitsweise sein könnte. Es ist der gleiche Typ, den ich bekomme, daher würde man die gleiche Funktionalität erwarten. Wie auch immer, Danke! – Udontknow

+1

Ich stimme zu, es ist ein merkwürdiges Verhalten. So stelle ich es her: Die 'GetChangelists'-Methode konstruiert das" Skelett "jeder Änderungslistenbeschreibung, einschließlich Autor, Datum, Beschreibung usw., während die' GetChangeList'-Methode die Details ausfüllt. Die zwei verschiedenen Methoden greifen tatsächlich auf verschiedene Tabellen in der Datenbank des Servers zu und führen dazu verschiedene Abfragen aus. Einige Anwendungen benötigen für bestimmte Zwecke nur diese "skelettierten" Informationen. Daher sind die Anwendungen, die die vollständigen Details benötigen, für die zusätzliche Abfrage erforderlich. –

+1

Ja, das ist sinnvoll, aber es wäre intuitiver gewesen, dies zu zeigen, indem ein anderer Typ über GetChangeLists zurückgegeben wird (vielleicht ein Vorgänger, der die Files -Eigenschaft nicht implementiert), oder einfach eine Exception mit einem Hinweis auszulösen, was beim Triggern zu tun ist die Dateieigenschaft Es scheint, dass die Kerle ihre eigene spezielle Art der Programmierung von APIs haben (besonders wenn ich an die schreckliche Art denke, Params an verschiedene Methoden zu übergeben: ein Optionstyp, um sie alle zu nennen) ... – Udontknow