0

Python で svn pre-commit フックを作成しようとしています。これには、差分ファイルをチェックして、実際のファイルの変更があるかどうかを確認することも含まれます (プロパティの変更だけではありません)。

シェルで正常に実行できる作業中のgrepコマンドがあります

grep "^\(Added: \|Modified: \|Deleted: \)" diff filename | grep -v 'svn:'

しかし、それを subprocess.POpen に通すと、すべてのバックスラッシュがエスケープされ、正規表現が壊れます。

Executing command: ['grep', '"^\\Added: \\|Modified: \\|Deleted: \\)", ...]

どうすればこれを回避できますか?

注意: サブプロセス間で結果をパイプすることができ、その方法で 2 つの grep を実行できることは承知しています。ただし、最初のものを最初に機能させるには助けが必要です:/

NB2:代わりに filterdiff --clean を使用してみましたが、機能しませんでした。追加、変更、または削除された行を検索し、「svn:」を含む行を削除して、いくつかの結果が得られたかどうかを確認しましたが、うまくいったようです。

Python コード:

command = ['grep', '"^\(Added: \|Modified: \|Deleted: \)"', filename]
sys.stdout.write('Executing command: %s\n' % (command))

p = subprocess.Popen(command,
stdin = subprocess.PIPE
stdout = subprocess.PIPE
stderr = subprocess.STDOUT
shell = True)
data = p.stdout.read()

if len(data) == 0:
    sys.stdout.write("Diff does not contain any file modifications./n")
    exit(0)
4

1 に答える 1