2016-01-14 5 views
2

В настоящее время мы используем Atlassian JIRA для дефектов и регулярных циклов разработки. Мы используем SVN-репозиторий для поддержки кода. Одна из недавних вещей, которые мы делали, заключалась в разработке настраиваемой утилиты с использованием SVNKit 1.7.4 и Atlassian Fisheye, которая дала список идентификаторов id JIRA, которые фиксируются из SVN. Это делается с использованием сервисных служб Atlassian Fisheye REST. Когда мы получаем этот список путей к файлам, мы сравниваем рабочую копию с целью и применяем метод applyTextDelta SVNDeltaGenerator для изменения файлов и последующей регистрации в целевой ветке. Единственное, что нам нужно, это набор изменений из SVN для конкретного идентификатора JIRA. После того, как мы предоставим идентификатор JIRA в качестве входных данных, Fisheye извлекает данные из SVN и отправляет их обратно в список.Извлечение SVN программно, без Atlassian Fisheye

Теперь, если нам нужно обходить Fisheye и вместо этого использовать внутренние возможности SVN для достижения того же самого, что Fisheye делает для нас, что нам нужно делать? Мы следуем за svn-крючком, где сообщение фиксации всегда содержит JIRA-идентификатор, есть ли способ получить полный набор изменений, включая имена файлов, пути, каталоги, которые были добавлены с этой конкретной JIRA, например, используя сообщение commit? Одним из примеров сообщений фиксации, используемых нашими разработчиками, является «ND-9181: этот файл связан с ABC и имеет исправление для DE119919». Здесь ND-9181 - идентификатор JIRA. Аналогично, все обязательства для SVN имеют идентификатор JIRA.

То, что я хочу, чтобы указать СВН ниже:

Найти все Дорожки файлы/Файловые/каталоги из SVN Где Commit_Msg = «ND-9817»

Если кто-либо когда-либо достигнуто это или знает способ делая это программно, используя SVNKit, пожалуйста, дайте мне знать.

ответ

1

подрыву CLI поддерживает --search вариант для svn log команды начиная с версии 1.8, поэтому при использовании CLI вариант, можно просто разобрать результаты этой команды:

svn log -v --search ND-9817 

Любопытно, что эта особенность ISN доступных в последних SVNKit API (Javadocs, которые они предоставляют, для версии 1.7, но я экспериментировал с самой последней версией 1.8.11). Таким образом, для решения SVNKit требуется ручная фильтрация. Я оставил пакет, импорт и основной метод для краткости.

public class q34800380 { 
    public void grepLogMessages(String url, String message) throws SVNException { 
     SvnOperationFactory svnOperationFactory = new SvnOperationFactory(); 
     try { 
      SvnLog log = svnOperationFactory.createLog(); 
      log.setSingleTarget(SvnTarget.fromURL(SVNURL.parseURIEncoded(url))); 
      log.addRange(SvnRevisionRange.create(SVNRevision.create(0), SVNRevision.HEAD)); 
      log.setDiscoverChangedPaths(true); 
      log.setReceiver(new GrepLogReceiver(message)); 
      log.run(); 
     } finally { 
      svnOperationFactory.dispose(); 
     } 
    } 
    private class GrepLogReceiver implements ISvnObjectReceiver<SVNLogEntry> { 
     private String message; 
     public GrepLogReceiver(String message) { 
      this.message = message; 
     } 
     @Override 
     public void receive(SvnTarget target, SVNLogEntry le) throws SVNException { 
      if (le.getMessage() != null && le.getMessage().contains(message)) { 
       System.out.println("rev #" + le.getRevision() + ": " + le.getMessage()); 
       Map<String, SVNLogEntryPath> cps = le.getChangedPaths(); 
       for (Map.Entry<String, SVNLogEntryPath> e : cps.entrySet()) { 
        SVNLogEntryPath lep = e.getValue(); 
        System.out.println(lep.getType() + " " + lep.getPath()); 
       } 
      } 
     } 
    } 
} 
+0

Это похоже на выполнимый подход. Спасибо за помощь. Я дам этому классу выстрел по нашему требованию. Между, сообщение String может принимать JIRA ID в качестве входного права, поскольку есть тест «содержит». Правильно ли я это понимаю? – YogendraJ

+0

Точно. Вы можете настроить этот тест по своему вкусу, например. делая его нечувствительным к регистру или используя более сложный подход соответствия с использованием регулярного выражения. Кроме того, вам понадобится какой-то механизм, так что вы можете получить доступ к результатам извне 'GrepLogReceiver', это здесь просто печатает их на' STDOUT' - я сохранил его просто для краткости ':)' – zb226

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