会社のまわりの人たちが普通にプルリクを送ってるのを見ていいなーと思いつつ、プルリク未体験で過ごしてきました。
そんな中、ようやく初めてのプルリクとマージを体験できたので、メモしておきます。
目次
作成したプルリク
mod_python
をPython3で使うとSyntaxErrorが出るのを修正するプルリクです。
見つけた経緯
前回、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
これが原因のようです。
プルリクの作成
以下を参考にプルリクを作成してみました。
- GitHubへpull requestする際のベストプラクティス - hnwの日記
- Github で Fork してから Pull Request をするまでの流れ | けーこ in サンフランシスコ
流れは以下の通りです。
- mod_pythonのリポジトリで、既存のIssueやpull requestを読んで雰囲気をつかむ & 良さそうな表現を収集
- mod_pythonのリポジトリで、Issueを作成
- この時に採番されたIssue番号をメモっておく
- Forkボタンで自分のリポジトリにfork
- ローカルにgit clone
- ローカルでブランチを作成してcommit
- コミットメッセージにIssue番号を含める
- 以下のようにコミットメッセージに書いておけば、プルリクがマージされたらIssueが自動でcloseされるらしい
- 自分のリポジトリにブランチを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:コードで分かり合える世界だと、複雑な英語を要求されなくて済むのがありがたいです