twitter/commons — pull request #64 by benjyw (2012-08-20 07:15:44+00:00)
Title: Build cache refactoring (clean version)

+ Separates out the different pieces of functionality:
1. cache key generation.
2. target invalidation.
3. artifact caching.

+ Fixes several invalidation bugs:
1. Java targets will invalidate their Scala dependents.
2. Invalidation in non-flat mode will work properly.

+ Adds a lot of comments to the tricky bits.

+ Standardizes on the terminology 'invalidated' instead of 'changed'.
This is more accurate, since in some cases we must rebuild targets
even if none of their sources have changed.

+ Introduces artifact cache usage for scala. Still experimental though.

+ Introduces the notion of a 'product type' (e.g., 'classes') for a
task. A task produces just one type of product.