大部分はフラット(キー/値のペア)ですが、XML、bashスクリプト、カスタムフォーマットのうちのいくつかは、構成ファイルのツリーを簡潔に比較したいと思います。設定情報はほとんどの場合、順序付けされておらず、空白とコメントを含むことができます。簡潔に構成ツリーを比較して部分的にマージする
フラットファイルの場合、空白なしのdiffや並べ替えられた出力のコメントは、私がしたいことに非常に近いものになります。 XMLの場合、sometoolsavailableがあります。しかし、いくつかのカスタムフォーマットは、例えば、ネストされた構成。キーの順序は重要ではなく、サブキーの順序は重要ではありませんが、ツリー構造は(XMLによく似ています)です。他は非常にオーダー依存です。
頻繁に行う必要がある場合は、これをどうやってやりますか?十分一般的なツールはありますか?自分のソリューションを展開するのはどうですか?フォーマットの数は莫大ではありません(確かに/ etcと同じくらい悪くはありません)。デフォルトはフラットです - おそらくlibmagicとファイル名の一致、カスタムパーサーとの組み合わせでしょうか?誰もそれを試したことがありますか?
ネストされているが順序付けられていない構造を持つファイルに対して、適切なジョブを実行し、既存のツールで他のいくつかの種類を特別に扱うことによって、95%の問題を解決する方法があります。シンプルなネストされたファイルに対するほとんどの作品のアプローチを提案できますか?
いくつかの例:
com.example.resource.port=8080
com.example.resource.host=bar
//com.example.network.timeout=600
com.example.network.timeout=300
VS
com.example.resource.host=foo
com.example.resource.port=8080
< com.example.resource.host=foo
---
> com.example.resource.host=bar
> //com.example.network.timeout=600
> com.example.network.timeout=300
又は随意を生成しなければならない:
< com.example.resource.host=foo
---
> com.example.resource.host=bar
> com.example.network.timeout=300
と思われます。しかし、のようなものは:
Conf com.example.resource =
Conf host = foo;
Conf port = 8080;
;
Conf com.example.resource =
Conf port = 8080;
Conf host = bar;
;
Conf com.example.network =
Conf timeout = 300;
;
対
でも動作するはずです:
< Conf host = foo
---
> Conf host = bar
> Conf com.example.network =
> Conf timeout = 300;
> ;