Как получить сообщение коммита в перехвате предварительного получения на стороне сервера gitlab - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь разработать ловушку предварительного приема на стороне сервера для gitlab. где я должен получить сообщение о коммите от новых коммитов, которые добавляются.

Я пытался использовать git log --pretty=%B -n 1. Это возвращает старое зафиксированное сообщение. Как я могу получить сообщение о подтверждении новых непринятых изменений?

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

#!/bin/bash
ref_name=$refname
echo $ref_name
ref_name=$1
echo $ref_name
echo "refname"
issue=`git log --pretty=%B -n 1`
echo $issue #this is printing old commit message

Результат:

Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 306 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote:
remote:
remote:
remote: refname

1 Ответ

1 голос
/ 27 апреля 2019

Хук предварительного получения получает список ссылок и их старые и новые версии на стандартный ввод.Таким образом, вы можете сделать что-то вроде этого:

#!/bin/sh

while read old new ref
do
    # ref deleted; skip
    echo "$new" | grep -qsE '^0+$' && continue

    issue=$(git log --pretty=%B -n 1 "$new")
    echo "issue is $issue"
done

Обратите внимание, что это предполагает, что вы заботитесь только о коммите с головой на последней ссылке и что вы можете делать это и с тегами.Если вам нужны только ветки и вы хотите пройти через все коммиты, то вы можете сделать что-то вроде этого:

#!/bin/sh

while read old new ref
do
    case $ref in
        refs/heads/*)
            if echo "$new" | grep -qsE '^0+$'
            then
                # ref deleted; skip
                :
            elif echo "$old" | grep -qsE '^0+$'
            then
                # new branch
                # do something with this output
                git log --pretty=%B "$new"
            else
                # update
                # do something with this output
                git log --pretty=%B "$old".."$new"
            fi;;
        *)
            continue;;
    esac
done
...