下一个: , 上层: Trigger Scripts


C.3.1 通用语法

管理文件如 commitinfo, loginfo, rcsinfo, verifymsg 使用通用的格式。这些文件的用途在后面叙述,这里说明通用语法。

每行中包含:

空行被忽略。以 `#' 开始的行认为是注释。任何情况下都不能将过长的行分成 两个部分。

第一个正则表达式匹配仓库中的当前目录名,或者第一行由 `DEFAULT' 替代 正则表达式使用,所有的行包含 `ALL' 为支持 `ALL' 关键字的 hook 使用。 其余的行用作文件名或适当的命令行模板。脚本 hook 是否支持 `ALL' 关键字, 请查阅单独的说明(参阅 Trigger Scripts)。

注意: 下面有关格式化的字符串信息,效果与仓库中 参阅 config 文件中 出现的 UseNewInfoFmtStrings=yes 等同。另外,格式化字符串默认可以追加到 命令行,特殊的是,`loginfo' 文件会表现轻微的不同行为。 参阅 参阅 Updating Commit Files.

当第二段中匹配的行为命令行模板的情况下(如 commitinfo, loginfo, & verifymsg),命令行模板可包含脚本运行之前被替换成特殊值的格式化字符串。

格式化字符串可以代表一个单独的变量或者变量列表中的一个或多个属性。挂载到 loginfo hook 脚本中的变量列表可以作为一个变量列表的例子 - 刚刚提交的文件列表。 对于 loginfo,每个列表项中可有三个属性: 文件名,提交前的版本,提交后的版本。

格式化字符串的组成包括,一个 `%' 字符,一个可选的 `{' 字符(多列表属性 必需),一个代表变量或列表元素中的单独属性的格式化字符,或者是多个列表元素属性的 格式化字符,已经对应的 `}' 字符。

简单格式化字符串,或者被单一值代替的单独的格式化字符,不论所替换值中是否 包含空格或其他特殊字符,都将产生被调用脚本的参数。

列表属性会为每个列表项所需的每个属性产生参数。例如,loginfo 命令模板中的 `%{sVv}' 将为每个提交的文件产生三个参数(文件名,提交前版本, 提交后版本,...)。与简单格式化字符串一样,每个属性都将作为一个参数传递, 而不论所替换值中是否包含空格或其他特殊字符。

`%%' 将被替换为 `%'。

适用于所有脚本 hook 的格式化字符串有:

c
将要执行命令的正规名称。例如,从 cvs up 运行的 hook,cvs 会用 `update' 替换 `%c',再如,cvs cicvs 会使用字符串 `commit' 替换 `%c'。
n
null 或空字符串。
p
被操作目录在仓库中名称。
r
仓库的名称($CVSROOT中的路径部分)。
R
在服务器上,如果存在引用者,此为它的名字。引用者是客户端的 CVSROOT,用来连接 到服务器并指向该服务器。使用代理的通常要在主服务器上设定。

其他的格式化字符串是文件特性。参考各自脚本 hook 相关的文档了解详细信息 (参阅 Trigger Scripts)。

举例,下面 loginfo 文件中的一行仅匹配目录 modulemodule 的子目录:

     ^module\(/\|$\) (echo; echo %p; echo %{sVv}; cat) >>$CVSROOT/CVSROOT/commitlog

使用同样的这一行,假设提交了新版本 1.5.4.4 和 1.27.4.1,基于旧版本 1.5.4.3 和 1.27,分别是 module 里面的 file1 和 file2,在 commitlog 里面会有下面这样的 log 信息:

     
     module
     file1 1.5.4.3 1.5.4.4 file2 1.27 1.27.4.1
     Update of /cvsroot/module
     In directory localhost.localdomain:/home/jrandom/work/module
     
     Modified Files:
     	file1 file2
     Log Message:
     A log message.