2

Perforceコマンドラインには特別なスイッチ-Gがあり、Pythonの「pickle」シリアル化形式を使用して出力を機械可読にすることができます。一般的に、これは実際にそうですか?

たとえば、の出力について考えてみますp4 -G diff -duw3 <file1> <file2> <file3>。私が知る限り、出力は次のシーケンスです:pickle、raw diff、pickle、raw diff、pickle、rawdiff。ピクルス/差分の境界を確実に特定できるようにする区切り文字は含まれていないようです。

私は何かが足りないのですか、それともこの「機械可読」フォーマットは実際には機械可読ではありませんか?出力でピクルスと生の差分の境界を見つけるにはどうすればよいですか?

4

1 に答える 1

5

p4 -Gmarshal漬け物ではなく、ed形式でデータを出力します。

しかし、あなたは正しいです-p4 -G diff -duw3また、元marshalに戻らないので、そこに問題があると思います。

p4 -G openedただし、元に戻すことはできません。しかし、どんな種類でもdiff失敗します。

関連するナレッジベースの記事は次のとおりです。http://kb.perforce.com/ToolsScripts/PerforceUtilities/UsingP4G

#!/usr/bin/env python
import marshal
import subprocess

# proc = subprocess.Popen(["p4","-G","diff","-duw3","configure.ac","Makefile.am"],stdout=subprocess.PIPE)
proc = subprocess.Popen(["p4","-G","diff"],stdout=subprocess.PIPE)
# proc = subprocess.Popen(["p4","-G","opened"],stdout=subprocess.PIPE)
pipe = proc.stdout
output = []
try:
    while 1:
        record = marshal.load(pipe)
        output.append(record)
except EOFError:
    pass
pipe.close()
proc.wait()

# print list of dictionary records
c = 0
for dict in output:
    c = c + 1
    print "\n--%d--" % c
    for key in dict.keys():
        print "%s: %s" % ( key, dict[key] )
于 2009-11-11T09:14:54.343 に答える