SharpSVN не перебирает все подкаталоги и файлы
После кода, найденного здесь: Как проверить, находится ли файл под контролем исходного кода в SharpSvn?
Я пытаюсь создать небольшое служебное приложение, которое будет перебирать назначенную папку и распечатывать состояние всех файлов.
private void btnCheckSVN_Click(object sender, EventArgs e)
{
ParseSVNResults(CheckSVN());
}
private Collection<SvnStatusEventArgs> CheckSVN()
{
string path = @"C:\AMG\trunk\AMC";
if (!Directory.Exists(path))
return null;
DevExpress.Utils.WaitDialogForm wait = new DevExpress.Utils.WaitDialogForm();
wait.Caption = "Please wait, loading SVN file statuses. This may take a moment.";
wait.Caption += Environment.NewLine + path;
wait.Show();
SvnClient client = new SvnClient();
SvnStatusArgs sa = new SvnStatusArgs();
sa.Depth = SvnDepth.Infinity;
Collection<SvnStatusEventArgs> statuses;
client.GetStatus(path, sa, out statuses);
wait.Close();
return statuses;
}
private void ParseSVNResults(Collection<SvnStatusEventArgs> results)
{
if (results == null)
return;
int modified = 0;
int unversioned = 0;
foreach (SvnStatusEventArgs item in results)
{
memoEditSVNFiles.Text += item.LocalContentStatus.ToString() + " -- " + item.Path + Environment.NewLine;
if (item.LocalContentStatus.ToString() == "Modified")
modified++;
else if (item.LocalContentStatus.ToString() == "NotVersioned")
unversioned++;
}
memoEditSVNFiles.Text += Environment.NewLine + "Modified: " + modified + Environment.NewLine;
memoEditSVNFiles.Text += "Not Versioned: " + unversioned + Environment.NewLine;
memoEditSVNFiles.Text += "Total: " + results.Count;
}
Когда код выполняется, я получаю в общей сложности 147 файлов и папок. Фактическая папка имеет несколько тысяч файлов. Возможно ли, что я смотрю слишком много файлов и SharpSVN просто закрывается через некоторое время?
редактировать; Я просто попытался создать около 100 текстовых файлов и поместить 30 в 3 папки, а затем "вложить" их. Итак, у меня есть;
C:\AMG\trunk\test с ~30 файлами C:\AMG\trunk\test\Folder1 с ~30 файлами C:\AMG\trunk\test\Folder1\Sub с еще 30
Не добавляя это в хранилище, когда я запускаю приведенный выше код на C:\AMG\trunk\test вместо указанного пути в моем фрагменте кода, в выводе указывается 1 файл.
1 ответ
Таким образом получается, что класс SvnStatusArgs имеет логический флаг "RetrieveAllEntries", который по умолчанию равен false.
Как следует из названия, установка этого true возвращает каждый файл, независимо от того, был ли он модифицирован / неверсирован или обновлен.
1 дополнительная строка в методе CheckSVN() в моем исходном сообщении:
SvnClient client = new SvnClient();
SvnStatusArgs sa = new SvnStatusArgs();
sa.Depth = SvnDepth.Infinity;
sa.RetrieveAllEntries = true; //the new line
Collection<SvnStatusEventArgs> statuses;
client.GetStatus(path, sa, out statuses);