Perforce P4API.NET Repository.GetDepotFiles() возвращает удаленные файлы

Я использовал Perforce Repository.GetDepotFiles() и заметил, что функция возвращает файлы, которые соответствуют шаблону поиска, но также возвращает файлы, которые были удалены в Perforce Depot. Как отфильтровать результаты поиска, чтобы исключить удаленные файлы?

Мой код для поиска файлов в депо:

IList<FileSpec> filesToFind = new List<FileSpec>();
FileSpec fileToFind = new FileSpec(new DepotPath("//depot/....cpp"), null, null, VersionSpec.Head);
filesToFind.Add(fileToFind);
IList<FileSpec> filesFound = pRep.GetDepotFiles(filesToFind, null);

1 ответ

С помощью командной строки p4.exe вы можете получить список не удаленных файлов, например:

  p4 files -e //depot/....cpp

Команда p4 files поддерживает пару различных флагов, таких как -a и -A. Они поддерживаются p4api.net.dll:

  Options options = new FilesCmdOptions(FilesCmdFlags.AllRevisions, maxItems: 10);
  IList<FileSpec> filesFound = rep.GetDepotFiles(filesToFind, options);

FilesCmdFlags.AllRevisions соответствует флагу '-a' (и FilesCmdFlags.IncludeArchives это'). К сожалению, кажется, что '-e' не поддерживается p4api.net.dll.

Однако есть обходной путь, использующий P4Command:

  var cmd = new P4Command(rep, "files", true);
  StringList args = new StringList(new[] { "-e", "//depot/....cpp" });
  P4CommandResult result = cmd.Run(args);

  IEnumerable<FileSpec> foundFiles =
    result.TaggedOutput.Select(o => 
      new FileSpec(new DepotPath(o["depotFile"]),
                   null,
                   null,
                   VersionSpec.None));

  foreach (FileSpec file in foundFiles)
    Console.WriteLine("Found {0}", file.DepotPath);

Я использую p4net.api.dll версии 2013.3.78.1524.

Другие вопросы по тегам