2013-10-02 5 views
2

После кода находится здесь: How to check if file is under source control in 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 \ ствол \ тест, который имеет ~ 30 файлов C: \ AMG \ ствол \ тест \ Folder1 который имеет ~ 30 файлов C: \ AMG \ ствол \ Test \ Folder1 \ Sub, который имеет еще 30

Не отправляя это в репозиторий, когда я запускаю вышеуказанный код на C: \ AMG \ trunk \ test вместо указанного пути в моем фрагменте кода, на выходе указан 1 общий файл.

ответ

2

Так получилось, что класс SvnStatusArgs имеет булевский флаг RetrieveAllEntries, который по умолчанию имеет значение false.

Как следует из названия, установка этого истины возвращает каждый файл, независимо от того, был ли он изменен/изменен или обновлен.

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); 
Смежные вопросы