Поделитесь общими / полезными перехватчиками предварительной фиксации SVN [закрыто]

StackOverflow https://stackoverflow.com/questions/884608

Вопрос

Каковы некоторые распространенные и / или полезные перехваты предварительной фиксации для 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 всегда будет установлен

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top