Python 是否触发自动删除下线空白?

Python 是否触发自动删除下线空白?,python,triggers,perforce,Python,Triggers,Perforce,可以编写一个perforce触发器在提交时自动删除空白吗?最好用python?那会是什么样子?或者,您不能在提交文件时修改它们吗?据我所知,这无法完成,因为您无法将修改后的文件内容放回服务器。使用p4 print查看文件内容的仅有两种方法是change content和change commit。对于后者,文件已在服务器上提交,而对于前者,虽然可以看到(未提交的)文件内容,但无法修改它并将其放回服务器 唯一可能的触发是拒绝提交带有EOL空白的文件,以便提交者可以自己修复这些文件。这里是一个类似的

可以编写一个perforce触发器在提交时自动删除空白吗?最好用python?那会是什么样子?或者,您不能在提交文件时修改它们吗?

据我所知,这无法完成,因为您无法将修改后的文件内容放回服务器。使用
p4 print
查看文件内容的仅有两种方法是
change content
change commit
。对于后者,文件已在服务器上提交,而对于前者,虽然可以看到(未提交的)文件内容,但无法修改它并将其放回服务器

唯一可能的触发是拒绝提交带有EOL空白的文件,以便提交者可以自己修复这些文件。这里是一个类似的例子的摘录,用于检查文件中的选项卡,请阅读触发器文档并查看Performce网站以获取示例:

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)

我对perforce了解不多,但这部剧是可能的。您需要编写一个脚本来调用python函数
rstrip()
],然后使用
change content
触发器类型来调用它。我会小心地自动执行类似操作。。。你不会想从别人想要的地方去掉空白。(不可否认,这是一个奇怪的情况,除非你是在用空格编程,或者过分热衷于剥离二进制文件。)如果你真的这样做了,警告他们,并向他们展示你所做更改的差异,这样他们就可以验证它是好的。这就是我所怀疑的。在这种情况下,我想我要做的是在客户端上编写一个p4包装器,在本地运行预提交测试,这可能是其中之一。@j我知道这是一个老问题,但我被上面的脚本弄糊涂了。它是否总是返回1,因此提交总是失败(这意味着不可能将文件提交到p4服务器)。另外,您是否不需要导入os、sys?还有,sChangeNr是从哪里定义的?@Lorenz03Tx出于简洁的原因,我省略了很多样板文件。很抱歉,我太迂腐了,但是脚本总是会失败,因此永远不允许签入Performance服务器。这不仅仅是伯里埃牌。for循环下面的所有内容的缩进都是错误的,正如您所知,空格在python中非常重要,因此应该加以修复。我建议对脚本进行的编辑被拒绝了(我猜是不熟悉python的评论员拒绝了),或者我只想修复它,而不是因为一个2年前的问题而打扰您。