初めてのOSSへのプルリクとマージ

会社のまわりの人たちが普通にプルリクを送ってるのを見ていいなーと思いつつ、プルリク未体験で過ごしてきました。

そんな中、ようやく初めてのプルリクとマージを体験できたので、メモしておきます。

 
目次

 

作成したプルリク

mod_pythonをPython3で使うとSyntaxErrorが出るのを修正するプルリクです。

github.com

 

見つけた経緯

前回、Docker + Alpine3.5 + Apache2.4 + Python2.7で、mod_pythonソースコードからインストールしてみました。
Docker + Alpine3.5 + Apache2.4 + Python2.7で、mod_pythonをソースコードからインストールしてみた - メモ的な思考的な

 
では、次はPython3で動かしてみようと思い、色々やってソースコードからビルドしたところ、

byte-compiling /usr/lib/python3.5/site-packages/mod_python/psp.py to psp.cpython-35.pyc
  File "/usr/lib/python3.5/site-packages/mod_python/psp.py", line 274
    raise et, ev, etb
            ^
SyntaxError: invalid syntax

byte-compiling /usr/lib/python3.5/site-packages/mod_python/python22.py to python22.cpython-35.pyc
byte-compiling /usr/lib/python3.5/site-packages/mod_python/version.py to version.cpython-35.pyc
byte-compiling /usr/lib/python3.5/site-packages/mod_python/apache.py to apache.cpython-35.pyc
writing byte-compilation script '/tmp/tmpu5k2chgw.py'
/usr/bin/python3 -OO /tmp/tmpu5k2chgw.py
  File "/usr/lib/python3.5/site-packages/mod_python/psp.py", line 274
    raise et, ev, etb
            ^
SyntaxError: invalid syntax

removing /tmp/tmpu5k2chgw.py

と、ログにSyntaxErrorが表示されました。

エラーにならず最後までいったものの、気になったのでソースコードを見たところ、

# lib/python/mod_python/psp.pyの270行目くらい
if PY2:
    raise et, ev, etb
else:
    raise et(ev).with_traceback(etb)

と、Python2系でしか使えないシンタックス raise et, ev, etbがありました。
Cheat Sheet: Writing Python 2-3 compatible code — Python-Future documentation

これが原因のようです。

 

プルリクの作成

以下を参考にプルリクを作成してみました。

 
流れは以下の通りです。

  • mod_pythonリポジトリで、既存のIssueやpull requestを読んで雰囲気をつかむ & 良さそうな表現を収集
  • mod_pythonリポジトリで、Issueを作成
    • この時に採番されたIssue番号をメモっておく
  • Forkボタンで自分のリポジトリにfork
  • ローカルにgit clone
  • ローカルでブランチを作成してcommit
  • 自分のリポジトリにブランチをpush
  • 自分のリポジトリにpull requestボタンが出るので押す
  • 頑張って英語でプルリクを作成*1
  • お返事を待つ

 
マージ or リジェクトまでどれくらいの時間がかかるのだろうと思っていたところ、1時間くらいでお返事が来ました。早い。

しかし、追加の説明が必要そうなお返事でした。descriptionで手を抜きすぎました。

そのため、必死に他のプルリクを参考に良さそうな英語表現を集めて返信したところ、無事にマージされました。

とても嬉しかったです。

 
あとはIssueを閉じて完了でした。

 

GitHub上のforkしたリポジトリmod_python本家に追従

せっかくなので、mod_pythonリポジトリの内容を、自分のForkしたリポジトリへと反映します。

# 本家をupstreamとして登録
$ git remote add upstream https://github.com/grisha/mod_python.git

# 本家にfetdh
$ git fetch upstream
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 1 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), done.
From https://github.com/grisha/mod_python
...
 * [new branch]      3.5.x                               -> upstream/3.5.x
...
 * [new branch]      master                              -> upstream/master
...

# 本家がリポジトリにいることを確認
$ git branch -a
* master
  py3-syntax-error-in-psppy
...
  remotes/origin/3.5.x
  remotes/origin/HEAD -> origin/master
...
  remotes/origin/master
...
  remotes/upstream/3.5.x
...
  remotes/upstream/master
...

# マージ
$ git merge upstream/master
Updating 1edbde6..8acf1b7
Fast-forward
 lib/python/mod_python/psp.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

# その後自分のリポジトリへpush

参考:GitHubでFork/cloneしたリポジトリを本家リポジトリに追従する - Qiita

 
その結果、自分のForkしたリポジトリThis branch is even with grisha:master. と表示されていることを確認します。

 

その他

プルリクの中でコミッターのかたに教わったPython2とPython3で互換性のある書き方をする方法のWikiが良かったので、ここでもリンクをはっておきます。python.orgにあるのが安心感があっていいです。
PortingToPy3k/BilingualQuickRef - Python Wiki

*1:コードで分かり合える世界だと、複雑な英語を要求されなくて済むのがありがたいです