40

特定の保留中の変更リスト内のファイルの差分を取得したいと考えています。これができたらいいのに:

p4 diff -c 999

これを実現するために、誰かが csh マジックをつなぎ合わせるのを手伝ってくれませんか?

多分出力を取り、p4 opened -c 999それをパイプしp4 diffますか?

4

9 に答える 9

26

保留中の変更リストの変更を棚上げしてから、実行します

p4 describe -S -du 999
于 2012-11-07T23:57:50.210 に答える
20

最も簡単な方法は p4v または p4win ですが、それはあなたが求めていたものではありません。

これを試して:

p4 opened -c 999 | awk 'BEGIN { FS = "#" } // { print "p4 diff " $1 }' | csh

もちろん、サブシェルのパスに p4 が含まれていること、および $P4CLIENT などがすべて設定されていることを確認する必要があります。

于 2009-07-13T19:56:02.247 に答える
16

解決

p4 opened -c 999 | sed -e 's/#.*//' | p4 -x - diff

説明

p4 -xxargs使用しなくても、好きな能力が得られます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。そして精神科を受診してください。

于 2012-09-07T16:36:04.540 に答える
8

p4 999 について説明します。grep '#' | カット -d"#" -f1|カット -d"" -f2 | xargs p4 差分

于 2011-10-13T13:31:58.943 に答える
6

次のようなシェルスクリプトを使用できます。

#!/bin/sh

list=`p4 opened -c $1 | cut -d# -f1`

for file in $list ;
do
  p4 diff -dwbu $file
done

チェンジリスト番号で呼び出すと、stdout にパッチが表示されます。

于 2010-11-04T22:43:41.057 に答える
1

Mark と同様のアプローチを使用しましたが、Awk の代わりに Perl とシェル関数 (zsh 内) を使用しました。

p4dc() { p4 opened -c $* | perl -ne 's/#.*//; system("p4", "diff", $_)' }

変更リストの名前/番号だけでなく、ファイル パスも指定できることに注意してください。

p4dc default | less
p4dc default ... | less
于 2011-05-20T21:24:04.630 に答える
0

上記はあなたの質問に答えますが、タイルが変更リストのディレクトリの差分として読み取られる場合は、次のように答えることができます。

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 でテストされました

于 2010-04-02T05:33:13.430 に答える