在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可以帮助我的话,这似乎是我想避免的大量工作。
答案 0 :(得分:1)
vc-git
和其他后端并不能将整个元数据保存在任何地方。对于大多数操作,后端调用相应的命令来获取所需的数据。
例如,Git-Log-View
是git log [-- filename]
的美化输出。扩展提交时看到的摘要已经存在于命令输出中,只是隐藏,因此用户可以更轻松地进行扫描。要显示某个区域的变更集,log-view-diff-changeset
会查看哪些提交对应于区域边界,并委托给vc-diff-internal
,最终会调用git diff FROM TO
。
因此,您将获得该区域中每个提交的哈希值,然后使用git show
,vc-git-command
或vc-git--call
调用一些git命令(vc-git--run-command-string
?) }为每个人并解析结果。如果您设法将其包括所有相关数据,也许只需立即致电git log
。