我正在尝试创建一个自动填充文本字段来选择Mercurial修订版(完整节点ID)。我可以使用hg log --template '{node}\n'
来获取所有修订版本,但完成该命令需要超过1秒。
当用户在文本字段中开始输入(例如说1d34
)时,我想做hg log --rev 1d34 --template '{node}\n'
之类的操作,以便生成的列表是从1d34开始的所有修订。不幸的是,如果多个修订版与标识符匹配,Mercurial会给出错误(ambiguous identifier!
)。
过滤列表需要太长时间,因为hg log
命令必须先完成,所以我正在寻找更快的解决方案。我可以缓存列表,但是存储库经常被更改,所以我不断回到慢速hg log
命令。
答案 0 :(得分:0)
关注@shambulator,您只需更新缓存,而不是每次都从头开始重新生成缓存。 Mercurial的revlog格式非常适合这种顺序操作,尤其是从提示或初始提交索引的操作。
如果你没有重写历史,你可以做到
hg log --template '{node}\n' --rev lastcached:tip
(您可能会使用书签或标签来跟踪上一个缓存的修订版本,但这样做的缺点是向vanilla Mercurial或其他GUI用户可见的repo添加数据。)
如果您正在重写历史记录,那么您可以在之后进行完全刷新,也可以跟踪上一个未更改的修订版本。然后删除缓存中的所有修订版本并执行
hg log --template '{node}\n' --rev lastunchanged:tip
(当然更新lastcached
以反映新的历史记录。)