대다수는 플랫 (즉, 키/값 쌍)이지만 XML, bash 스크립트 또는 사용자 지정 형식 인 구성 파일 트리를 간결하게 비교하고 싶습니다. 구성 정보는 거의 항상 주문되지 않으며 공백과 주석을 포함 할 수 있습니다.간략하게 구성 트리를 비교하고 부분적으로 병합합니다.
플랫 파일의 경우 공백없이 diff를 수행하거나 정렬 된 출력에 대한 의견을 보내고 싶습니다. XML의 경우 sometoolsavailable이 있습니다. 그러나 일부 맞춤 형식은 예를 들어 중첩 된 구성 키의 순서는 중요하지 않지만 하위 키의 순서는 중요하지 않지만 트리 구조는 XML과 비슷합니다. 다른 것들은 매우 주문 의존적입니다.
자주해야한다면 어떻게해야할까요? 거기에 일반적인 도구가 있습니까? 내 솔루션을 선보이는 것은 어떨까요? 형식의 수는 엄청나지 않으며 (엄청나게/etc만큼 나쁘지는 않음), 기본값은 flat입니다. 아마도 libmagic과 파일 이름이 일치하고 사용자 정의 파서와 결합되었을 것입니다. 아무도 그렇게하려고하지 않았습니까?
하나의 접근법은 중첩되었지만 순서가 지정되지 않은 구조의 파일에 대해 적절한 작업을 수행하고 기존 도구로 몇 가지 다른 유형을 특수화하여 문제의 95 %를 해결하려고하는 것입니다. 간단한 중첩 된 파일에 대한 대부분 작품 방식을 제안 할 수 있습니까?
몇 가지 예 :
com.example.resource.host=foo
com.example.resource.port=8080
대
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;
;
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;
> ;