Запретить фиксацию кода с помощью svn, если используются некоторые устаревшие функции C / C ++ - PullRequest
1 голос
/ 02 апреля 2010

Есть ли способ запретить разработчикам вводить код при использовании определенных небезопасных или устаревших функций? Например:

  • зсапЕ
  • atoi
  • получает
  • и т.д ..

Ответы [ 4 ]

8 голосов
/ 02 апреля 2010

Проект, над которым я работал, использует простой набор макросов в заголовке, который включен в каждый файл (некоторые компиляторы позволяют указывать такой заголовок в командной строке, поэтому вы можете принудительно использовать его в make-файле): *

#define strcpy  strcpy_is_banned_use_strlcpy
#define strcat  strcat_is_banned_use_strlcat
#define strncpy strncpy_is_banned_use_strlcpy
#define strncat strncat_is_banned_use_strlcat
#define sprintf sprintf_is_banned_use_snprintf

С этими макросами сборка не удастся, если вы попытаетесь использовать запрещенную функцию (и компоновщик скажет вам, что вы должны использовать вместо этого).

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

Простой, но эффективный.

6 голосов
/ 02 апреля 2010

Вы можете использовать ловушку предварительной фиксации Subversion. Пример здесь: http://wordaligned.org/articles/a-subversion-pre-commit-hook

Не должно быть слишком сложно написать несколько регулярных выражений для сканирования ваших коммитов на функции, которые вам не нужны

4 голосов
/ 02 апреля 2010

Вы можете пройти часть пути, используя «svnlook Change», а затем «svnlook cat» в хуке пост-фиксации и grep для проверки интересующих вас функций.

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

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

1 голос
/ 02 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...