pivotal/LicenseFinder — pull request #126 by mainej (2014-12-17 02:06:05+00:00)
Title: Refactor License Finder to fuse licenses with decisions made about them

This is a major refactoring of License Finder. Instead of trying to store all the packages and every decision made about them in one database, it only stores decisions.

New approach:
* Store (in an append-only YAML file) every decision that has been made about a project's dependencies, even if a decision was later reverted.
* When needed, apply those decisions to the list of packages currently reported by the package managers.

Benefits:
* Simpler, smaller code.
* Stores timestamps and other metadata (who, why) about each decision.
* The CLI never writes reports to the file system, only to STDOUT. So, users has more choice over which reports to generate, when to generate them, and where to put them. See license_finder action_items and license_finder report.
* The CLI changes only the append-only YAML file. That means
* Most actions (the ones that don't need to scan for packages) are fast, and
* The timing of modifications is predictable (which fixes the problem where running `action_items` would unexpectedly modify the db or reports).
* Removed a lot of rspec stubbing, by introducing more DI, and pushing most I/O to the system boundaries.
* Removed dependencies on sqlite and sequel.
* Minimized the responsibilities of the configuration YAML file. The CLI never writes data back into the config file, which means less futzing with the file system. Makes room for replacing configuration with command line options.

TODOs:
- [ ] Bump version
- [ ] Give users a way to upgrade