Pull request経由でのmergeではGithub APIからのレスポンスにはcommitterの情報は無い

GithubAPIのドキュメントに書かれているはずの
レスポンスの内容が取れない状態があり、
何が悪いのか原因調査していたがわからないままだったので、家に帰って確認をしました。

Github API の ```/repos/:owner/:repo/commits``` のレスポンスについて確認を行います。
[http://developer.github.com/v3/repos/commits/](http://developer.github.com/v3/repos/commits/)

まず、OAuthを利用してトークンでももらってきましょう。

```
curl https://api.github.com/authorizations \
--user "futoase" \
--data '{"scopes": ["repo"], "note": "Test"}'
```

[参考](https://gist.github.com/2288960)

ライブラリを使うと何が悪いのかわからなくなるため、(ライブラリのレスポンス内容に対するパース方式やらシングルトンによる影響なのか)
curl経由でテキストデータを引っ張ってきて、それを
Pythonのjson パーサにかけて、中身を確認します。
(レスポンスについてはヘッダーの部分は削除してしまう)

...例としてisaacsさんのnpmリポジトリのcommitsを取得します。

```
curl -i "https://api.github.com/repos/isaacs/npm/commits?access_token={access_token}" > npm
```

レスポンスのbody部を切り出し、jsonをparseして内容を確認します。

```
cat npm | python -mjson.tool
```

パースがきちんとできました。
ということでcommitterキーがないか確認をします。

```python:verify.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import json
import sys


def parse(file_name):
    with open(file_name, 'r') as f:
        results = json.loads(f.read())

    for result in results:
        if result.get('committer') is None:
            print('\ncommitter is None: ' + result.get('sha'))
        else:
            print('.', end="")


if __name__ == '__main__':
    parse(sys.argv[1])
```

先ほどパースをするのに問題がなかったファイルを食わせてみます。

```
./verify.py npm
```

回してみると30件中3件、committerが無いという結果になりました。
([ページネーション](http://developer.github.com/v3/#pagination)などは無視します。)

```
............…..
commiter is None: 4638a792fda9a322c4084a46728ebcc9cdab0036
commiter is None: e9e1db1cafcc7e311ddbd8137ae3b74857768469
.
commiter is None: 94de57821d58f3e36a9747f0212f9d4545a896e7
```

試しに、```e9e1db1```について確認してみます。

[https://api.github.com/repos/isaacs/npm/commits/e9e1db1cafcc7e311ddbd8137ae3b74857768469](https://api.github.com/repos/isaacs/npm/commits/e9e1db1cafcc7e311ddbd8137ae3b74857768469)

committer: nullとなっています。

なぜだろうと思い、git logからコミットの内容を確認します。

```
git log -p e9e1db1cafcc7e311ddbd8137ae3b74857768469

commit e9e1db1cafcc7e311ddbd8137ae3b74857768469
Author: Domenic Denicola <domenic@domenicdenicola.com>
Date: Mon Jan 28 03:10:42 2013 -0500

    Fix bug in prettyWhere calculation
```

コミットログをもとに、Pull Requestを見てみます...

[https://github.com/isaacs/npm/pull/3100](https://github.com/isaacs/npm/pull/3100)

Pull Requestにありました。
他の```committer: null```になっているコミットログについて内容を確認します。

[https://api.github.com/repos/isaacs/npm/commits/4638a792fda9a322c4084a46728ebcc9cdab0036](https://api.github.com/repos/isaacs/npm/commits/4638a792fda9a322c4084a46728ebcc9cdab0036)

Pull Requestを探します。
[https://github.com/isaacs/npm/pull/3103](https://github.com/isaacs/npm/pull/3103)
ありました。

[https://api.github.com/repos/isaacs/npm/commits/94de57821d58f3e36a9747f0212f9d4545a896e7](https://api.github.com/repos/isaacs/npm/commits/94de57821d58f3e36a9747f0212f9d4545a896e7)

Pull Requestを探します。
[https://github.com/isaacs/npm/pull/3097](https://github.com/isaacs/npm/pull/3097)
ありました。

Pull Request経由のマージではない、普通のcommit処理をされたコミットの内容(書いていてよくわからなくなって...)についてAPIのレスポンス内容を確認します。

[https://api.github.com/repos/isaacs/npm/commits/4f511b99520b5fc76e6bf8e1c44bf71423fddda4](https://api.github.com/repos/isaacs/npm/commits/4f511b99520b5fc76e6bf8e1c44bf71423fddda4)

committerに情報が入っています。
考えてみれば当たり前、なのですが、APIのレスポンスとしては
committerがnullなのか、そうじゃないか以外の判別方法がないため、
reponse[:committer]が来ることは期待せず、response[:author]を利用するようにしましょう...