A Way of Code

興味の赴くままに書き綴っていきます。

Pythonのバグサイト(bugs.python.org)にバグをレポートしてみる

Python 2.7.2のインストールでエラー(*)が出て、一部公式パッチが見当たらなかったので、PythonのIssue Trackerにバグを投稿してみました。
またお世話になりそうなので、メモしておきます。

(*)エラーの詳細→http://toggtc.hatenablog.com/entry/2012/01/29/014540

アカウントの作成

ここでアカウントを登録します。
http://bugs.python.org/

OpenIDを使ってログインするか、ページ左側の「Register」というリンクから辿ってアカウントの登録を行います。
アカウントの登録を行う場合、以下の項目を入力します。

項目 内容
Name 名前
Login Name* ログイン名(アカウントID)
Login Password* ログインパスワード
Confirm Password* パスワードの確認
Phone 電話番号
Organisation 所属組織
E-mail address* Eメールアドレス
Alternate E-mail address, One address per line その他のEメールアドレス

(*は必須)

投稿する、その前に

「Search」のリンクから、既に同じ内容のIssueが投稿されていないか検索しましょう。
Issueが重複すると、中の人にとっては負担になってしまいます。最新版リリース後にパッチが作られているかもしれないので、対象バージョンのリリースより前まで遡って調べたほうがいいでしょう。
またバグかどうかよく分からないものは、メーリングリストに投稿するという手もあります。
http://mail.python.org/mailman/listinfo

投稿する

ログインしたら、http://bugs.python.org/の左側に、「Create New」という項目が表示されます。
f:id:toggtc:20120203044703j:plain

「Create New」のリンク先を開くと、Issueの編集画面が表示されます。
f:id:toggtc:20120203044835j:plain

各入力項目をみていきます。

classification: 分類

設定した分類が間違っていたら、親切な中の人が修正してくれます。

  • Title:件名
  • Type:種別
    • no selection: 未選択
    • behavior: 挙動、調子
    • crash: クラッシュ
    • compile error: コンパイルエラー
    • resource usage: リソースの取り扱い =>リソース枯渇しやすいコードだとか、メモリ解放してないとか
    • security: セキュリティ
    • performance: パフォーマンス
    • enhancement: 強化 => 機能強化とか品質強化、ですかね
  • State:状態 =>初期は設定不可
  • Components:コンポーネント =>問題の対象となっているPythonコンポーネントを選択します(複数選択可)
  • Versions:バージョン =>なるべく、他のバージョンでも再現するかチェックしておくといいですね

process: 進行状態

processの欄には、主にバグ等Issueの内容を記入します。

  • Assinged To: Issueの割当先。権限のあるメンバでないと変更できない、っぽい
  • Nosy List: このIssueの更新が通知される人のリスト、のようです
  • Priority: 優先度。権限のあるメンバでないと変更できない、っぽい
  • keywords: キーワード。権限の(ry
  • Comment: コメント
    • バグ報告の場合、英語が苦手ならログを送るだけでいいと思いますが、前提となる環境や条件は明記しておきましょう
  • File: 添付ファイル
    • 添付ファイルは1つしか付けられないようです。なるべくpythonの外にあるサイトのURLは貼らないほうがよさそうです。リンク切れするといけないので。(私はついやってしまいましたが、、)
  • File Description: 添付したファイルの内容
  • Remote hg repo: Pythonリポジトリにあるパッチ等のパスを入れるみたいです

バグレポートを書くときの注意点

以下のページが参考になります。

ウノウラボ
良いバグレポートの書き方
http://labs.unoh.net/2006/05/post_13.html

MOZILLA DEVELOPER NETWORK
Bug writing guidelines
https://developer.mozilla.org/ja/Bug_writing_guidelines

特に障害解析をする側の立場から見ると、事象が発生する条件は大事ですよね。

投稿したもの

パッチが見当たらなかったのでドキドキしながら無邪気に投稿してみたもの。
http://bugs.python.org/issue13901

今回はパッチを自分なりに作って投稿してみました。
MacユーザUZEEEEってdisられるかな、と思ったのですが、ビルドエキスパートonMacなNed氏にさっそくパッチを修正していただきました。さらにMacでのバイナリ特性についても説明していただいて、感動でした。Thanks, Ned!
修正していただいた内容だとLinux環境でも同じ事象が起こるんじゃないかと思い、試してみたのですが、pure GCCは-L(空白)を許容してApple GCCは許容しませんでした。というわけで、Ned氏の修正の方が正しいですね。(ディスクの空きがなくて、Linux+GCC 4.2環境を作るのに手こずっちゃった。)
今回の修正は、Python 2.7.3, 3.2.3でリリースされるようです。楽しみですヽ(´ー`)ノ

コミュニティーに参加すると刺激があって良いですね。Pythonをいじっていたはずなのに、Macのバイナリにもっと詳しくなろうとか、英語を上達させようとか思えてきますから。

test_get_outputsで実行されるgccコマンドのGNU's GCCApple's GCCの違いをメモ:

#
# configure
#
# on Linux (GNU's GCC)
./configure CC=/usr/local/bin/gcc CXX=/usr/local/bin/g++ --enable-shared --enable-unicode=ucs4
# on Mac (Apple's GCC)
./configure CC=/usr/bin/gcc-4.2 CXX=/usr/bin/g++-4.2 LDFLAGS='-L/usr/local/lib -L/usr/X11R6/lib --enable-shared MACOSX_DEPLOYMENT_TARGET=10.7
#
# compile
#
# on Linux (GNU's GCC)
/usr/local/bin/gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/toggtc/.pythonbrew/pythons/Python-2.7.2/include/python2.7 -c /tmp/.../foo.c -o /tmp/.../foo.o
# on Mac (Apple's GCC)
/usr/bin/gcc-4.2 -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/toggtc/.pythonbrew/pythons/Python-2.7.2/include/python2.7 -c /var/folders/.../foo.c -o /var/folders/.../foo.o
#
# Link
#
# on Linux (GNU's GCC)
/usr/local/bin/gcc -pthread -shared /tmp/.…/foo.o  -L/home/toggtc/.pythonbrew/pythons/Python-2.7.2 -L -L/home/toggtc/.pythonbrew/pythons/Python-2.7.2/lib -lpython2.7 -o /tmp/.../foo.so
# => foo.so created
# on Mac (Apple's GCC)
/usr/bin/gcc-4.2 -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/X11R6/lib /var/folders/.…/foo.o -L`pwd` -L -o /var/folders/..../foo.so
# =>ld: warning: directory not found for option '-L-o'