メッセージをコミットしてURLにポストバックするgit post-receiveフック

開発者が変更をサーバーにプッシュする際に自動的に更新するチケットシステムを使用しています。これを更新するには、コミットメッセージにGET変数として特定のURLを指定する必要があります。呼び出し中のページはこの変更を記録します。 フッ​​クを使って行く方法が分かっていますが、私はBashもPerlもよく知らないとても挑戦的です。

私はこれを達成したい:

  • Developer PUSHes to the server
  • post-receive hook runs and checks which different commits are new (because there could be several in one push)
  • It loops through them, and for each commit, it will open a URL with the commit message (curl http://server.com/logthis.asp?msg=Here_goes_the_commit_message, something like that)

それでおしまい。 いくつかの サンプルはまったくこれを行いません。これはどうすればできますか?

7
なぜdownvote ??
追加された 著者 user943301,

1 答え

主なPITAは、私が/ usr/share/doc/git/contrib/hooks/post-receive-email(show_new_revisions)から借りた新しいリビジョンの正しいリストを分離することです。

while read oval nval ref ; do
    if expr "$ref" : "^refs/heads/"; then
        if expr "$oval" : '0*$' >/dev/null
        then
            revspec=$nval
        else
            revspec=$oval..$nval
        fi
        other_branches=$(git for-each-ref --format='%(refname)' refs/heads/ |
            grep -F -v $ref)

        # You may want to collect the revisions to sort out
        # duplicates before the transmission to the bugtracker,
        # but not sorting is easier ;-)
        for revision in `git rev-parse --not $other_branches | git rev-list --stdin $revspec`; do
                    # I don't know if you need to url-escape the content
                    # Also you may want to transmit the data in a POST request,
            wget "http://server.com/logthis.asp?msg=$(git log $revision~1..$revision)"
        done
    fi
done
9
追加された
慎重。同じリビジョンを作成して同じプッシュの別のブランチにマージすると、上記のコードでスキップされます。
追加された 著者 Matt White,