хук pre-commit, проверяющий код C++

Сегодня я обновил наш репозиторий и попытался его перекомпилировать (это приложение на С++). Он не компилируется. Моей первой реакцией было убить своего коллегу, но поскольку я не могу этого сделать, мне нужно найти другое решение.

Можно ли предотвратить фиксацию кода, который не компилируется? У нас есть Makefile, и то, что нужно сделать перед фиксацией, это просто проверить статус вывода команды make. Это правильно?

Как на практике я могу это реализовать (я никогда не работал с хуком svn)?


person Ruggero Turra    schedule 22.01.2011    source источник
comment
Настройте сервер сборки, который строит дерево раз в час. Тот, кто ломает телосложение, может мыть посуду или носить дурацкую кепку в течение дня.   -  person Hans Passant    schedule 22.01.2011
comment
@Hans: мне нужно более простое решение   -  person Ruggero Turra    schedule 22.01.2011
comment
Эм, ладно, нарушителю нужно купить пиво в пятницу. Сервер сборки действительно является тривиальным решением этой проблемы. Пункты 2 и 3 из книги Джоэла «12 шагов к лучшему коду»: joelonsoftware.com/articles/fog0000000043.html< /а>   -  person Hans Passant    schedule 22.01.2011
comment
Сервер сборки — более простое решение.   -  person ThatBlairGuy    schedule 23.01.2011


Ответы (1)


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

Один из способов сделать это — buidbot.

person Martin v. Löwis    schedule 22.01.2011
comment
он компилируется и создает исполняемый файл 30 секунд. Я думаю, что с соответствующими флагами в gcc (например, -gnats, как сказал goreSplatter) я могу сократить время до разумного. - person Ruggero Turra; 22.01.2011
comment
+1 у нас есть кодовая база, на создание которой уходит почти час. Но даже если бы это заняло всего 20 секунд, я бы посчитал задержку на коммите недопустимой. Сервер сборки — это то, что нужно, и это то, что мы используем. Вы всегда можете запустить его локально на своем ящике разработчика, если у вас нет полномочий/влияния, чтобы настроить официальную версию. - person Wim Coenen; 22.01.2011