NetHackのバグ修正内容を詳しく調べる方法このエントリーをはてなブックマークに追加

|

NetHackのバリアント的なものを扱っていると、本家で修正されたバグの内容を詳しく見たいことがあるのでその方法を記録しておく。

(これはRoguelike Advent Calendar 2017 7日目の記事です。)

探し方(1)

まず、どのバグを探すかを決める。今回はバグ一覧ページから、C360-170 Explosions and holding interact poorly.を選んでみた。

次にGitHubのfixes36.1のページを表示させて、右側の"Blame"を押すと、 blameページが表示される。これはfixes36.1ファイルのどの行がどのコミットで更新されたかを示す。

で、ここから対象のコミットを探すのだけど、残念ながらバグ一覧ページの表記とこのファイルの表記は一致しておらず、バグに振られたコードもバグ一覧ページと違う内部コードを使っているようなので、人力で探す必要がある。

ということでここではとりあえず"explosion"という単語でページ内を検索してみると、いくつかヒットするものの、476行-480行の:

monster holding hero takes double damage from an explosion for reaching into
    adjacent spot, but it was being inflicted even when hero was swallowed
    or beyond the explosion radius
poly'd hero holding monster now takes double damage (if monster is within
explosion radious) instead of inflicting that upon the monster

が該当のものっぽい。なお基本的にこのファイルは時系列順に追記されるので、それもヒントになる。

これでこの文章を更新したコミットが判明したので、左側にあるfix #H6489 - explosion double damage to ustuckをクリックすると、該当のコミットが表示され、詳細なコミットメッセージと共にどのようにソースが変更されたかが分かる。めでたしめでたし。

探し方(2)

…という具合に素直に行かない場合もある。次はC360-155 Carrots don't work for pets.を探してみる。

blameページから、今度は"carrot"で検索してみると、438行の:

blinded monster who eats a carrot will have blindness cured (hero already did)

がそれっぽい。ということで左側のadd missing fixes entries for curing blindness(既に文言が不穏だけど)をクリックする…と 該当のコミットはfixes36.1しか変更されていない。要するにソースのコミット時にfixes36.1の変更を忘れたので後からコミットされている状態。ということでこのコミットの前のコミットを探す必要がある。

このコミットは8/17にコミットされているので、コミット一覧ページからコミットを探す。ずっと過去に遡っていくと、8/13に fix #H5853 - carrots don't cure blind petsというコミットがあるのでどうやらこれらしいということが分かる。めでたしめでたし。

ちなみに逆の「ソースのコミットに抜けがあったので直後に追加でコミットする」というのもあった気がするので、(1)で該当ソースが見つかっても念のために同じ方法で前後のコミットを見ておいた方がいいかもしれない。

まとめ

3.4.3時代はひたすらバグリストが長くなってバグ修正は行われているっぽいのに具体的な内容が全然分からなくて苦労したので、3.6.0以降「なんとか探せば見つかる」になったのは大きな改善ではあるのだけど、もうちょっとバグリストと該当コミットとをちゃんと結びつけてくれればいいのになあ、とは思っている。

後、「前後のコミットを探す」方法がかなり力業なので、もうちょっとスマートな方法があるのかもしれない。一度チェックアウトすればCLIでなんとかなるのだろうけど。