*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