0

vc.elのGit-Log-Viewモードでgitログを表示するときに、現在選択されているリージョンによって識別されるコミットを操作するための一連のelisp関数を記述したいと思います。これらの関数の一般的なサブコンポーネントは、Git-Log-Viewバッファー内のリージョンによって選択されたコミットのリストのコミットメタデータを取得する関数である必要がありますが、そのようなルーチンを作成する方法がわかりません。私はvc.elがそのようなメカニズムを直接提供することを望んでいましたが、私が適切に見ることができるものからはそうではありません。

私はvc.elとvc-git.elをざっと見て、vc.elがどのように機能するかを理解しようとしましたが、それはかなり複雑なelispであり、決してelispの専門家ではありません。vc.el/vc-git.elのコミットメタデータはどこかで利用できるので、私には理にかなっているようです。Git-Log-Viewモードでは、リージョンを選択してそのリージョンのチェンジセット差分を要求したり、特定のコミットを展開して詳細なコミット情報を表示します。同様の機能をいくつか構築したいと思います。

これを行う方法について何か考えはありますか?現在選択されているテキストを直接取得して、省略されたログ形式を自分で解析できると思いますが、vc-modeが役立つ場合は、それを避けたいと思う膨大な量の作業のようです。

4

1 に答える 1

1

vc-git他のバックエンドは、メタデータ全体をどこにも保持していません。ほとんどの操作では、バックエンドはそれぞれのコマンドを呼び出して必要なデータを取得します。

たとえば、Git-Log-Viewのきれいな出力ですgit log [-- filename]。コミットを展開するときに表示される概要は、コマンド出力に既に存在し、非表示になっているだけなので、ユーザーがスキャンしやすくなっています。リージョンの変更セットを表示するには、log-view-diff-changesetどのコミットがリージョンの境界に対応しているかを調べvc-diff-internal、最終的に を呼び出す にデリゲートしますgit diff FROM TO

したがって、リージョン内の各コミットのハッシュを取得し、git コマンド ( ?) を使用して、またはそれぞれに対して git コマンド ( git show?) を呼び出して、結果を解析します。すべての関連データを含めることができれば、それらすべてを一度に呼び出すことができます。vc-git-commandvc-git--callvc-git--run-command-stringgit log

于 2012-11-30T20:19:41.673 に答える