不具合報告/4.7/19
の編集
http://plamo.linet.gr.jp/?%E4%B8%8D%E5%85%B7%E5%90%88%E5%A0%B1%E5%91%8A/4.7/19
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
-- 雛形とするページ --
diary/Template
*zdiffの動作が異常 [#i026bd16] -ページ: [[不具合報告/4.7]] -投稿者: [[azuki]] -優先順位: 重要 -状態: 提案 -カテゴリー: 不具合報告 -投稿日: 2009-09-27 (日) 11:19:20 -バージョン: 4.7b4 **メッセージ [#p20903b3] 違う内容のfile1とfile2をgzipしたfile1.gzとfile2.gzをzdiffで比較しても何も表示されません。 $ zdiff file1.gz file2.gz~ $ echo $?~ 2 (何らかのエラーが起こった) 他にも類似障害は無いでしょうか? ---- -/usr/bin/zdiff はシェルスクリプトだからざっと眺めてみたけど、バグではなくて仕様です、のレベルだなぁ(明らかにバグっぽい部分もあるが。。。)。古いバージョンとは異なり、一時ファイルを作らずにすませるために、出力先をあれこれ切り替えてやってるけど、策士、策に溺れる的なコードな印象 -- [[kojima]] &new{2009-09-27 (日) 23:37:59}; -個人的には、古いバージョンのコードの方が分かりやすいし、一時ファイルを作らないことのトレードオフにしては複雑さを増しすぎていると思うので、パッケージでは古いバージョンのに入れ替えておこうと思うけど、今のコードを生かすならこんな感じかな。 % diff -c /usr/bin/zdiff ./zdiff.new *** /usr/bin/zdiff 2009-08-17 09:00:00.000000000 +0900 --- ./zdiff.new 2009-09-27 23:58:00.000000000 +0900 *************** *** 22,29 **** case $1 in --__cmp) shift ! prog=cmp; cmp='${CMP-cmp}' ;; ! *) prog=diff; cmp='${DIFF-diff}';; esac version="z$prog (gzip) 1.3.12 --- 22,29 ---- case $1 in --__cmp) shift ! prog=cmp; cmp=${CMP-cmp} ;; ! *) prog=diff; cmp=${DIFF-diff};; esac version="z$prog (gzip) 1.3.12 *************** *** 106,115 **** ( (gzip -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- </dev/null | eval "$cmp" /dev/fd/5 -) 5<&0 ) ! case $gzip_status in ! *[1-9]*) gzip_status=1;; ! *) gzip_status=0;; ! esac else F=`expr "/$2" : '.*/\(.*\)[-.][zZtga]*$'` || F=$prog tmp= --- 106,112 ---- ( (gzip -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- </dev/null | eval "$cmp" /dev/fd/5 -) 5<&0 ) ! cmp_status=$? else F=`expr "/$2" : '.*/\(.*\)[-.][zZtga]*$'` || F=$prog tmp= *************** *** 156,161 **** exit 2 fi ! cmp_status=$? ! test "$gzip_status" -eq 0 || exit 2 exit $cmp_status --- 153,160 ---- exit 2 fi ! if [ "$cmp_status" = "1" ]; then ! echo "$gzip_status" | sed "1,2d" ! fi ! exit $cmp_status 22から29行めはコマンドをクォートしているのが間違いで、このままだと$cmp が ${CMP-diff} になって、 command not found で、エラー終了(return code 2)するみたい。 106-115行目はよく分からないけど、本来、diffの結果が入っているgzip_resultを終了コードが入ると思って、 整理しようとしているのかな? -- [[kojima]] &new{2009-09-28 (月) 00:01:34}; -ググってみたら、こんなの見つけました。https://bugzilla.redhat.com/show_bug.cgi?id=484213 -- [[azuki]] &new{2009-09-28 (月) 00:07:29}; -台所 PC からなのでテストできてませんが zcmp あたりはどうなんでしょう? -- [[M.Tomi]] &new{2009-09-28 (月) 00:14:42}; -あ、なるほどね。切り替えた diff の出力先をコンソールに出す部分を間違えてたのか。でも、それってやっぱり策士、策に溺れるだなぁ。"Keep It Simple, Stupid!" と言いたいところ(笑) -- [[kojima]] &new{2009-09-28 (月) 00:20:51}; - Plamo-4.73b2で正しく動作していないことに気がつきました。パッチの当て忘れでしょうか? -- [[azuki]] &new{2010-08-28 (土) 11:02:47}; - これって gzip-1.4 で解決した問題で、4.73では特にイジってないはずだけど? 一応手元では動作しているように見えますが。 -- [[kojima]] &new{2010-08-28 (土) 15:46:29}; - 説明不足ですみません。zdiff file1.gz file2.gzでは正常動作を確認しましたが、 ./dir1: file.gz ./dir2: file.gz のような配置でzdiff -r dir1 dir2を実行すると、「ファイルdir1/file.gzとdir2/file.gzは違います」となります。エラーコードは2(何らかのエラーが起こった)です。 -- [[azuki]] &new{2010-08-28 (土) 17:37:56}; - あまり詳しく見ていないけど、zdiff のコードは二つのファイルを比較するようになっている(2つのファイルをzcatした結果を比較するようになっている)ので、diff -r みたいなディレクトリ単位の比較はできないんじゃないかなぁ? -- [[kojima]] &new{2010-08-28 (土) 18:12:19}; - うーん、以前のバイナリのzdiffだとディレクトリ単位の比較が出来たような気がしますが、今のzdiffはシェルスクリプトになっているから、やはり無理なのかも知れないですね。 -- [[azuki]] &new{2010-08-28 (土) 19:23:35}; #comment
タイムスタンプを変更しない
*zdiffの動作が異常 [#i026bd16] -ページ: [[不具合報告/4.7]] -投稿者: [[azuki]] -優先順位: 重要 -状態: 提案 -カテゴリー: 不具合報告 -投稿日: 2009-09-27 (日) 11:19:20 -バージョン: 4.7b4 **メッセージ [#p20903b3] 違う内容のfile1とfile2をgzipしたfile1.gzとfile2.gzをzdiffで比較しても何も表示されません。 $ zdiff file1.gz file2.gz~ $ echo $?~ 2 (何らかのエラーが起こった) 他にも類似障害は無いでしょうか? ---- -/usr/bin/zdiff はシェルスクリプトだからざっと眺めてみたけど、バグではなくて仕様です、のレベルだなぁ(明らかにバグっぽい部分もあるが。。。)。古いバージョンとは異なり、一時ファイルを作らずにすませるために、出力先をあれこれ切り替えてやってるけど、策士、策に溺れる的なコードな印象 -- [[kojima]] &new{2009-09-27 (日) 23:37:59}; -個人的には、古いバージョンのコードの方が分かりやすいし、一時ファイルを作らないことのトレードオフにしては複雑さを増しすぎていると思うので、パッケージでは古いバージョンのに入れ替えておこうと思うけど、今のコードを生かすならこんな感じかな。 % diff -c /usr/bin/zdiff ./zdiff.new *** /usr/bin/zdiff 2009-08-17 09:00:00.000000000 +0900 --- ./zdiff.new 2009-09-27 23:58:00.000000000 +0900 *************** *** 22,29 **** case $1 in --__cmp) shift ! prog=cmp; cmp='${CMP-cmp}' ;; ! *) prog=diff; cmp='${DIFF-diff}';; esac version="z$prog (gzip) 1.3.12 --- 22,29 ---- case $1 in --__cmp) shift ! prog=cmp; cmp=${CMP-cmp} ;; ! *) prog=diff; cmp=${DIFF-diff};; esac version="z$prog (gzip) 1.3.12 *************** *** 106,115 **** ( (gzip -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- </dev/null | eval "$cmp" /dev/fd/5 -) 5<&0 ) ! case $gzip_status in ! *[1-9]*) gzip_status=1;; ! *) gzip_status=0;; ! esac else F=`expr "/$2" : '.*/\(.*\)[-.][zZtga]*$'` || F=$prog tmp= --- 106,112 ---- ( (gzip -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- </dev/null | eval "$cmp" /dev/fd/5 -) 5<&0 ) ! cmp_status=$? else F=`expr "/$2" : '.*/\(.*\)[-.][zZtga]*$'` || F=$prog tmp= *************** *** 156,161 **** exit 2 fi ! cmp_status=$? ! test "$gzip_status" -eq 0 || exit 2 exit $cmp_status --- 153,160 ---- exit 2 fi ! if [ "$cmp_status" = "1" ]; then ! echo "$gzip_status" | sed "1,2d" ! fi ! exit $cmp_status 22から29行めはコマンドをクォートしているのが間違いで、このままだと$cmp が ${CMP-diff} になって、 command not found で、エラー終了(return code 2)するみたい。 106-115行目はよく分からないけど、本来、diffの結果が入っているgzip_resultを終了コードが入ると思って、 整理しようとしているのかな? -- [[kojima]] &new{2009-09-28 (月) 00:01:34}; -ググってみたら、こんなの見つけました。https://bugzilla.redhat.com/show_bug.cgi?id=484213 -- [[azuki]] &new{2009-09-28 (月) 00:07:29}; -台所 PC からなのでテストできてませんが zcmp あたりはどうなんでしょう? -- [[M.Tomi]] &new{2009-09-28 (月) 00:14:42}; -あ、なるほどね。切り替えた diff の出力先をコンソールに出す部分を間違えてたのか。でも、それってやっぱり策士、策に溺れるだなぁ。"Keep It Simple, Stupid!" と言いたいところ(笑) -- [[kojima]] &new{2009-09-28 (月) 00:20:51}; - Plamo-4.73b2で正しく動作していないことに気がつきました。パッチの当て忘れでしょうか? -- [[azuki]] &new{2010-08-28 (土) 11:02:47}; - これって gzip-1.4 で解決した問題で、4.73では特にイジってないはずだけど? 一応手元では動作しているように見えますが。 -- [[kojima]] &new{2010-08-28 (土) 15:46:29}; - 説明不足ですみません。zdiff file1.gz file2.gzでは正常動作を確認しましたが、 ./dir1: file.gz ./dir2: file.gz のような配置でzdiff -r dir1 dir2を実行すると、「ファイルdir1/file.gzとdir2/file.gzは違います」となります。エラーコードは2(何らかのエラーが起こった)です。 -- [[azuki]] &new{2010-08-28 (土) 17:37:56}; - あまり詳しく見ていないけど、zdiff のコードは二つのファイルを比較するようになっている(2つのファイルをzcatした結果を比較するようになっている)ので、diff -r みたいなディレクトリ単位の比較はできないんじゃないかなぁ? -- [[kojima]] &new{2010-08-28 (土) 18:12:19}; - うーん、以前のバイナリのzdiffだとディレクトリ単位の比較が出来たような気がしますが、今のzdiffはシェルスクリプトになっているから、やはり無理なのかも知れないですね。 -- [[azuki]] &new{2010-08-28 (土) 19:23:35}; #comment
テキスト整形のルールを表示する