Как установить и управлять пользовательским свойством версии svn с помощью хуков

Я хочу настроить следующее:

  1. Когда разработчики регистрируют код из своего SVN-клиента, ловушка должна проверять, установлено ли свойство ревизии CodeReview вместе со значением свойства, если оно установлено.
  2. Если он не установлен, добавьте свойство ревизии и установите для него значение «Не выполнено».
  3. После проверки кода обновите значение свойства до «Готово».

Я получаю ошибку на самом шаге 1. Я попытался добавить хук перед фиксацией, чтобы проверить, установлено ли свойство ревизии. Я не могу сделать это в хуке перед фиксацией. Я написал файл pre-commit.BAT и использовал svn propget, как показано ниже:

"C:\Program Files\Subversion\bin\svn.exe" propget "CodeReview" -t %TXN% %REPOS% >property FIND "%property%" "C:\repos\hooks\requiredproperties.txt">Null< br> Если %ERRORLEVEL% EQU 0 перейти к OK1

Это дает ошибку -- жалуется на -t.

Может ли кто-нибудь помочь мне со сценариями для трех шагов?


person Yeshwant    schedule 16.04.2013    source источник
comment
Статус Codereview также не имеет смысла вне зависимости от ревизии файла, который был проверен (нужно как-то хранить ревизию со статусом)   -  person Lazy Badger    schedule 17.04.2013


Ответы (3)


Как уже отмечалось, на шаге 1 необходимо использовать svnlook. Но ситуация еще хуже: настоятельно не рекомендуется (хотя и не запрещается) изменять содержимое транзакций в предварительном порядке. хук фиксации, чтобы избежать непредсказуемых результатов, но вы хотите сделать это на шаге 2

И, JFYI, свойство (любое свойство svn) является атрибутом файла или каталога, который вы пытались получить из транзакции, что никогда не будет успешным

person Lazy Badger    schedule 16.04.2013

У меня есть перехватчик предварительной фиксации, который может убедиться, что свойства установлены для файлов, когда они зафиксированы, и что эти свойства установлены на определенные свойства.

Это обеспечит установку свойства для файлов при их фиксации. ОДНАКО есть несколько проблем:

Свойства файла редактируются точно так же, как файлы. Если я установлю в своем файле свойство CodeReview = Done в ревизии 14, оно будет установлено на CodeReview = Done, когда следующий человек зафиксирует свое изменение в Subversion. Не совсем то, что вы хотите.

Не существует простого способа запросить свойства файла, чтобы увидеть, какие из них имеют значение Done, а какие нет.

Моя скромная рекомендация: вы направляетесь в мир боли. Вместо этого настройте Jenkins в качестве сервера непрерывной сборки. Каждый раз, когда кто-то вносит изменения в Subversion, Дженкинс запускает сборку, записывая, что было изменено и кем. Затем вместо того, чтобы помечать отдельные файлы как просмотренные или не проверенные, вы проверяете сборку Jenkins, которая выполняется для всего набора изменений (что в любом случае имеет больше смысла).

Вы можете использовать Promoted Build Plugin, чтобы отметить, является ли конкретный сборка была проверена и прошла ли она проверку кода. Вы также можете прикрепить к каждой сборке комментарий о любых проблемах, обнаруженных при проверке кода.


А теперь, извините меня, я беру свою мыльницу...

Большинство обзоров кода довольно бесполезны. Существует три основных аспекта проверки кода:

  1. Соблюдал ли пользователь корпоративные стандартные практики?
  2. Хороша ли логика, заложенная в программе?
  3. Разработчик допустил глупую ошибку?

Слишком много обзоров кода сосредоточены на проблеме № 1 и оставляют мало времени для проверки остальной части кода или даже для разработки. Я провел часы в обзоре кода, где разработчик назвал переменную CustomerServiceResponseCode, а не customerServiceResponseCode. Мы даже спорили, должно ли это быть responseCodeCustomerService. Часы моей жизни никогда не вернутся к более важным вещам, таким как игра в Angry Birds.

Что касается пункта № 2: это нужно сделать до того, как будет написан какой-либо код. Слишком поздно, когда разработчик потратил 5 часов на кодирование, чтобы ему сказали Вы все сделали неправильно.

Теперь переходим к пункту №3.

Перед просмотром кода:

Разработчик №1: Эй, в вашей программе ошибка!

Разработчик №2: Вау, да. Я забыл разобрать вербекс перед тем, как подключить его. Мальчик, это глупая ошибка.

Результаты: один разработчик, который чувствует себя некомпетентным и глупым.

После проверки кода:

Разработчик №1: Мы только что получили сообщение о том, что в программе есть ошибка!

Разработчик №2: Вау, мы забыли разобрать вербекс перед тем, как его подключить. Как это ускользнуло от обзора кода?

Результаты: целая команда разработчиков, которые чувствуют себя некомпетентными и глупыми.

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

Что делать?

  • В рамках вашего процесса все новые разработки должны обсуждаться до написания кода. Это не проверка кода, это часть вашей системы отслеживания проблем.

  • Используйте автоматизированные инструменты, чтобы поймать вещи. В Java у нас есть Checkstyle (правильно ли отформатирован код), Findbugs, PMD (оба инструмента ловят потенциальные ошибки), детекторы копирования/вставки и т. д. Дженкинс может запускать эти программы и строить всевозможные диаграммы и графики. Более того, это может быть частью игры с непрерывной интеграцией. Вы получаете баллы за решение задач Checkstyle и Findbugs и теряете баллы за создание новых. Также настаивайте на исправлении предупреждений компилятора и уведомлений об устаревании. Опять же, Дженкинс может отслеживать их и давать баллы за их исправление и обработку.

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

Использование автоматических инструментов обычно выявляет больше ошибок, чем ручная проверка кода. Автоматизированное тестирование может определить, когда логика кода может иметь проблемы.

Это не означает, что обзоры кода бесполезны. Это просто позволяет обзору кода быть общим обзором кода. Например:

  • Что разработчик думает о кодировании? Сочли ли они реализацию более сложной, чем должна была быть, из-за плохого дизайна в другом месте?
  • Программа по-прежнему читабельна и понятна? Не слишком ли много исключений и пунктов if, чтобы обойти проблемы с реализацией?
  • Соблюдалась ли общая стратегия? Была ли у разработчика проблема с использованием базового класса/API из-за плохой реализации?
  • Следовал ли разработчик согласованной логике?
  • Зависит ли разработчик, скажем, от одной сторонней библиотеки JSON, и вы видели, как другая сторонняя библиотека используется в остальной части кода?

Не делайте обзоры кода ради обзоров кода. Не тратьте слишком много времени на реализацию код-ревью. И, ради всего святого, не делайте код-ревью перед фиксацией. Это означает, что разработчики застревают в ожидании одобрения, прежде чем они смогут выполнить какую-либо работу.

person David W.    schedule 16.04.2013
comment
1. Я склонен не соглашаться с вашими видением и приоритетами задач CR. № 2 — самая важная и полезная часть: не позволяйте джуниорам писать дерьмовый, но формально собираемый код. В этом аспекте Jenkins != CR (поскольку он не может обнаружить уродливый стиль кодирования кодовых обезьян, и этот стиль более опасен в перспективе, чем необнаруженные ошибки) - person Lazy Badger; 17.04.2013
comment
@LazyBadger Я не перечислил элементы по порядку. Я поставил № 1 первым, потому что это то, на что большинство CR тратят свое время. Да, № 2 является наиболее важным, но его следует выполнить до написания кода. CI != CR, но такие инструменты, как Checkstyle, могут обнаруживать уродливый стиль кодирования кодовых обезьян. Нет необходимости тратить часы на решение вопросов форматирования. Jenkins хорош не потому, что это CI, а потому, что он может интегрировать отслеживание проблем, модульные тесты, оценку кода и т. д. Благодаря всей информации он становится для нас центром разработки. Мы сделали код-ревью, но сосредоточились на моментах, которые я упомянул в конце. - person David W.; 17.04.2013
comment
#2 (для меня) это бесконечный процесс (до-в-после кодирования), потому что вы не можете гарантировать качество кода со стороны низкоуровневых кодеров (checkstyle только для стиля, не для правильно оформленного, но ужасно в коде реализации). # 2 (опять же - для меня) - единственная причина для использования CR в соответствующих случаях использования - person Lazy Badger; 18.04.2013
comment
Спасибо, Дэвид. Я думаю о следующем процессе для CR: - person Yeshwant; 19.04.2013
comment
1. Статический анализ: выполнен на 100% проверенном коде. Он действует как привратник, автоматизированный с помощью хука предварительной фиксации. Учитывая, что в устаревшем коде будет много проблем, создайте базовый код, а затем примените контроль только к новым проблемам. 2. Экспертные проверки: делайте выборочно и на доработку (учитывая, что все проверки атомарны). В целях отслеживания используйте свойство редакции для записи статуса проверки (требуется, WIP, готово). Если доступен инструмент для управления рабочим процессом рецензирования, настройте его для обновления свойства редакции, в противном случае запустите скрипт вручную. - person Yeshwant; 19.04.2013
comment
Для отслеживания/отчетности/контроля: напишите ETL для заполнения данных рецензирования в БД. Также запустите статический анализ репозитория SVN. Создавайте отчеты бизнес-аналитики на основе данных экспертной оценки и данных статического анализа, чтобы удовлетворить информационные потребности различных заинтересованных сторон. - person Yeshwant; 19.04.2013

Вы не можете использовать svn.exe, так как он не поддерживает параметр -t. Вы должны использовать

svnlook.exe
person Peter Parker    schedule 16.04.2013