2010-03-05 3 views
0

У меня проблема с фиксацией с помощью sharpsvn. Теперь я добавляю все файлы моей рабочей копии (если файл добавлен, генерирует исключение), и после этого я делаю фиксацию. Он работает, но он бросает исключения. Есть какой-то способ получить статус репозитория, прежде чем добавлять() и добавлять только новые файлы или файлы, которые были изменены? И если я удалю один файл или папку на своей рабочей копии, как я могу удалить эти файлы или папку в репозитории? Код:Commit in sharpSVN

String[] folders; 
folders = Directory.GetDirectories(direccionLocal,"*.*", SearchOption.AllDirectories); 
foreach (String folder in folders) 
      { 
       String[] files; 
       files = Directory.GetFiles(folder); 
       foreach (String file in files) 
       { 
        if (file.IndexOf("\\.svn") == -1) 
        { 
         Add(file, workingcopy); 
        } 
       } 

      } 


      Commit(workingcopy, "change"); 

Добавить:

public bool Add(string path, string direccionlocal) 
    { 
     using (SvnClient client = new SvnClient()) 
     { 
      SvnAddArgs args = new SvnAddArgs(); 
      args.Depth = SvnDepth.Empty; 
      Console.Out.WriteLine(path); 
      args.AddParents = true; 


      try 
      { 
       return client.Add(path, args); 
      } 
      catch (Exception ex) 
      { 
       return false; 
      } 

     } 
    } 

Commit:

public bool Commit(string path, string message) 
    { 
     using (SvnClient client = new SvnClient()) 
     { 
      SvnCommitArgs args = new SvnCommitArgs(); 


      args.LogMessage = message; 
      args.ThrowOnError = true; 
      args.ThrowOnCancel = true; 

      try 
      { 
       return client.Commit(path, args); 
      } 
      catch (Exception e) 
      { 
       if (e.InnerException != null) 
       { 
        throw new Exception(e.InnerException.Message, e); 
       } 

       throw e; 
      } 
     } 
    } 

ответ

3

Пробовали ли вы что-то вроде

using(SvnClient client = new SvnClient()) 
{ 
    SvnAddArgs aa = new SvnAddArgs(); 
    aa.Depth = SvnDepth.Infinity; 
    aa.Force = true; 

    client.Add(rootDir, aa); 
} 

для добавления файлов?

Все это не должно быть добавлено в вашу рабочую копию. (Эквивалент svn add --force <dirname>)

Это поможет, если вы сообщите, какое исключение вы получите. Библиотеки Subversion могут возвращать тысячи различных кодов ошибок. Большинство из них имеют интересные тексты сообщений.

SharpSvn устанавливает все специфические ошибки Subversion как внутренние исключения. Ваш код в конце удаляет внешнее исключение и теряет стопку остальной части исключения. Использование .ToString() для внешнего исключения должно дать вам лучший текст ошибки. (И для аналогичного результата ошибки, как и svn.exe, вам нужно выполнить все сообщения.)

См. Также this other answer для получения дополнительных предложений.

Смежные вопросы