理系学生日記

おまえはいつまで学生気分なのか

Cricket のソースコードを読む際のポイント

Cricket では,各監視対象に関するデータをコンフィグファイルから一旦 config.db というファイル名の Berkeley DB に書き出すことになっています.そのため,この config.db をどう操作するのかさえ理解していれば,随分とソースコードは読みやすくなります.

config.db に書かれる内容については,ConfigTree::Node のソースに書いてあるコメントが一番参考になる.

    # Just to recap:
    #   d is for data
    #   t is for tags
    #   n is for names
    #   D is for dicts
    #   c if for a list of children
    #   p is for the name of the parent
    #   r:$name is 1 when this node is a directory (lets us ignore empty
    #       directories later)
    #   f:file => mtime
    #   F: => comma separated list of files

Berkeley DB では key => value でデータを記録していくわけですが,Cricket ではその key の部分をいくつかのパートに分けています.最初に value がどのようなデータなのかという種別を表す一文字の英字がでてきて,その後にファイル名だの,ノード名だのが出てくる.その最初の一文字の英字が上のコメントで説明されています.

config.db から値を読み込むときには,ConfigTree::Cache が使われます.
Perl の世界では,Berkeley DB とのインタフェースとして DB_File がよく使われており,Cricket も基本的には DB_File 経由で読み出しを行いますが,Cricket が扱うデータは多岐に渡るわ,上のようなヘンテコなデータの扱い方をしているため,DB_File のみを経由させて Berkeley DB からデータを読み出そうと思うと相当メンドいことになります.
それをハッシュとして簡単に扱える形にするのが ConfigTree::Cache::ConfigHash になっているので,ConfigTree::Cache::ConfigTree と上記コメント部,後は各データが何を表すのかのリファレンス(The Cricket Reference Guide) を知っておけば,ソースを読むのはかなり簡単になると思われます.