diffant uses the structure of configuration files to do a more helpful comparison than standard diff.
diffant allows you to compare:
- ini
- json
- yaml
- xml
For example, for the purpose of comparing configuration, these two files are the same. There should be no diff:
| file_01.ini | file_02.ini |
|---|---|
[info] |
[info] |
email=bob@example.com |
phone=212-555-1212 |
phone=212-555-1212 |
email = bob@example.com |
diffant can meaningfully compare a heavily commented original configuration file with many lines to a minimized comment-less configuration file and find how the defaults have changed.
You are not limited to comparing 2 files, diffant can compare many files.
fruit: apple
tests/sample_input.dirs/simple/file01.json
tests/sample_input.dirs/simple/file03.json
cherry
tests/sample_input.dirs/simple/file02.json
/*MISSING*/
tests/sample_input.dirs/simple/file04.json
grain: rice
tests/sample_input.dirs/simple/file01.json
/*MISSING*/
tests/sample_input.dirs/simple/file02.json
tests/sample_input.dirs/simple/file03.json
tests/sample_input.dirs/simple/file04.json
inspiration:art: Pablo Picasso
tests/sample_input.dirs/simple/file01.json
tests/sample_input.dirs/simple/file03.json
Frida Kahlo
tests/sample_input.dirs/simple/file02.json
/*MISSING*/
tests/sample_input.dirs/simple/file04.json
inspiration:music: Dead Kennedys
tests/sample_input.dirs/simple/file01.json
tests/sample_input.dirs/simple/file02.json
tests/sample_input.dirs/simple/file03.json
/*MISSING*/
tests/sample_input.dirs/simple/file04.json
inspiration:tools:0: hammer
tests/sample_input.dirs/simple/file02.json
/*MISSING*/
tests/sample_input.dirs/simple/file01.json
tests/sample_input.dirs/simple/file03.json
tests/sample_input.dirs/simple/file04.json
inspiration:tools:1: rack
tests/sample_input.dirs/simple/file02.json
/*MISSING*/
tests/sample_input.dirs/simple/file01.json
tests/sample_input.dirs/simple/file03.json
tests/sample_input.dirs/simple/file04.json
vegetable: spinach
tests/sample_input.dirs/simple/file03.json
/*MISSING*/
tests/sample_input.dirs/simple/file01.json
tests/sample_input.dirs/simple/file02.json
tests/sample_input.dirs/simple/file04.json
{
"grain": "rice",
"color": "red",
"fruit": "apple",
"inspiration": {"art":"Pablo Picasso","music":"Dead Kennedys"}
} {
"color": "red",
"fruit": "cherry",
"inspiration": {"art":"Frida Kahlo","music":"Dead Kennedys","tools":["hammer","rack"]}
} {
"vegetable": "spinach",
"color": "red",
"fruit": "apple",
"inspiration": {"art":"Pablo Picasso","music":"Dead Kennedys"}
}{
"color": "red"
}- pip
- python >= 3.8
GNU General Public License v3.0
pip3 install diffant
diffant <directory with files of same type>
- The files you are comparing need to be at the top level of a directory that you supply as a positional argument to
diffant - The files need to have an extension that reflects their contents (ini,json.yml)
- You can't compare files of different types or have files of different types in your input directory.
- @morgan: Helpful tweak to README.md
- cpat-gpt: about 50% of the code