2012-11-30 68 views
0

我想编写一套elisp函数来处理vc.el的Git-Log-View模式下查看git日志时由当前选定区域标识的提交。这些函数的一个常见子组件需要是一个函数,它可以获取Git-Log-View缓冲区中该区域选择的提交列表的提交元数据,但我不知道如何编写这样的例程。我希望vc.el直接提供了这样一个机制,但是从我通过apropos可以看到的却没有。如何在Git-Log-View模式下获取缓冲区的提交元数据?

我在vc.el和vc-git.el中尝试了解vc.el是如何工作的,但它是一个相当复杂的elisp,我决不是一个elisp专家。尽管vc.el/vc-git.el在某些地方提供了提交元数据,但对我来说似乎很合理,因为在Git-Log-View模式下,您可以执行诸如选择区域和请求该区域的变更集差异展开给定的提交以查看详细的提交信息,我只是想构建一些类似的功能。

有关如何做到这一点的任何想法?我想我可以直接获取当前选中的文本,并自己解析缩写的日志格式,但这似乎是大量的工作,我想避免如果VC模式可以帮助我。

回答

1

vc-git和其他后端并不真正保持整个元数据的大部分。对于大多数操作,后端调用相应的命令来获取所需的数据。

例如,Git-Log-Viewgit log [-- filename]的美化输出。展开提交时看到的摘要已经存在于命令输出中,只是隐藏起来,因此用户更容易扫描。要显示区域的变更集,log-view-diff-changeset会查看哪些提交对应于区域边界,并委托vc-diff-internal,最终会调用git diff FROM TO

所以你会得到每个哈希承诺在该区域,然后调用一些git的命令(git show?)与vc-git-commandvc-git--call也许vc-git--run-command-string为他们每个人,并解析结果。如果您设法使其包含所有相关数据,可能只需立即致电git log即可。

+0

非常感谢。我想也许我至少可以通过重新使用log-view-current-tag来简化我需要做的事情,我想我可能在一段时间内没有找到相关函数。 – acm

相关问题