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