2016-09-12 9 views
0

Я уже некоторое время искал, как проверить ревизию и вернуться, если произошли изменения. То, что я работает, но мне интересно, если есть лучший/уборщик путь:Лучший способ проверить изменения версии SVN в каталоге и вернуть их, если изменения найдены

bool needToUpdate = false; 
Process process = new Process(); 
var info = new ProcessStartInfo("svn", string.Format(@"status -u {0}", directoryInto.FullName)); 
process.StartInfo = info; 
process.OutputDataReceived += new DataReceivedEventHandler((sender, e) => 
{ 
    if (!String.IsNullOrEmpty(e.Data)) 
    { 
     string data = e.Data; 
     //This if statement is what I have an issue with. 
     if (data.Contains("!")) 
      needToUpdate = true; 
    } 
}); 

Как вы можете видеть, я проверяю строку, чтобы найти в строке (!). Это не очень хорошая практика, поэтому я вижу, сможет ли кто-нибудь помочь мне с лучшим решением или получить лучший способ получить стандартный вывод из SVN (я не спрашиваю, как это сделать, я спрашиваю лучше путь, чем у меня уже есть) Буду признателен!

Спасибо!

EDIT Использование SharpSVN


Я теперь с помощью SharpSVN и я имею проблему с IsRemoteUpdate, кажется, всегда возвращает истину:

bool needToUpdate = false; 
using (SvnClient client = new SvnClient()) 
{ 
    SvnStatusArgs statusArgs = new SvnStatusArgs(); 
    statusArgs.RetrieveAllEntries = true; 
    statusArgs.RetrieveRemoteStatus = true; 
    client.GetStatus(directoryInto.FullName, statusArgs, out statuses); 
    for (int i = 0; i < statuses.Count(); i++) 
    { 
     if (statuses[i].IsRemoteUpdated) 
     { 
      needToUpdate = true; 
      break; 
     } 
    } 
} 

Не могли бы вы скажите мне, почему это всегда возвращает true, даже когда мой каталог обновлен?

Edit # 2 Я так добавил:

if (statuses[i].LocalContentStatus == SvnStatus.Missing || statuses[i].LocalContentStatus == SvnStatus.Modified) 

есть лучший способ сделать это?

+0

Вместо того, чтобы вводить внешнюю зависимость ('svn.exe') и выполнять накладные расходы при нерестах внешнего процесса, используйте [SharpSVN] (https://sharpsvn.open.collab.net/), который обеспечивает поддержку SVN через библиотека. – alroc

+0

Если вы придерживаетесь 'svn.exe', попробуйте вывод XML для более детерминированного анализа. –

+0

@alroc Поскольку у нас уже установлены черепахи на машинах, я считаю, что лучше использовать их, а не получать еще одну установку, которую все должны будут получить. Нажато войти слишком рано, спасибо за ваш комментарий! – i73

ответ

0

Обсудить на форуме SharpSVN: How to check if working copy is latest version? Там они используют аналогичное решение, например вы: получите статус, итерации через элементы, если есть IsRemoteUpdated, каталог SVN необходимо обновить.