List all CVS tags
最近在折腾一个CVS的库,需要把它里面所有的tags给列出来,在网上找了一个Perl脚本,以前一直是直接用的,那天看了看发现原来不是很难,于是写了一个Python的,为的是可以当成函数嵌到我的脚本中。
脚本的原理就是检查一个working directory中所有文件的status,然后把输出的内容去重。脚本运行需要设置好CVSROOT环境变量,而且需要提供一个CVS的工作目录作为参数。
#!/usr/bin/python
import re
import os
import sys
import subprocess as sp
def get_all_tags(cvs_wdir):
is_tag_line = False
cvs_cmd = 'cvs -Q status -R -v'
cvs_tag_pattern = re.compile(r'(\w+)\s+')
tmp_tags = []
os.chdir(cvs_wdir)
cmd_pipe = sp.Popen(cvs_cmd, shell=True, stdout=sp.PIPE)
for line in cmd_pipe.stdout.readlines():
if 'Existing Tags' in line:
is_tag_line = True
continue
if not is_tag_line:
continue
if '============' in line and is_tag_line == True:
is_tag_line = 0
continue
line = line.strip()
if line != '':
try:
tag = cvs_tag_pattern.findall(line.strip())[0]
except IndexError:
print line
raise
tmp_tags.append(tag)
return set(tmp_tags)
if __name__ == '__main__':
print '\n'.join(sorted(get_all_tags(sys.argv[1])))
话说,有人能提供更好的办法吗?然后,有人可以告诉我,这个东西取出来的东西是全部的tag吗?没用过CVS……