[[PageNavi(NavigationList)]]
= リポジトリ Web フック
== Web フックについて
コードリポジトリをローカルで使用する場合、各種アクションに対してスクリプトによるフックがかけられます。
これと同じように、OSDN では 「Webフック」を使用することができます。
具体的には push (svn の場合はコミット) が行われた際、その内容を JSON に変換して指定された URL に POST します。
POST 先では JSON を解釈して好きなアクションをすることができます。
== 設定方法
プロジェクトもしくは作業部屋の管理者でログインし、リポジトリブラウザのサブメニュー「フック」から設定してください。
== 送られるデータ
データ構造は[https://help.github.com/articles/post-receive-hooks github の物]に近付けてあります。
ただし、現在のところ push の中に存在する個々のコミット情報は含まれません。
データは通常の HTML フォームと同じく、Content-Disposition: form-data 形式で '''POST''' メソッドで送信され、
"payload" という単一キーを持ち、中身は JSON 形式です。
=== 送信されるデータの例
{{{ code javascript
{
"after": "6829ef8417b4d6c7cb20f4a34b6ccf4cb97dabe2",
"before": "6789be548cc0d16a94f6d128ff813b64184ba549",
"head_commit": {
"author": {
"email": "sugi@nemui.org",
"name": "Tatsuki Sugiura"
},
"id": "6829ef8417b4d6c7cb20f4a34b6ccf4cb97dabe2",
"message": "Test!\n",
"timestamp": "2013-06-07T17:34:49",
"url": "http://osdn.net/users/sugi/pf/sugitest/commits/6829ef8417b4d6c7cb20f4a34b6ccf4cb97dabe2"
},
"pusher": "sugi",
"ref": "refs/heads/master",
"repository": {
"created_at": 1291198691,
"description": "<i> test",
"id": "6",
"name": "sugitest",
"pushed_at": 1370594094,
"type": "git",
"url": "http://osdn.net/users/sugi/pf/sugitest/"
}
}
}}}
=== データフィールドと意味
{{{ html
<table class="wikitable">
<tr><th>フィールド </th><th>git</th><th>hg</th><th>svn</th></tr>
<tr><td> after </td><td> push後のコミットID </td><td> push後(最終)のコミットID </td><td> コミットしたリビジョン </td></tr>
<tr><td> before </td><td> push前のコミットID </td><td> そのpushに含まれる最初のコミットID </td><td> null </td></tr>
<tr><td> head_commit </td><td> after のIDのコミット情報 </td><td>after のIDのコミット情報 </td><td> コミット情報 </td></tr>
<tr><td> pusher </td><td colspan="3"> OSDNのユーザID </td></tr>
<tr><td> ref </td><td> push 先の ref </td><td> push 先のブランチ名 </td><td> 変更されたディレクトリパス </td></tr>
<tr><td> repository </td><td colspan="3"> リポジトリ情報 </td></tr>
</table>
}}}
== フックのテスト
「テスト」のボタンを押すと、最後に push された情報を使って、実際にフックリクエストを実行します。
[http://requestb.in/ requestbin] などを利用すると実際に送られるデータを確認できます。
== 注意・制限事項
* Webフックは'''リアルタイムには実行されません'''。
* 短い時間に連続してpushがあった場合、Webフックの'''実行順序は保証されません'''。
* システム的には、push (commit) の時点でキューに入れられ、数分以内に実行されます。push の時間が必要な場合は、データ内の repository.pushed_at を参照してください。
* フックそれぞれに関して、いつでも有効無効を切り替えることができます。無効化されたフックは単純にスキップされます。
* フックでエラーが発生した場合、再試行は行われず、単にエラーが起きたことが記録されます。
* 連続して10回以上エラーになった場合、そのフックは自動的に無効化されます。
[[PageNavi(NavigationList)]]