特定の保留中の変更リスト内のファイルの差分を取得したいと考えています。これができたらいいのに:
p4 diff -c 999
これを実現するために、誰かが csh マジックをつなぎ合わせるのを手伝ってくれませんか?
多分出力を取り、p4 opened -c 999
それをパイプしp4 diff
ますか?
保留中の変更リストの変更を棚上げしてから、実行します
p4 describe -S -du 999
最も簡単な方法は p4v または p4win ですが、それはあなたが求めていたものではありません。
これを試して:
p4 opened -c 999 | awk 'BEGIN { FS = "#" } // { print "p4 diff " $1 }' | csh
もちろん、サブシェルのパスに p4 が含まれていること、および $P4CLIENT などがすべて設定されていることを確認する必要があります。
p4 opened -c 999 | sed -e 's/#.*//' | p4 -x - diff
p4 -x
をxargs
使用しなくても、好きな能力が得られますxargs
。からp4 help utils
:
-x フラグは、指定されたファイルから引数を 1 行に 1 つずつ読み取るように p4 に指示します。「-」を指定すると、標準入力が読み込まれます。
したがって、質問で示唆されているように、ほとんど「p4 open -c 999の出力を取得してp4 diffにパイプする」ことができます。1 つのトリッキーな部分は、の出力にp4 opened
は、開いている各ファイルの名前の後にリビジョン番号と説明テキストが含まれていることです。
//depot/example#123 - edit change 999 (text) by day@office
//depot/new-example#1 - add change 999 (text) by day@office
しかし、これを簡単に実行してsed -e 's/#.*//'
、以降のすべてを取り除き#
、パスだけを残すことができます。
//depot/example
//depot/new-example
これは、標準入力から消費され、p4 diff
おかげで に供給されp4 -x -
ます。
#
ファイルの名前に含まれている場合は、コマンドをより賢くする必要がありますsed
。そして精神科を受診してください。
p4 999 について説明します。grep '#' | カット -d"#" -f1|カット -d"" -f2 | xargs p4 差分
次のようなシェルスクリプトを使用できます。
#!/bin/sh
list=`p4 opened -c $1 | cut -d# -f1`
for file in $list ;
do
p4 diff -dwbu $file
done
チェンジリスト番号で呼び出すと、stdout にパッチが表示されます。
Mark と同様のアプローチを使用しましたが、Awk の代わりに Perl とシェル関数 (zsh 内) を使用しました。
p4dc() { p4 opened -c $* | perl -ne 's/#.*//; system("p4", "diff", $_)' }
変更リストの名前/番号だけでなく、ファイル パスも指定できることに注意してください。
p4dc default | less
p4dc default ... | less
上記はあなたの質問に答えますが、タイルが変更リストのディレクトリの差分として読み取られる場合は、次のように答えることができます。
p4 filelog ... | awk '
BEGIN {FS="[ /]";tc=999}
/^\/\// {fn=$NF;o=1;if (system("test -w " fn)) h=0; else h=""}
/^\.\.\.\ \#/ {if (h==0) h=$2;
if ($4<=tc && o==1) {print "p4 diff -db -dw " fn h " " fn $2 " ;#" $4;o=0}}' \
| sh
これにより、ディレクトリ内のすべてのファイルがチェンジリスト999と比較されます。チェックアウトされている場合は「持っている」バージョンが使用され、チェックアウトされていない場合は最新バージョンが使用されます。
これは GNU Awk 3.1.3 でテストされました