[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

18. 将来のプロジェクト

GNU diffpatchを改良するための考えとして以下の ものがあります.GNUプロジェクトには,ボランティアのプログラミングプ ロジェクトへの潜在能力として,いくつかの改良点を認識しました.見つけたバ グを報告することで,我々を助けることも可能です.

プロ グラマであって,GNUプロジェクトに何か貢献したい場合,これらの プロジェクトのボランティアになることを考えてみてください.真面目に作業を 考えている場合,他のボランティアと調整するためgnu@gnu.orgにメー ルを送ってください.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

18.1 GNU diffpatchを改良するためのプロジェクトへの提案

あらゆるのディレクトリの対からパッチを生成するため,GNU diffが使用できるようにし,与えられたパッチとそのようなツリーの コピーからもう一方のコピーに忠実なものを生成するため,,patch を使用できるようにすべきです.残念ながら,ディレクトリツリーの変更には, 現在のパッチ書式を使用して表現することが不可能なものもあります.また,既 存の書式にはpatchで処理しないものもあります.これらの欠点は, 以下のプロジェクトに提案されている動機付けにもなります.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

18.1.1 マルチバイトと可変幅文字の処理

diffdiff3,そして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の 古いバージョンへのものなので,この領域でより多くの作業が必要です.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

18.1.2 ディレクトリ構造の変更の処理

diffpatchは,ディレクトリ構造に関する変更で処理し ないものもあります.例えば,一つのディレクトリツリーには,補助的なファイ ルがある‘D’という名前のディレクトリがあり,もう一方には同じ名前の ‘D’というファイルが含まれていると仮定します.‘diff -r’は, patchがディレクトリのサブツリーをファイルに変換するための十分 な情報を出力しません.

パッチファイルに完全な内容を含める必要がないように,削除されたファイルを 指定する方法があるべきです.diffがそのような情報を生成する方法 がない場合でも,ファイル名が変更されたことをpatchに伝える方法 もあるべきです.ファイルの内容が変更されていない場合でも,ファイルのタイ ムスタンプを変更するようにpatchに伝える方法があるべきです.

これらの問題は,ディレクトリ構造の変更を表現するdiffの出力書式 を拡張し,これらの拡張を理解するようpatchを拡張することで修正 可能です.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

18.1.3 ディレクトリでも通常のファイルでもないファイル

ファイルには,ディレクトリでも通常のファイルでもないものもあります.それ らはシンボリックリンク,デバイスの特殊ファイル,名前付パイプ,そしてソケッ トのような通常ではないファイルです.現在,diff はシンボリック リンクを通常のファイルのように扱います.それ以外のファイルは,トップレベ ルで指定されている場合は通常のファイルのように扱いますが,ディレクトリを 比較しているときは存在していることを単純に報告するだけです.例えば,シン ボリックリンクが示しているファイルを変更している場合,diffはシ ンボリックリンクの変更ではなく,二つのファイルの間の差異を出力します.

diffは,オプションで特別に特殊ファイルの変更を報告するべきで, patchはこれらの拡張を理解するように拡張すべきです.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

18.1.4 通常ではない文字を含むファイル名

ファイル名に改行や空白のような通常ではない文字が含まれるとき,‘diff -r’は,patchが解析不可能なパッチを生成します.diffの 出力書式でのその問題はpatchだけではなく,それは奇妙な完全なファ イル名で,diffは構文的には正しいが間違ったファイルにパッチを当 てるパッチを生成します.diffの出力の書式は,可能性のあるすべて のファイル名を処理するよう拡張されるべきです.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

18.1.5 タイムスタンプの順に差分を出力する

複数ファイルの差分をpatchで適用する結果としてファイルのタイム スタンプの順番が台無しになるはずです.GNU patchには,更新 されたファイルのタイムスタンプを維持するオプションがありますが (see section パッチファイルのタイムスタンプを更新),GNU patchがなかったりこれ らのオプションを使用しない局面でも動作するパッチを生成することが役に立つ こともあります.こうするための一つの方法は,出力する差分をタイムスタンプ の順番にするdiffのオプションを実装することです.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

18.1.6 特定の変更を無視する

from-fileto-fileでマッチしていると考えられる二つの文字列を 指定する機能があれば素晴らしいでしょう.例えば,二つの文字列が‘foo’ と‘bar’で,二つの行がファイル1では‘foo’でファイル2の対応する部 分が‘bar’の場合,その行が同じものとして処理されるということです.

この機能を一般化させる方法や,そこで使用するべき構文は明確ではありません.

部分的な置換は,比較する前に一つまたは両方のファイルでフィルタを通すこと です.例えば以下のようにします.

 
sed 's/foo/bar/g' file1 | diff - file2

しかし,この出力はフィルタを通したテキストでオリジナルのものではありませ ん.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

18.1.7 パフォーマンスの改善

二つの大きなディレクトリ構造を比較しているとき,元々は一方がもう一方から (例えば,‘cp -pR’を用いて) タイムスタンプを維持したままコピーされて いれば,サイズが同じでタイムスタンプが同じ二つのファイルの内容は同じだと いう仮定をdiffに伝えるオプションがある場合,パフォーマンスが大 幅に改善されることでしょう.See section diffの性能のトレードオフ.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

18.2 バグの報告

GNU cmpdiffdiff3,または 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を用いて生成されました。