Поделитесь общими / полезными перехватчиками предварительной фиксации SVN [закрыто]
-
23-08-2019 - |
Вопрос
Каковы некоторые распространенные и / или полезные перехваты предварительной фиксации для SVN?
Решение
У нас есть перехват фиксации записи, который отправляет сообщение в учетную запись Twitter.Использование twitsvn ( твитсвн ) (отказ от ответственности:Я являюсь коммиттером в этом проекте).
Глупый?Возможно ... но для нас это оказалось хорошим способом сообщить о работе нашего репозитория некоторым членам нашей команды, испытывающим трудности с контролем версий.Как только SVN начал общаться с ними через их клиент Twitter, это уже не было так сильно похоже на черный ящик.
Другие советы
Что пользователь действительно ввел комментарий к сообщению о фиксации и что оно содержит конкретный номер проблемы для отслеживания.
Проверка абсолютных путей в различных текстовых файлах (т.е.VRML, XML и т.д.).Большая часть возвращаемого кода никогда не должна иметь абсолютных путей, тем не менее, некоторые люди и инструменты настаивают на создании жестко закодированного материала.
Я подсчитываю количество слов при отправке сообщений.Они должны состоять из 5 слов или более.Это привело к некоторым комедийным оскорблениям в мой адрес...
- Проверьте наличие вкладок и отклоните регистрацию.
- Проверьте, нет ли несоответствующих строк окончания и отклоните регистрацию.
- Проверьте наличие "CR:[имя пользователя]" и отклоните регистрацию если проверка кода не проводится.
Возможно, вы захотите взглянуть на:http://svn.apache.org/repos/asf/subversion/branches/1.6.x/www/tools_contrib.html#hook_scripts (Эта страница может быть устаревшей, очевидно, что она больше не поддерживается для Subversion 1.7)
Или непосредственно в:https://svn.apache.org/repos/asf/subversion/trunk/contrib/
Мне нравится использовать svn
крючки для:
- применяйте более строгие требования к стилю кода
- проверьте, нет ли очевидных синтаксических ошибок
- убедитесь, что специальные ключевые слова Trac, такие как "Исправления" или "Адреса", действительно предшествуют соответствующему номеру проблемы
Я проверяю тип файла и убеждаюсь, что определенные запрещенные типы не зафиксированы случайно (например .obj, .pdb).Ну, не с тех пор, как кто-то впервые проверил 2 гигабайта временных файлов, сгенерированных компилятором : (
для Windows:
@echo off
svnlook log -t "%2" "%1" | c:\tools\grep -c "[a-zA-z0-9]" > nul
if %ERRORLEVEL% NEQ 1 goto DISALLOWED
echo Please enter a check-in comment 1>&2
exit 1
:DISALLOWED
svnlook changed -t %2 %1 > c:\temp\pre-commit.txt
findstr /G:"%1\hooks\ignore-matches.txt" c:\temp\pre-commit.txt > c:\temp\precommit-bad.txt
if %ERRORLEVEL% NEQ 0 exit /b 0
echo disallowed file extension >> c:\temp\precommit-bad.txt
type c:\temp\precommit-bad.txt 1>&2
exit 1
Я использую перехват после фиксации, чтобы переписать свойство author на понятное имя из нашего дерева ldap.(аутентификация осуществляется с помощью идентификатора сотрудника)
Отличный способ фиксации, который у нас есть в нашем архиве, - проверить все .Проекты VCPROJ (или .CSPROJ) visual Studio, чтобы убедиться, что выходные каталоги не были изменены на что-либо локальное (обычно используемое для отладки).
Эти проблемы будут скомпилированы должным образом, но все равно нарушат сборку из-за отсутствия исполняемых файлов.
В компании, в которой я сейчас работаю, это проверено:
- Если двоичные файлы имеют установленный атрибут needs lock;
- Если файлы Java содержат стандартное уведомление об авторских правах и если оно включает текущий год;
- Если код правильно отформатирован (мы используем Jalopy для форматирования кода) - это может показаться глупым, но на самом деле это упрощает сравнение текста между разными версиями;
- Если код содержит сообщение о фиксации;
- Если структура каталогов соответствует тому, что определено (все проекты должны находиться в определенной папке SVN, и каждый проект должен иметь теги, ветку и магистральную папку);
Я думаю, это все.
Мне нравится идея проверить, связана ли фиксация с тикетом;на самом деле для меня это имеет большой смысл.
Некоторые предпочитают запускать похожий на lint инструмент для данного языка, чтобы находить общие проблемы в коде и / или применять стиль кодирования.Однако в небольшой и квалифицированной команде я предпочитаю разрешать выполнение каждого коммита и устранять возможные проблемы во время непрерывной интеграции и / или проверки кода.Благодаря этому фиксации выполняются быстрее, что способствует более частым фиксациям, что облегчает интеграцию.
Я использую check-mime-type.pl крючок предварительной фиксации чтобы проверить, что для зафиксированных файлов заданы параметры MIME Type и End of line.Я использую subversion для публикации файлов, которые будут видны на веб-сайте с использованием DAV, и все файлы без установленного типа MIME передаются в виде текстовых файлов (напримерИсходный код HTML отображается в браузере вместо отображаемой разметки).
Вставьте заметку в Mantis bugtracker с подробностями списка изменений на основе сообщения о фиксации, содержащего 'issue #' или подобное, с помощью регулярного выражения.
Что у него есть сообщение о фиксации, и это !=, чем "исправление ошибки".Черт, как же я ненавидел эти бесполезные сообщения!
Мы используем комбинацию хуков до фиксации и после фиксации, чтобы автоматически обновлять bugzilla соответствующей записью из svn commit.
Мы используем второй (предварительный коммит) хук, чтобы убедиться, что соответствующие свойства svn: eol-style и svn: keywords установлены для файла перед его добавлением в репозиторий.
У нас есть третий (после фиксации) хук для запуска сборки и отправки результатов по почте, если сборка нарушена, и для информирования всех, когда сборка была исправлена снова.
У нас есть четвертый (после фиксации) хук для запуска репликации svn, чтобы гарантировать, что локальная репликация является максимально актуальной.
К сожалению, я не могу опубликовать исходные тексты к ним, но, за исключением интеграции с Bugzilla, они достаточно просты в реализации, и Хадсон вероятно, это лучший выбор для непрерывной интеграции.
Для интеграции с bugzilla я бы предложил посмотреть на scmbug ( скамбуг ).
Я использую следующий скрипт подключения, чтобы убедиться, что окончания строк исходного кода и разрешения сценариев оболочки верны (неприятно, когда кто-то проверяет Windows, когда все кажется нормальным, и прерывает сборку unix).
#!/bin/bash
REPOS="$1"
TXN="$2"
# Exit on all errors.
set -e
SVNLOOK=svnlook
echo "`$SVNLOOK changed -t "$TXN" "$REPOS"`" | while read REPOS_PATH
do
if [[ $REPOS_PATH =~ A[[:blank:]]{3}(.*)\.(sh|c|h|cpp) ]]
then
if [ ${#BASH_REMATCH[*]} -ge 2 ]
then
FILENAME=${BASH_REMATCH[1]}.${BASH_REMATCH[2]};
# Make sure shell scripts are executable
if [[ sh == ${BASH_REMATCH[2]} ]]
then
EX_VALUE="true"
if [ -z "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:executable \"$FILENAME\" 2> /dev/null`" ]
then
ERROR=1;
echo "svn ps svn:executable $EX_VALUE \"$FILENAME\"" >&2
fi
EOL_STYLE="LF"
else
EOL_STYLE="native"
fi
# Make sure every file has the right svn:eol-style property set
if [ $EOL_STYLE != "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:eol-style \"$FILENAME\" 2> /dev/null`" ]
then
ERROR=1;
echo "svn ps svn:eol-style $EOL_STYLE \"$FILENAME\"" >&2
fi
fi
fi
test -z $ERROR || (echo "Please execute above commands to correct svn property settings." >& 2; exit 1)
done
Как насчет хука для компиляции проекта?например ,Беги, делай все.Это гарантирует, что никто не проверит код, который не компилируется!:)
Устранение недостатка внешних файлов в SVN 1.5 с помощью PostUpdate и PreCommit
Мне бы понравился хук, который проверяет наличие [Рецензента:xyz] обратите внимание на сообщение о фиксации и отклоняет фиксацию.
Я подумываю о том, чтобы написать один для проверки doctype в файлах aspx / html, просто чтобы убедиться, что все используют правильный.
Кроме того, у вас может быть перехватчик предварительной (или последующей) фиксации, отправляющий уведомление на ваш сервер CI как описано в блоге Hudson
Я проверяю наличие коллизии регистров (глупые окна), а также require-mergeinfo.pl чтобы убедиться, что клиент равен как минимум 1.5 - таким образом, svn: mergeinfo всегда будет установлен