自动删除行尾空白的触发器?

1 投票
1 回答
836 浏览
提问于 2025-04-17 04:35

有没有办法写一个Perforce的触发器,在提交代码的时候自动去掉空格?最好是用Python来实现。这个触发器应该是什么样子的呢?或者说,在提交的时候不能修改文件吗?

1 个回答

0

根据我的了解,这个事情是做不到的,因为你不能把修改过的文件内容再放回服务器。只有两种触发器类型可以让你用p4 print看到文件内容,分别是change-contentchange-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)

撰写回答