composer/satis — pull request #178 by Leftbrained (2014-10-12 23:51:23+00:00)
Title: Add limits to which dependencies get automatically pulled in.

Adds two new keys to the satis.json file format. Conflicts with #160. Seems to fix #158.

* **dependency-minimum-stability** Used to specifiy the minimum stability for dependencies included in the require-dependencies and require-dev-dependencies options independently of the dependencies in the satis.json file.

Dependencies must satisfy both minimum-stability and dependency-minimum-stability.

* **only-latest-dependencies** Used to choose only the latest dependency for each package.

It will only ever install _one_ package per name, unless that package is listed in the satis.json file.

The first commit is a mild code refactor to put the select package functionality into a portable closure, so we don't have to maintain that functionality in two places.

It adds a simple stability check for _dependency-minimum-stability_.

For _only-latest-dependencies_ Instead of one giant pass to pull in packages from links it does them in chunks. The first pass is the root links, the rest are dependencies. Each pass does the following:
1. Find all packages that match link and stability requirements. Root links get selected. Deps get stored in a buffer to determine the latest at the end of the pass.
2. Loop through each package name found in dependencies and select the latest package version for each.