如何在hg annotate中使用模板?Mercurial 7.0.1模板配置问题
解决Mercurial annotate自定义模板输出问题
针对Hg 7.0.1版本中annotate命令自定义模板的需求,以下是可行的解决方案及问题原因分析:
正确的自定义模板写法
要实现自定义分隔符并输出每行对应的版本信息,需要使用foreach遍历lines列表(列表中每个元素是包含行元数据的对象),示例命令如下:
hg annotate --template "{foreach lines as l}{l.rev}\t{l.node|short}:{l.text}\n" foo.txt
如果需要替换分隔符(比如把制表符换成|),直接修改模板中的分隔符即可:
hg annotate --template "{foreach lines as l}{l.rev}|{l.node|short}:{l.text}\n" foo.txt
问题原因解析
- 直接使用
{rev}等变量输出为空:annotate命令的顶层模板上下文不存在rev、node这类变量,这些信息只存在于lines列表的每个行对象中,必须遍历列表才能获取。 splitlines(lines)无法访问行元数据:splitlines(lines)会将行对象列表转换为带版本前缀的字符串(例如1: foo),此时模板中的line是字符串类型,而非包含属性的对象,因此无法通过line.rev访问版本号,会触发解析错误。
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

