0

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

我已经在 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 show?)vc-git-commandvc-git--call调用vc-git--run-command-string它们中的每一个并解析结果。git log如果您设法使其包含所有相关数据,也许只需一次调用所有这些数据。

于 2012-11-30T20:19:41.673 回答