本文欢迎任何非商业转载行为,要求:转载必须转载全文,并加明作者,出处,谢谢!
标准版本选择规则的格式如下:
scope pattern version-selector [ optional-clause ]
一行可以有多个标准规则,以分号间隔。
所有scope均为针对配置项,所以都以element开始,可以设置-file、-directory与-eltype参数。
如果element不包括任何参数,则之后的pattern verion-selector [ optional-clause ]对任何配置项都有效,-file、-directory分别只对文件配置项、目录配置项起作用;-eltype后与指定的配置项类型有一空格间隔,例如:–eltype text_file,表明之后的匹配规则只对text_file类型的配置项起作用;如果一个eltype包括一些一些子eltype,只对本eltype有效,例如:-eltype file不对text_file类型配置项有效。
pattern为配置项匹规则,可以以下使用通配符:
a) ? 匹配任何符合命名规则的单个字符,例如:a?c,则可以匹配a1c,aAc与a.c,等,但是不匹配ac、与a\c。
b) * 匹配0至符合命名规则最大长度的任何符合命名规则的字符,这些字符不必一致,与?不同的是,*可以匹配0个字符,例如:*src*,匹配TheSrc,src1,src。
c) ~ 对应根目录。
d) [abc] 对应[]内的任何一个字符,例如:C*[gs].java,匹配Config.java与Constants.java。
e) [a-z] 对应[]内ASCII编码位于-之前字符与-之后字符之间的一个字符,包括-之前与之后的各个字符,例如:t[a-e]st匹配tast、tbst、tcst、tdst与test。
f) … 匹配0至符合规则要求的任意多层目录,例如:src/…/Config.java,匹配以下配置项:
src/com/Config.java
src/com/test/Config.java
src/Config.java
如果匹配规则为src/…,则包括src目录及它所有的子目录。
以上通配符可以组合,例如:匹配符 src/…/C[a- z][A-Z].java匹配以下配置项:
src/com/CaA.java
src/com/test/CoT.java
Version-selector描述了针对配置项的版本选择规则,有以下三种版本选择规则:
a) 分支名称加版本号:如/main/0,就表示main分支上版本0,这是一个空的版本,而/main/test/1则表示了main分支下test分支下的第1个版本。
b) 分支名称加Label:如/main/test/MyLabel2,则寻找的是所有main/test分支下被打上MyLabel2的配置项的版本。也可以只有Label,则会寻找所有分支上被打上该Label的配置项的版本,如果在多个分支上同一个配置项有多个版本打上了该Label,则会出现错误。例如:有一个预定义的LABEL:LATEST,/main/LATEST是表明main分支上的最新的版本,但是LATEST并不是版本号,而是预定义的Label,每个分支的最新版本都具有这个 Label;这里就要注意,不能应用 …/LATEST,这表明选择所有分支上最后的版本,会发生冲突,如果在你的config_spec中出现以上版本选择规则,一般情况下会报出一个view server的致命错误。
c) 分支名称加上查询选项:如/main/test/{TESTED==yes},寻找的是在main/test分支下最后一个TESTED属性为yes的版本。与Label一样,也可以只有查询选项,但是也一样要求不能出现冲突。
在Version-selector中的几个特殊的规则:
a) CHECKEDOUT:匹配当前视图被Checkout的版本,如果是文件配置项,则是与配置项名称相同的视图私有文件。
b) –config:匹配由clearmake或omake生成的Derived Objects,可以指定不同版本的配置项所对应的不同的Derived Objects。
c) –none:这个匹配规则主要是针对Unix操作系统,在Windows下设置了,如果不应用cleartool ls,则不会发现配置项的存在,而在UNIX系统下,会产生一个ENOENT(没有这样的文件或目录)的错误。应用cleartool ls会提示:[no version selected]。
d) –error:这个匹配规则与上一个一样是针对Uni操作系统的;应用cleartool ls会提示:[error on reference]。
最后是可选项:optional-clause。包括以下可选项:
a) –time:这个可选项的应用一定要在Version-selector中有LATEST这个标签才有效,如果没有这个标签,则不会提示错误,但是也不会起作用。
-time后要加上日期与时间,表示从LATEST向上查找,找到一个最近一个从指定日期与时间之后创建的版本,如果在指定的日期和时间时配置项还不存在,则不会给出初始空版本,而是匹配LATEST版本。
日期与时间的格式如下:
date.time | date | time | now
以上因项是互斥的,可以在后面加上UTC,这样时间为格林威治标准时间,可以避免时区的影响。如果没有指定日期,则缺省设置为today;如果没有指定时间,则缺省设置为00:00:00。需要注意,日期在执行完setcs就自动转变为标准日期,如果设置为today,同一个视图没有执行endview操作,一周以后,匹配规则找的是前一周时间的版本,而不是最近的版本,所以如果设置了-time选项,且应用了today等方式设置日期,最好执行endview后再执行startview,这时会重新设置日期。
以下是日期与时间的规则。
date :=day-of-week | long-date
time :=h[h]:m[m][:s[s]] [UTC [ [ + | - ]h[h][:m[m] ] ] ]
day-of-week :=today |yesterday |Sunday | ... |Saturday |Sun | ... |Sat long-date :=d[d]–month[–[yy]yy]
month :=January |... |December |Jan |... |Dec
例如:...\Config.java /main/Only_Comp2_Int/LATEST -time 10:00,匹配的是最近一次设置Config_Spec或StartView当天10:00以后main主分支下Only_Comp2_Int分支下任何Config.java的第一个版本。
Time中now是一个特殊格式,指定的当前时间。
b) –nocheckout:所选择的配置项不显示Checkout版本,所对应的配置项的规则必须位于element * CHECKEDOUT的上面,如果第一行是element * CHECKEDOUT,则-nocheckout设置无效;可以删除lement * CHECKEDOUT,也可以修改element * CHECKEDOUT,不再匹配任何配置项。如果配置项确实有checkout的版本,则会在视图提示Eclipse,即有checkout状态的配置项,但是不能显示。
c) –mkbranch:如果一个匹配前面版本选择规则的配置项的版本被Checkout时,自动建立配置项的指定分支。格式如下:
-mkbranch
branch-type-name
需要注意,这里的
branch-type-name必须在VOB中已经定义,如果没有定义会出现错误,无法执行Checkout操作。同时对版本选择规则为-none或-error的不起作用。