我想簡要地比較一下配置文件的樹,其中大部分是扁平的(即鍵/值對),但其中一些是XML,bash腳本或自定義格式。配置信息幾乎總是沒有排序,並且可以包含空白和註釋。簡單地比較和部分合並配置樹
對於平面文件,在沒有空格的情況下執行差異操作或對已排序的輸出進行註釋非常接近我想要做的事情。對於XML,有sometoolsavailable。然而一些自定義格式例如嵌套配置。鍵的順序並不重要,子鍵的順序並不重要,但樹結構(很像XML)。其他則非常依賴訂單。
如果你經常這樣做,你會怎麼做呢?那裏有足夠一般的工具嗎?怎麼樣滾動我自己的解決方案?格式的數量也不是很大(當然不會像/ etc一樣糟糕),並且默認是平坦的 - 可能是一些libmagic和文件名匹配,並結合自定義分析器?有沒有人試過類似的東西?
一種方法是嘗試通過對嵌套但無序結構的文件進行體面的工作來解決95%的問題,並使用現有工具特殊套用一些其他類型的文件。你能建議一個主要的工作方法來簡單的嵌套文件?
一些例子:
com.example.resource.host=foo
com.example.resource.port=8080
VS
com.example.resource.port=8080
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=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;
;
VS
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;
> ;