1

我正在尝试创建一个自动完成文本字段来选择 Mercurial 修订版(完整节点 ID)。我可以hg log --template '{node}\n'用来获取所有修订版,但该命令需要 1 秒才能完成。

当用户开始1d34在文本字段中输入(例如)时,我想做类似hg log --rev 1d34 --template '{node}\n'的事情,以便结果列表是所有以 1d34 开头的修订。ambiguous identifier!不幸的是,如果多个版本与标识符匹配,Mercurial 会给出错误 ( )。

过滤列表需要很长时间,因为hg log命令必须先完成,所以我正在寻找一个更快的解决方案。我可以缓存列表,但是存储库经常更改,所以我一直回到慢hg log命令。

4

1 回答 1

0

在@shambulator 之后,您可以只更新您的缓存,而不是每次都从头开始重新生成它。Mercurial 的 revlog 格式非常适合这种顺序操作,尤其是那些从提示或初始提交索引的操作。

如果你不重写历史,你可以这样做

hg log --template '{node}\n' --rev lastcached:tip

(您可能会使用书签或标签来跟踪上次缓存的修订,但这将具有将数据添加到对 vanilla Mercurial 或其他 GUI 的用户可见的存储库的缺点。)

如果您正在重写历史记录,那么您可以在之后进行完全刷新,或者您可以跟踪最后未更改的修订。然后您删除缓存中该版本之后的所有修订并执行

hg log --template '{node}\n' --rev lastunchanged:tip

(当然还有更新lastcached以反映新的历史。)

于 2013-05-14T11:03:13.143 回答