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

Какие есть общие и / или полезные перехватчики перед фиксацией для SVN?


person Community    schedule 19.05.2009    source источник
comment
тот, который не работает для конкретного пользователя в четные дни месяца?   -  person crashmstr    schedule 19.05.2009
comment
Вопрос, который вы задаете, кажется субъективным и, скорее всего, будет закрыт.   -  person Michael Myers    schedule 19.05.2009
comment
Это должна быть вики сообщества? он субъективен и не требует решения конкретной проблемы.   -  person Dan Davies Brackett    schedule 19.05.2009
comment
Я думаю, что его можно было бы отредактировать, чтобы оно было действительно полезным, но в его текущем воплощении следует закрыть.   -  person Instantsoup    schedule 19.05.2009
comment
На самом деле это субъективно, но он может научить нас ловушкам, которые используют люди, что более полезно (хотя и менее забавно), чем ваш любимый комикс. Один запрос ко всем отвечающим людям - не могли бы вы опубликовать код крючка? (если возможно)   -  person David Rabinowitz    schedule 19.05.2009
comment
Вопрос о полезных вещах, которые можно сделать в хуках предварительной фиксации SVN, был бы полезен и интересен, но это не то, что есть. Если это не будет отредактировано.   -  person Michael Myers    schedule 19.05.2009


Ответы (22)


У нас есть ловушка фиксации сообщения, которая отправляет сообщение в аккаунт Twitter. Использует twitsvn (отказ от ответственности: я участник этого проекта).

Глупый? Может быть ... но это оказалось для нас хорошим способом сообщить о том, что происходит в нашем репозитории, некоторым членам нашей команды, испытывающей трудности с контролем версий. Как только SVN начал разговаривать с ними через свой твиттер-клиент, он уже не был похож на черный ящик.

person Community    schedule 24.11.2009
comment
Электронная почта такая две тысячи и поздно ... - person Roger; 19.11.2014

Что пользователь фактически ввел комментарий к сообщению о фиксации, и что оно содержит конкретный номер проблемы, которую нужно отслеживать.

person Jon    schedule 19.05.2009
comment
Почему это получило голосование против? - person Instantsoup; 19.05.2009
comment
Наверное, кто-то, кто не любит оставлять комментарии! ;) - person John Feminella; 19.05.2009
comment
Да, отличный, неконструктивный отзыв! - person Jon; 19.05.2009
comment
Может случиться так, что принудительные номера проблем не являются фаворитом. Я вижу хорошую вещь, но если я обнаружил небольшую ошибку, проще ее исправить сразу, чем войти в систему ошибок и записать для нее новую проблему. Это зависит от вашего процесса и инструментов, но я могу понять тех, кому не нравится такое принуждение. - person Macke; 20.05.2009
comment
Конечно, это проще исправить сразу. К сожалению, аудита нет. Мы обеспечиваем соблюдение номеров проблем, чтобы наш отдел QA мог убедиться, что исправления ошибок внесены как в производственную ветку, так и в магистраль, чтобы избежать регресса. - person Instantsoup; 20.05.2009
comment
Мы используем эту ловушку перед фиксацией, чтобы требовать от разработчиков ввода комментариев. Это удобно для (а) принудительного использования комментариев (некоторым новичкам в SCM потребовалось некоторое время, чтобы осознать преимущества этого) и (б) предотвращения случайного совершения фиксации, не оставив сообщения. - person the_mandrill; 20.11.2009
comment
Мне не нравится конкретная проблема с отслеживанием детали из-за боли, которую она вызывает. Если есть настоящая ошибка, то мне нравится идея прикрепить ее к ошибке. Однако, если я создаю новую функцию, теперь мне нужно создать ошибку, чтобы зафиксировать код. Грязный. Кроме того, в инструментах прямо сейчас нет хорошего способа связать ошибки вместе в зависимости от того, какой контекст кода был изменен, поэтому часто нам приходится заниматься бесконечным поиском, чтобы найти нужные изменения. Наш SW-лидер считает этот хук хорошей идеей, а я нет. - person San Jacinto; 23.11.2009
comment
Может быть, вы сможете поговорить с ним или побить друг друга пластиковыми мечами или что-то в этом роде ... Исправления ошибок могут быть связаны через версию выпуска исправления ошибок ... новые функции могут быть связаны и сгруппированы вместе с помощью пользовательских историй ... - person Jon; 23.11.2009
comment
@Jon, к сожалению, он не самый открытый человек. Для меня это не конец света; Я просто делаю это и продолжаю свой день. Когда-нибудь он поймет, почему наша конкретная реализация не самая лучшая. - person San Jacinto; 23.11.2009
comment
Мой трекер отслеживает ошибки, а также функции ... - person Vinko Vrsalovic; 24.11.2009

Проверка абсолютных путей в различных текстовых файлах (например, VRML, XML и т. Д.). У большей части зарегистрированного кода никогда не должно быть абсолютных путей, однако некоторые люди и инструменты настаивают на создании жестко запрограммированного кода.

person Community    schedule 19.05.2009
comment
Никогда не думал о том, чтобы решить эту проблему с помощью предварительной фиксации ... - person powtac; 20.05.2009
comment
После достаточно большого количества неудачных ревизий я реализовал это в основном для себя (сейчас я перешел на DVCS: es, что позволяет продолжать коммит до тех пор, пока проблемная цепочка не будет работать достаточно хорошо для слияния). Тем не менее, ребята всегда были довольны, когда ловушка не допустили того, чтобы их ошибки стали достоянием общественности, так что добавление этих вещей - хорошая идея. - person Macke; 20.05.2009

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

person Ben S    schedule 19.05.2009
comment
Я только что это сделал # config section $ numberOfWords = 3; $ svnlook = '/ usr / bin / svnlook'; # -------------------------------------------- $ repos = $ ARGV [0]; $ txn = $ ARGV [1]; $ комментарий = $svnlook log -t "$txn" "$repos"; chomp ($ комментарий); if ($ comment! ~ m / ((\ b [\ S] {2,} \ b) \ s *) {$ numberOfWords,} /) {print STDERR Пожалуйста, укажите более подробную информацию в своем сообщении о фиксации. \ n; выход (1); } выход (0); - person sleep-er; 12.03.2010

  • Проверьте наличие вкладок и отклоните регистрацию.
  • Проверьте наличие несовместимых окончаний строк и отклоните регистрацию.
  • Проверьте наличие «CR: [имя пользователя]» и отклоните регистрацию, если нет проверки кода.
person i_am_jorf    schedule 19.05.2009
comment
Проверить вкладки? Что ты имеешь в виду? - person demoncodemonkey; 13.05.2011
comment
@demoncodemonkey - В стандартах кодирования часто указывается, должны ли программисты делать отступы с помощью табуляции или пробелов. В проектах, которые строго соблюдают стандарты кодирования, ловушка предварительной фиксации может обнаруживать (например) строки, в которых используются табуляции для отступов, и либо отклонять фиксацию, либо автоматически преобразовывать их в пробелы. - person bta; 24.05.2011
comment
Ага ... Хорошо, я понял. Спасибо :) - person demoncodemonkey; 24.05.2011
comment
Да, это должно быть проверено на табуляции или пробелы, независимо от того, что указывает ваш стиль кодирования. Лично я предпочитаю пробелы, но это уже другая священная война. :) - person i_am_jorf; 01.09.2011
comment
Проверьте вкладки и откажитесь от регистрации. Не могли бы вы поделиться этим? - person jpo38; 28.08.2015
comment
Хех, это было много лет назад. У меня его больше нет под рукой. - person i_am_jorf; 28.08.2015

Возможно, вам стоит взглянуть на: 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/

person Community    schedule 05.08.2010
comment
в первой ссылке ссылки на скрипты не работают. Вторая хороша. svn.apache.org/ репозиторий / asf / subversion / branch / scons-build-system / - person Nicolaj Schweitz; 19.01.2012

Мне нравится использовать svn хуки, чтобы:

  • обеспечить соблюдение более строгих требований стиля кода
  • проверьте очевидные синтаксические ошибки
  • убедитесь, что специальные ключевые слова Trac, такие как "Исправления" или "Адреса", действительно предшествуют соответствующему номеру проблемы.
person John Feminella    schedule 19.05.2009

Я проверяю тип файла и убеждаюсь, что некоторые запрещенные типы не зафиксированы случайно (например, .obj, .pdb). Ну, не с тех пор, как в первый раз кто-то проверил 2 гига временных файлов, сгенерированных компилятором :(

для окон:


@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
person Community    schedule 20.05.2009
comment
на самом деле это должно быть сделано в svn: ignore, а не в хуке перед фиксацией. - person ; 25.11.2009
comment
Я не уверен - мы говорим об «универсальных» шаблонах игнорирования, поэтому, если вы не хотите игнорировать свойства в каждом каталоге (и, следовательно, их сложно изменить, если вам нужно добавить новый шаблон), вам нужно что-то более «централизованное». . Я думаю, что в svn отсутствуют настоящие глобальные свойства (например, хранятся на сервере, а не на каждом клиенте) - person gbjbaanb; 27.11.2009

Я использую обработчик post-commit, чтобы переписать свойство author на понятное имя из нашего дерева ldap. (аутентификация с идентификатором сотрудника)

person Community    schedule 27.08.2009

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

Эти проблемы будут правильно скомпилированы, но сборка все равно будет нарушена из-за отсутствия исполняемых файлов.

person Community    schedule 27.08.2009

В компании, над которой я сейчас работаю, это проверено:

  • Если для двоичных файлов установлен атрибут блокировки необходимости;
  • Если файлы Java имеют стандартное уведомление об авторских правах и включает ли он текущий год;
  • Если код правильно отформатирован (мы используем Jalopy для форматирования кода) - это может показаться глупым, но на самом деле это упрощает сравнение текста между разными версиями;
  • Если в коде есть сообщение о фиксации;
  • Если структура каталогов соответствует определенному (все проекты должны находиться в определенной папке SVN, и каждый проект должен иметь теги, ветвь и главную папку);

Я думаю, это все.

Мне нравится идея проверки, связана ли фиксация с заявкой; для меня это действительно имеет большой смысл.

person Community    schedule 22.11.2009

Некоторые предпочитают запускать подобный lint инструмент для данного языка, чтобы находить общие проблемы в коде и / или применять стиль кодирования. Однако в небольшой и опытной команде я предпочитаю позволять выполнять каждую фиксацию и решать возможные проблемы во время непрерывной интеграции и / или проверки кода. Благодаря этому коммиты выполняются быстрее, что способствует более частому их совершению, что упрощает интеграцию.

person Community    schedule 20.11.2009
comment
Тем не менее, проверка того, что в отступах нет смешанных табуляции / пробелов, может быть хорошей идеей. Мягче, чем полный LINT, но все же полезно. - person Macke; 08.06.2012

Я использую check-mime-type .pl pre-commit hook, чтобы проверить, установлены ли параметры MIME Type и End of line для зафиксированных файлов. Я использую Subversion для публикации файлов, которые будут отображаться на веб-сайте с помощью DAV, и все файлы без установленного типа MIME обслуживаются как текстовые файлы (например, исходный HTML-код отображается в браузере вместо визуализированной разметки).

person Community    schedule 22.11.2009
comment
check-mime-type.pl теперь: svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/ - person Malcolm; 21.03.2014

Вставьте примечание в багтрекер Mantis с подробностями списка изменений на основе сообщения фиксации, имеющего "номер проблемы" или тому подобное, через RegEx.

person Community    schedule 19.05.2009
comment
Это не до фиксации, а после фиксации. - person Macke; 20.05.2009

Что у него есть сообщение о фиксации, и это! = Чем «исправление ошибок». Блин, я ненавидел эти бесполезные сообщения!

person Community    schedule 22.11.2009

Мы используем комбинацию ловушек перед фиксацией и после фиксации, чтобы автоматически обновлять bugzilla с помощью связанной записи из фиксации svn.

Мы используем вторую ловушку (перед фиксацией), чтобы гарантировать, что соответствующие свойства svn: eol-style и svn: keywords установлены для файла перед его добавлением в репозиторий.

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

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

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

Для интеграции с bugzilla я бы посоветовал посмотреть scmbug.

person Community    schedule 24.11.2009

Я использую следующий скрипт-перехватчик, чтобы убедиться, что окончания строк исходного кода и разрешения сценариев оболочки верны (это неприятно, когда кто-то проверяет окна, когда все выглядит нормально и нарушает сборку 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
person Community    schedule 20.04.2011

Как насчет ловушки для компиляции проекта? например Беги сделай все. Это гарантирует, что никто не проверит код, который не компилируется! :)

person Community    schedule 20.11.2009
comment
Что делать, если сборка занимает 5-10 минут? Я заинтригован, но это кажется трудным. - person Macke; 01.12.2009
comment
скорее всего, лучше вместо этого выполнить какую-нибудь проверку линта, а затем использовать cruisecontrol.sourceforge.net или что-нибудь для обработки строит - person Jason; 07.01.2010
comment
Вот для чего нужен ci-сервер ... - person André; 02.02.2010
comment
Я не понимаю, почему этот ответ получил отрицательное голосование. Существует множество наборов инструментов, которые используют автоматические тесты, которые выполняются после фиксации или, по крайней мере, один раз в день. Когда это не удается, все получают электронное письмо, и разработка останавливается до тех пор, пока проблема не будет исправлена. Однако, если сборка занимает 5-10 минут, может быть лучший способ сделать это, но я не думаю, что это повод для отрицания этого ответа, поскольку он может дать другим пользователям несколько хороших идей. - person iuiz; 22.11.2010

Решение проблемы отсутствия внешних файлов в SVN 1.5 с помощью PostUpdate и PreCommit

person Community    schedule 21.11.2009

Мне бы понравился хук, который проверяет заметку [Reviewer: xyz] в сообщении фиксации и отклоняет фиксацию.

person Community    schedule 22.06.2010

Я думаю о написании одного, чтобы проверить doctype в файлах aspx / html, просто чтобы убедиться, что все используют правильный.

Кроме того, у вас может быть обработчик до (или после) фиксации, отправляющий уведомление на ваш CI-сервер как описано в блоге Hudson

person Community    schedule 16.07.2010

Я проверяю коллизию регистров (тупые окна), а также require-mergeinfo.pl, чтобы убедиться, что клиент не менее 1,5 - таким образом svn: mergeinfo всегда будет установлен

person Community    schedule 20.11.2010