2011-10-18 16 views
1

提出時に空白を自動的に削除するためにperforceトリガーを書くことができますか?好ましくはPythonで?どのように見えるだろうか?または、ファイルが送信されているときにファイルを変更できませんか?EOL空白を自動的に削除するためのトリガー?

+0

私はPERFORCEのについて多くを知らないが、[ドキュメント] (http://www.perforce.com/perforce/r10.2/manuals/cmdref/triggers.html)可能であることを示します。 Python関数 'rstrip()' [[docs](http://docs.python.org/library/stdtypes.html#str.rstrip)]を呼び出すスクリプトを記述してから、それを呼び出す必要があります'change-content'トリガータイプです。 – brc

+1

私はこのようなことを自動的に行うことに注意したいと思います。誰かが意図したところから空白を取り除きたくないでしょう。 (間違いなく、あなたが空白でプログラミングしている場合や、バイナリファイルを熱心に取り除いている場合を除き、奇妙なケースです)。このルートに行くと警告を表示し、変更の差分を表示するので、検証できますそれは良いです。 – Thanatos

答えて

0

変更されたファイルコンテンツをサーバーに戻すことができないため、これはできません。 p4 printでファイルコンテンツを表示できるのはtrigger typesの2つだけです。change-contentchange-commitです。後者の場合、ファイルはすでにサーバー上に提出されており、前者の場合は、(未送信の)ファイルコンテンツを見ることができますが、変更してサーバーに戻す方法はありません。

可能なトリガーは、EOL空白を含むファイルを拒否して、送信者がファイルを自分で修正できるようにすることだけです。ここではファイルのタブをチェック同様のものの抜粋があり、トリガにドキュメンタリーを読んで、例のためのPERFORCEサイトをご覧ください:

def fail(sComment): 
    print sComment 
    sys.exit(1) 
    return 

sCmd = "p4 -G files //sw/[email protected]=%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 %[email protected]=%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) 
+0

これは私が疑っていたものです。その場合、私がやることは、クライアントにpre-presubmitテストをローカルで実行するp4ラッパーを作成することです。これは、その1つでもかまいません。 –

+0

@jhwistこれは古い質問ですが、私は上記のスクリプトで混乱しています。常に1を返さないので、常に送信に失敗します(つまり、p4サーバーにファイルを送信することは不可能です)。また、os、sysをインポートする必要はありませんか?また、sChangeNrはどこで定義されますか? – Lorenz03Tx

+0

@ Lorenz03Tx私は簡潔にするために定型文をたくさん残しました。 – jhwist

関連する問題