Compare an arbitrary number of .ini files based on logical sections and key/value pairs.
Switch branches/tags
Nothing to show
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
test Updated test files to be a little clearer Aug 10, 2018
.gitignore First checkin Sep 16, 2016
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md Jun 7, 2018
CONTRIBUTING First checkin Sep 16, 2016
Dockerfile Added Dockerfile Aug 10, 2018
LICENSE Initial commit Sep 16, 2016
NOTICE First checkin Sep 16, 2016
README.md Added docs for developing in Docker. Aug 13, 2018
compare-ini-files Formatting Aug 10, 2018

README.md

Compare Ini Files

The problem: You have multiple copies of an "ini" file (https://en.wikipedia.org/wiki/INI_file) in use by an app (possibly an app deployed in multiple datacenters...), and you want to compare them/diff them. Or worse yet: the stanzas and key-value pairs are in different orders in each file, and sorting through them would be a manual process that takes hours and is prone to error.

Solution: This script. The syntax is simple:

compare-ini-files filename1 filename2 [filename3 [filename4 [... ] ] ]

After loading the contents of the specified files into memory, this script then checks to make sure all stanzas exist in each file, then does a key-by-key comparison on each stanza, and reports any differences between the files.

Installation

brew tap comcast/opensource https://github.com/Comcast/homebrew-opensource.git
brew install compare-ini-files

Testing out the script

Clone this repo, and run ./compare-ini-files test/* on the command line. The output should resemble this:

#
# Starting config file audit of the following files:
#
#	test/file1.conf
#	test/file2.conf
#	test/file3.conf
#
#
# Loading files...
#
#
# Comparing contents...
#
File: 'test/file3.conf' is missing the following stanzas:
	[this stanza is found in file 1 and 2]

Stanza: [common in all files]

	Key: 'specific to file3' found with multiple values:

		Value 'somevalue' found in files:

			test/file3.conf

		These files did NOT contain the key:

			test/file1.conf
			test/file2.conf


Requirements

  • A relatively recent version of PHP should be installed.
  • Read access to the files in question

Development

Development can be done in Docker:

docker build -t compare-ini-files . && docker run -it -v $(pwd):/mnt compare-ini-files test/*

That command builds an image locally and runs the compare-ini-files script inside of a Docker container.

Author

Douglas Muth douglas_muth@cable.comcast.com

Bugs can be filed here or emailed directly to me.