- Проверка на брейкпоинты и временный код.
- Контроль тестирования\сборки
- Вставка имени ветки в сообщение коммита
- Настройка и добавление хуков в репы
- Дополнение
Шаблоны git-хуков, облегчающие трудовыебудни.
И немного поднимающие настроение. Чтобы завести своего гитотамагочи,
установите cowsay
и наслаждайтесь. А нет, так выпилите. Это ж
шаблон, в конце концов.
Помечать временный код – хорошее решение. Помечайте временный
код. Называйте специфично временные переменные, или добавляйте
соответствующий комментарий. Я, например, для помечания временного кода
использую слово Petuch
в данных, комментариях или как имя
временной переменной, используемой для отладки.
Хук отлавливает помеченный временный код, забытые бряки гнутых
дебаггеров и прерывает коммит при их нахождении.
REJECT_MESSAGE=$($GETTEXT "Кажется, тут сломанная ветка! Код содержит брейкпоинты или помеченные временные конструкции. Удалите их перед коммитом!")
CLEAR_STATUS_MESSAGE=$($GETTEXT "Код не содержит бряков и временного кода")
tc_check=$(git grep -i "$REGXP_TC" -- "$F_MASK")
if [ ${#tc_check} -gt 0 ]
then
echo -e $tc_check "\e[31m$REJECT_MESSAGE\e[0m" | cowsay -f bounty
echo -e $tc_check
exit 1
else
echo -e $tc_check "\e[36m$CLEAR_STATUS_MESSAGE\e[0m" | cowsay
echo -e $tc_check
fi
Перед коммитов выполняется команда на контроль качества. Прогон тестов, сборка.
TEST_PASSED=$($GETTEXT "\e[36mТесты пройдены успешно\e[0m")
TEST_FAILED=$($GETTEXT "
\e[31mCOMMIT REJECTED: Кажется, тут сломанная ветка!
Убедитесь, что программа работает корректно и повторите попытку.\e[0m
Если подозреваете, что в поломке виноват кто-то другой (или молодой вы),
воспльзуйтесь командой\n
\t\e[1mgit bisect\e[0m
")
$QCONTROL_COMMAND
RESULT=$?
if [ $RESULT -ne 0 ]
then
echo -e $TEST_FAILED | cowsay -f bounty
exit 1
else
echo -e $TEST_PASSED | cowsay
fi
В блок кода ниже вставить имена чанков в noweb-синтаксисе и
выполнить org-babel-tangle
(по-умолчанию C-c C-v t
)
#!/bin/bash
{{{l10n}}}
REGXP_TC="; Tracer()()\|.set_trace()\|petuch"
F_MASK="*.py"
QCONTROL_COMMAND="./manage.py test"
{{{Проверка на наличие нежелательного\временного кода}}}
{{{тесты перед коммитом}}}
exit 0
Всякие ЖИРО-образные системы любят, чтобы в сообщении коммита писались имена задач, чтобы их можно было вставлять в историю задач. И чтобы еще и ветки так же назывались. По жиротрадиции, это что-то вроде FOO-1337.
#!/bin/bash
BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD | grep "[[:upper:]].*-[[:digit:]].*")
echo "$BRANCH_NAME" >> $1
Один из вариантов – проекто-специфичные вещи описать в отдельном
орг-файле. Для того, чтобы чанки из этого сурца были доступны для
извлечения в проектном орг-файле, выполните M-x org-babel-lob-ingest
и укажите путь до файла program.org
#+TITLE: Пример настройки проекта
#+AUTHOR: Roman Zayrullin
#+EMAIL: krosenmann@gmail.com
#+STARTUP: showall
* На стройку!
Проект настраивается заполнением таблицы. Каждая переменная необходима
либо для работы и установки, а так же служит напоминанием, какой набор
хуков в какой проект установлен.
#+TBLNAME: setup
| Имя параметра | значение | Описание |
|------------------+---------------------------------------------+------------------------------------------------------------|
| REGXP_TC | "; Tracer()()" | Регулярка с нежелательными последовательностями |
| F_MASK | "*.py" | Маска файлов, по которым ведется поиск последовательностей |
| QCONTROL_COMMAND | "./manage.py test" | Контрольная команда (тесты, сборка, етс.) |
| PROJECT | "/home/roman/sources/django-business-logic" | Путь до проекта |
|------------------+---------------------------------------------+------------------------------------------------------------|
#+NAME: create-precommit
#+header: :shebang #!/bin/bash :var F_MASK=setup[3, 1] :var QCONTROL_COMMAND=setup[4, 1] :var REGEXP_TC=setup[2, 1]
#+BEGIN_SRC shell :noweb yes :tangle pre-commit :exports none :results output
{{{l10n}}}
{{{Проверка на наличие нежелательного\временного кода}}}
{{{тесты перед коммитом}}}
#+END_SRC
#+RESULTS: create-precommit
После того, как все необходимые параметры заданы:
1. ~C-c C-v t~ - для извлечения чанков с хуками
2. ~C-c C-c~ на строке CALL ниже
#+CALL: установка(PROJECT=setup[5, 1])
#+RESULTS:
* File-local variables :noexport:
# Local Variables:
# org-babel-noweb-wrap-start: "{{{"
# org-babel-noweb-wrap-end: "}}}"
# org-confirm-babel-evaluate: nil
# org-export-allow-bind-keywords: t
# End:
- Настройка
- Задать значения для переменных
- Вставить чанки интересующих хуков
{{{<имя чанка>}}}
- Выполнить
C-c C-v t
- Установка
- Перейти в чанк "установка"
- В хедере чанка, в переменной PROJECT, задать путь до проекта
- В чанке "установка" выполнить
C-c C-c
А если станет совсем печально и скучно, то на фейлы можно поставить
вот этого парня. Для установки извлеченный cow-файл поместите в
/usr/share/cowsay/cows
________________________________
< Кажется, здесь сломанная ветка >
--------------------------------
\
\
\
\
\
\
\ | \
,, |: \ /
/""-. + \, _|,: +- /|
_ /"'' \., \ \, _/ \:| \ |
./ \ ,________\ X- \| \
/ _,-'"\ \,-/ \_/ \ / \-,
|/' \ ,---/ \ | "{C\ /C)| \ /\
/ /"" | \__ ( \ __/ ', / ",
| /" .-. \ \ \-___''/ |, ', / ,"'
/" ,-' \, | \ | '-, \ / ',
/ .' '-\ \ \ \ ', ,'
/- /' | ""\ | \ | ,"
/ /' ,-\. |"\ , / ,. ',
/'/ .' ,-/ \--------,__ \ ""-" \/ / :
/' / ', ,---/ /-------, '--'"\ / /"-'
/' / ; '. ,-' /' '"'-.---'\ (__)
/' / ,--,__/ \-, /' / \.
/' | / / /"" \ .' /' \
| /\/__/| | / / /\ \
-____/ -.__/ -----\,__________/ \___________/