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.