Git commit mensagem e Redmine

Em nossa empresa usamos Redmine e Git em nossas atividades diárias (sim, codificamos todos os dias :)). Também gostamos de fazer referência ao problema do Redmine em nossa mensagem de confirmação, por exemplo:

git commit -m "refs #123: Lorem ipsum message"

e isso é realmente útil para conectar o código ao problema.

Git tem a oportunidade de usar ganchos para executar a verificação durante a operação (commit, push, …) para que possamos usar um gancho específico ( commit-msg ) para garantir que nossa mensagem de commit seja corretamente conectada ao Redmine.

Eu crio um script simples que você pode usar para “bloquear” o commit que não corresponde a um padrão específico ou referindo um problema errado no Redmine, por exemplo:

git commit -m "refs 1234566890: Lorem ipsum" 
Commit need to be "[refs|fix] #ID: message"

ou

git commit -m "refs #1234: Lorem ipsum"
You are working as user 3 but issue is not assigned to you

Requerimento

Você precisa ter git e bash em sua máquina, python também é necessário, mas estou trabalhando para remover essa dependência.

Você precisa habilitar REST WS em seu Redmine, isso é possível em admin / settings / autentication .

Você precisa encontrar sua chave de API em sua página de perfil no Redmine ( https://redmine.yourcompany.com/my/account ).

Configuração

Você precisa copiar o código a seguir no gancho commit-msg . O arquivo de gancho estará em yourepo /.git/hooks/commit-msg e deve ser executável:

touch $YOUR_REPO/.git/hooks/commit-msg
chmod
+x $YOUR_REPO/.git/hooks/commit-msg
edit $YOUR_REPO
/.git/hooks/commit-msg

Cole o seguinte código:

#!/bin/bash

regex
="^(refs|fix)s#[0-9]+:"
var=`head -n 1 $1`

function info {
echo
>&2 $1
}

function debug {
debug
=false
if $debug
then
echo
>&2 $1
fi
}

function get_json {
python
-c "import sys;import json;j=json.loads(sys.stdin.read());print str(j$1);"
}

function redmine_json {
redmine_host
=$(git config redmine.host)
redmine_apikey
=$(git config redmine.apikey)
curl
--silent -k -H "Content-Type: application/json" -X GET -H "X-Redmine-API-Key: $redmine_apikey" "$redmine_host/$1"
}

if [[ "$var" =~ $regex ]]
then
debug
"Commit message: OK"
else
# Define format message forfirst line in commit message
info
"Commit need to be "[refs|fix] #ID: message""""
exit 1
fi

issue_id
=`echo $var | sed 's/(refs|fix) #([0-9]*).*/2/'`
issue
=`redmine_json ""issues/$issue_id.json""`

if [[ ""$issue"" != "" "" ]]
then
debug
""Issue exist: OK""
else
info
""Issue $issue_id don't exist""
exit 2;
fi

user
=`redmine_json ""users/current.json""`
user_id
=`echo $user | get_json ""['user']['id']""`
assigner_id
=`echo $issue | get_json ""['issue']['assigned_to']['id']""`

if [[ $user_id == $assigner_id ]]
then
debug
""Assigner: OK""
else
info
""You are working as user $user_id but issue is not assigned to you""
exit 3;
fi

redmine_host
=$(git config redmine.host)

echo
""""
echo
""Issue ===========================""
echo
"" refs: $redmine_host/issues/$issue_id""
echo
"" number: #""`echo $issue | get_json ""['issue']['id']""`
echo
"" priority: ""`echo $issue | get_json ""['issue']['priority']['name']""`
echo
"" create from: ""`echo $issue | get_json ""['issue']['author']['name']""`
echo
"" assigned to: ""`echo $issue | get_json ""['issue']['assigned_to']['name']""`
echo
""""

Mais informações no script estão na seção de mais informações .

Configurar

Você também precisa configurar o git para encontrar a instância do redmine:

git config redmine.host https://redmine.yourcompany.com
git config redmine
.apikey 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef

agora