2016-01-07 7 views
0

Я в настоящее время строю ChangeLog-генератор, которая создает такой журнал, diff'ing пересмотров /ствола против /филиала/... (который был создан в какой-то момент от /багажник), чтобы увидеть, какие коммиты не находятся в ветке (а затем некоторые причудливые запросы Redmine).Как определить строчную ревизию, используемую для создания ветки с помощью SharpSvn?

Чтобы свести к минимуму диапазон регистрации, я хотел бы оптимизировать запрос на основе ревизии, используемой для создания ветви как моего смещения.

Я знаю Остановить копирование/переименование функции TortoiseSVN, чтобы определить версию, используемую для создания конкретной ветки или тега.

Как добиться этого с помощью SharpSvn - или есть более простой способ определить разницу (чтобы упростить запрос: я буду использовать только /trunk против нисходящей ветви ...).

ответ

0

Я получил эту работу со следующим кодом - но я не уверен, если это самый элегантный способ сделать так:

var svnClient = new SvnClient(); 
svnClient.GetLog(new Uri("http://..../REPOSITORY/BRANCH/FOO", 
       new SvnLogArgs 
       { 
        StrictNodeHistory = true 
       }, 
       out logItems); 
var initRevision = logItems.OrderBy(arg => arg.Revision) 
          .First(); 
var changedPath = initRevision.ChangedPaths.Single(); 
//changedPath.CopyFromRevision 
//changedPath.CopyFromPath 

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

+1

В целом этот подход должен работать ... но если кто-то создает ветку или тег и в одной и той же фиксации также модифицирует что-то внутри (или создает другую ветку), то подход .Single() не работает. Я бы рекомендовал получить фактический путь. Вы можете немного улучшить производительность, предоставив как диапазон ревизий (0: HEAD), так и предел (1) объекта args. –

+0

* Я бы порекомендовал получить фактический путь. * Можете ли вы показать мне, как это искусно? –

0

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

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

+0

Не могли бы вы подробно рассказать о помощниках * mergeinfo части Subversion * - мне любопытно! –

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

  • Нет связанных вопросов^_^