*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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS