[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
GNU diff
とpatch
を改良するための考えとして以下の
ものがあります.GNUプロジェクトには,ボランティアのプログラミングプ
ロジェクトへの潜在能力として,いくつかの改良点を認識しました.見つけたバ
グを報告することで,我々を助けることも可能です.
プロ グラマであって,GNUプロジェクトに何か貢献したい場合,これらの プロジェクトのボランティアになることを考えてみてください.真面目に作業を 考えている場合,他のボランティアと調整するためgnu@gnu.orgにメー ルを送ってください.
18.1 GNU diff とpatch を改良するためのプロジェクトへの提案 | Suggested projects for improvements. | |
18.2 バグの報告 | Reporting bugs. |
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
diff
とpatch
を改良するためのプロジェクトへの提案あらゆるのディレクトリの対からパッチを生成するため,GNU
diff
が使用できるようにし,与えられたパッチとそのようなツリーの
コピーからもう一方のコピーに忠実なものを生成するため,,patch
を使用できるようにすべきです.残念ながら,ディレクトリツリーの変更には,
現在のパッチ書式を使用して表現することが不可能なものもあります.また,既
存の書式にはpatch
で処理しないものもあります.これらの欠点は,
以下のプロジェクトに提案されている動機付けにもなります.
18.1.1 マルチバイトと可変幅文字の処理 | Handling multibyte and varying-width characters. | |
18.1.2 ディレクトリ構造の変更の処理 | Handling changes to the directory structure. | |
18.1.3 ディレクトリでも通常のファイルでもないファイル | Handling symbolic links, device special files, etc. | |
18.1.4 通常ではない文字を含むファイル名 | Handling file names that contain unusual characters. | |
18.1.5 タイムスタンプの順に差分を出力する | Outputting diffs in time stamp order. | |
18.1.6 特定の変更を無視する | Ignoring certain changes while showing others. | |
18.1.7 パフォーマンスの改善 | Improving performance. |
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
diff
,diff3
,そしてsdiff
は,入力のそれぞれ
の行を単一バイトの文字による文字列として扱います.これにより,状況によっ
てはマルチバイト文字を誤って処理するはずです.例えば,スペースを無視する
ように依頼されているとき,diff
はマルチバイトのスペース文字を適
切に無視してくれません.
また,diff
は現在,それぞれのバイトが一列の幅だと仮定していて,
例えば,UTF-8エンコーディングを使用しているロケールのように,この仮定が
正しくないロケールもあります.これは,diff
の‘-y’や
‘--side-by-side’オプションで問題が生じます.
これらの問題は,単一バイト環境でのユーティリティの性能にあまり影響しない ように修正する必要があります.
IBM GNU/Linux Technology Center Internationalization Teamは,
diff
の国際化をサポートするパッチ
http://oss.software.ibm.com/developer/opensource/linux/patches/i18n/diffutils-2.7.2-i18n-0.1.patch.gz
を提案しています.残念ながら,これらのパッチは不完全で,diff
の
古いバージョンへのものなので,この領域でより多くの作業が必要です.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
diff
とpatch
は,ディレクトリ構造に関する変更で処理し
ないものもあります.例えば,一つのディレクトリツリーには,補助的なファイ
ルがある‘D’という名前のディレクトリがあり,もう一方には同じ名前の
‘D’というファイルが含まれていると仮定します.‘diff -r’は,
patch
がディレクトリのサブツリーをファイルに変換するための十分
な情報を出力しません.
パッチファイルに完全な内容を含める必要がないように,削除されたファイルを
指定する方法があるべきです.diff
がそのような情報を生成する方法
がない場合でも,ファイル名が変更されたことをpatch
に伝える方法
もあるべきです.ファイルの内容が変更されていない場合でも,ファイルのタイ
ムスタンプを変更するようにpatch
に伝える方法があるべきです.
これらの問題は,ディレクトリ構造の変更を表現するdiff
の出力書式
を拡張し,これらの拡張を理解するようpatch
を拡張することで修正
可能です.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ファイルには,ディレクトリでも通常のファイルでもないものもあります.それ
らはシンボリックリンク,デバイスの特殊ファイル,名前付パイプ,そしてソケッ
トのような通常ではないファイルです.現在,diff
はシンボリック
リンクを通常のファイルのように扱います.それ以外のファイルは,トップレベ
ルで指定されている場合は通常のファイルのように扱いますが,ディレクトリを
比較しているときは存在していることを単純に報告するだけです.例えば,シン
ボリックリンクが示しているファイルを変更している場合,diff
はシ
ンボリックリンクの変更ではなく,二つのファイルの間の差異を出力します.
diff
は,オプションで特別に特殊ファイルの変更を報告するべきで,
patch
はこれらの拡張を理解するように拡張すべきです.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ファイル名に改行や空白のような通常ではない文字が含まれるとき,‘diff
-r’は,patch
が解析不可能なパッチを生成します.diff
の
出力書式でのその問題はpatch
だけではなく,それは奇妙な完全なファ
イル名で,diff
は構文的には正しいが間違ったファイルにパッチを当
てるパッチを生成します.diff
の出力の書式は,可能性のあるすべて
のファイル名を処理するよう拡張されるべきです.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
複数ファイルの差分をpatch
で適用する結果としてファイルのタイム
スタンプの順番が台無しになるはずです.GNU patch
には,更新
されたファイルのタイムスタンプを維持するオプションがありますが
(see section パッチファイルのタイムスタンプを更新),GNU patch
がなかったりこれ
らのオプションを使用しない局面でも動作するパッチを生成することが役に立つ
こともあります.こうするための一つの方法は,出力する差分をタイムスタンプ
の順番にするdiff
のオプションを実装することです.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
from-fileとto-fileでマッチしていると考えられる二つの文字列を 指定する機能があれば素晴らしいでしょう.例えば,二つの文字列が‘foo’ と‘bar’で,二つの行がファイル1では‘foo’でファイル2の対応する部 分が‘bar’の場合,その行が同じものとして処理されるということです.
この機能を一般化させる方法や,そこで使用するべき構文は明確ではありません.
部分的な置換は,比較する前に一つまたは両方のファイルでフィルタを通すこと です.例えば以下のようにします.
sed 's/foo/bar/g' file1 | diff - file2 |
しかし,この出力はフィルタを通したテキストでオリジナルのものではありませ ん.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
二つの大きなディレクトリ構造を比較しているとき,元々は一方がもう一方から
(例えば,‘cp -pR’を用いて) タイムスタンプを維持したままコピーされて
いれば,サイズが同じでタイムスタンプが同じ二つのファイルの内容は同じだと
いう仮定をdiff
に伝えるオプションがある場合,パフォーマンスが大
幅に改善されることでしょう.See section diff
の性能のトレードオフ.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
GNU cmp
,diff
,diff3
,または
sdiff
にバグを見つけたと思う場合,
GNU utilities bug report mailing list bug-gnu-utils@gnu.orgに電子メールで報
告してください.GNU patch
のバグの報告は
bug-patch@gnu.orgに送ってください.できるだけ問題を明確にし,
‘--version’オプションの出力と,できればバグを生成する入力ファイル
のサンプルを含めて送ってください.些細ではないバグを修正した場合,それも
送ってください.パッチがあればそれも送ってください.パッチがディレクトリ
ftp://alpha.gnu.org/gnu/diffutils/で見つけられる最新のテストリリー
スに関連する場合,管理者の作業が簡単になるかもしれません.
[ << ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この文書は新堂 安孝によって2009年9月22日にtexi2html 1.82を用いて生成されました。