自动删除行尾空白的触发器?
有没有办法写一个Perforce的触发器,在提交代码的时候自动去掉空格?最好是用Python来实现。这个触发器应该是什么样子的呢?或者说,在提交的时候不能修改文件吗?
1 个回答
0
根据我的了解,这个事情是做不到的,因为你不能把修改过的文件内容再放回服务器。只有两种触发器类型可以让你用p4 print
看到文件内容,分别是change-content
和change-commit
。对于后者,文件已经在服务器上提交了;而对于前者,虽然你可以看到(未提交的)文件内容,但没有办法去修改它并再上传到服务器。
唯一可以做的触发器是拒绝那些带有行尾空格的文件提交,这样提交者就可以自己去修复这些文件。下面是一个类似的示例,它检查文件中的制表符,请查看触发器的文档,并在Perforce网站上找一些例子:
def fail(sComment):
print sComment
sys.exit(1)
return
sCmd = "p4 -G files //sw/...@=%s" % sChangeNr
stream = os.popen(sCmd, 'rb')
dictResult = []
try:
while 1:
dictResult.append(marshal.load(stream))
except EOFError:
pass
stream.close()
failures = []
# check all files for tabs
for element in dictResult:
depotFile = element['depotFile']
sCmd = "p4 print -q %s@=%s" % (depotFile,sChangeNr)
content = os.popen(sCmd, 'rb').read()
if content.find('\t') != -1:
failures.append(depotFile)
if len(failures) != 0:
error = "Files contain tabulators (instead of spaces):\n"
for i in failures:
error = error + str(i) + "\n"
fail(error)