wonderful_pandaの日記スマートフォン用の表示で見るwonderful_pandaの日記この広告は、90日以上更新していないブログに表示しています。2011-12-10TortoiseBazaarのステータスキャッシュについてBazaar何だかんだで10日目です。ネタ切れぎみですが、行けるところまで行きましょう。TortoiseBazaarでは、tbzrcache.exeという常駐プロセスが作業ツリー内の各ファイルの状態をキャッシュしていて、Explorerなどからの問い合わせに対して応答しています。このステータスキャッシュの今の仕組みとその問題点、次のバージョンでどのように変わる(予定)かを、簡単に説明します。別に技術的に高度なことをしてるわけではないので、そっち方面での期待はナシの方向で。今の仕組み最初に作業ツリー内のファイルに対してステータスの問い合わせがあった時に、作業ツリー全体のステータスのチェックを(非同期で)実行します。ステータスのチェックが完了するまでは、"PROGRESS"(?アイコンに対応)というステータスを返します。ステータスのチェックと一緒に、作業コピー内のファイルの更新監視も開始します。ファイルの更新を検出したら、そのファイルのステータスを再チェックします。変更されたファイルの数がある閾値を超えたら、個々のファイルのステータスをチェックするのはやめてツリー全体を再チェックします。HEADのリビジョンが変わったことを検出したら、ツリー全体を再チェックします。コンテキストメニューからBazaarの更新系コマンドが呼び出された場合は、コマンド終了後にツリー全体を再チェックします。以下のような問題点があります。Explorerからコマンドが実行された時に、変更が検出されない場合がある。更新系のコマンドは、ファイルの更新かHEADの移動かのどちらかを伴うので検出できるのですが、そのどちらも伴わないコマンドについては、検出できません。以下のようなものです。(作業ツリーを元に戻す。変更内容が「追加」とかだったらファイルの更新は発生しない)これが、「TortoiseBazaarのアイコンが嘘をつく」原因になります。コンテキストメニューから更新系のコマンドを起動した場合、なにもせずにキャンセルしても作業ツリー全体の再チェックが実行されてしまう。ステータスが更新されたかどうかをコマンドの戻り値などで確認できない(例えば、コミットダイアログの場合、同じ画面でadd、revert、moveなどの操作もできるため、コミット自体がキャンセルされたとしてもステータスが更新されていないとは限りません。)そこで、次のバージョンでは、以下のような仕組みに変える予定です。新しい仕組み最初に作業ツリー内のファイルに対してステータスの問い合わせがあった時に、作業ツリー全体のステータスのチェックを(非同期で)実行します。ステータスのチェックが完了するまでは、"PROGRESS"(?アイコンに対応)というステータスを返します。ステータスのチェックと一緒に、作業コピー内のファイルの更新監視も開始します。いうファイルの更新も監視します。ファイルの更新を検出したら、そのファイルのステータスを再チェックします。変更されたファイルの数がある閾値を超えたら、個々のファイルのステータスをチェックするのはやめてツリー全体を再チェックします。変更されたことを検出したら、ツリー全体を再チェックします。コンテキストメニューからBazaarの更新系コマンドが呼び出された場合は、コマンド終了後にツリー全体を再チェックします。コマンド終了時のステータスチェックは廃止します。いうのは作業ツリーの状態を記録しているファイルで、このファイルの更新を監視すればBazaar側の状態変化はキャッチできるはずで、今までよりも高い精度でステータスの取得ができるようになります。Bazaar本体の内部実装に依存した処理にはしたくなかったので、今までは避けてたんですが、今回思い立って実装してみました。次のバージョンでは、アイコンのオーバーレイが今よりも快適になるはずです。WinMergeのインスタンスマネジメント月別アーカイブはてなブログをはじめよう!wonderful_pandaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。