Add public mailing list info and slightly better requirements / testing info.
Artifact cache tweaks.
Have multiple ping attempts.

Parameterize the pinger.
Switch pants artifact cache to gzip.

It turns out to be much faster than bzip2, with only
a small size penalty.
Up the artifact cache timeout.

Also allow all 2XX responses.
Starting to add support for exclusive tags.

This is pushed as a sanity-check code-review. It's not complete
enough to really be useful, but the core functionality is together
enough to get someone else to take a look, and make sure it's
a good idea. I don't plan to merge this into master until it's
feature-complete.

This change adds a new attribute to build targets,
called "exclusives". The exclusives is a dictionary
mapping from exclusive keys to version specifier strings.

The idea is that if code depends on a specific version of
some component, then it can declare that by adding an exclusives
entry.

At build time, any target whose transitive dependency graph contains
more than one value for any exclusive tag will generate an error.

Exclusives will also be used for compilation partitioning: the
source files associated with two targets can only be part of the
same compilation partition if they contain no conflicting exclusives.

This change adds basic support for exclusives. Exclusives can be
declared for build targets, and the exclusives set for the
transitive dependency graph are computed for each target. For testing
purposes, scala_compile currently generates a warning message if it
detects any scala target with conflicting exclusives it its transitive
dependency graph.

A simple unit test is also provided for the transitive
exclusives propagation.

Auditors: benjy
Added a check_exclusives task.

- This change converts the exclusives propagation into a build phase.
- Conflicting exclusives are detected by the CheckExclusives task,
  and cause the build to fail.
- Scala compilation generates a warning if the scala targets to be compiled
  have incompatible exclusive tags.
- The propagation code has been modified to avoid recomputing things.
- Exclusives tags have been added to all of the target types.
- A test was added to verify that the CheckExclusives task correctly
  detects errors.
- Documentation was updated and extended.

Reviewers note: Adding the "exclusives" tag to all of the target types seems
very ugly, but I wasn't able to find any other way of making it an option
on all of the targets. Is there some python/pants idiom that would make that
cleaner?

Auditors: benjy
Addressing review comments

- changed to a python idiom for default exclusives arguments.
- pruned redundancy from documentation.
- renamed test file.
- changed parameter handling for creation of tasks from the
  TestCheckExclusives test.
- cleaned up exclusives propagation for InternalTarget.

Still todo before this can merge to master:
- Examine all of the target types, to identify the set which are proxies,
  and make sure that all proxy targets propagate the exclusives correctly.

Auditor: benjy
Extended exclusives propagation.

The first draft of "exclusives" tagging support didn't handle two
corner cases:

(1) Types that weren't subclasses of InternalTarget, but had overridden
    implementations of the _walk method for tracing through dependencies;
(2) JVM based target types that could be transformed into jar dependencies.

This change adds coverage for those cases.

Auditors: benjy
Starting to add support for exclusive tags.

This is pushed as a sanity-check code-review. It's not complete
enough to really be useful, but the core functionality is together
enough to get someone else to take a look, and make sure it's
a good idea. I don't plan to merge this into master until it's
feature-complete.

This change adds a new attribute to build targets,
called "exclusives". The exclusives is a dictionary
mapping from exclusive keys to version specifier strings.

The idea is that if code depends on a specific version of
some component, then it can declare that by adding an exclusives
entry.

At build time, any target whose transitive dependency graph contains
more than one value for any exclusive tag will generate an error.

Exclusives will also be used for compilation partitioning: the
source files associated with two targets can only be part of the
same compilation partition if they contain no conflicting exclusives.

This change adds basic support for exclusives. Exclusives can be
declared for build targets, and the exclusives set for the
transitive dependency graph are computed for each target. For testing
purposes, scala_compile currently generates a warning message if it
detects any scala target with conflicting exclusives it its transitive
dependency graph.

A simple unit test is also provided for the transitive
exclusives propagation.

Auditors: benjy
Added a check_exclusives task.

- This change converts the exclusives propagation into a build phase.
- Conflicting exclusives are detected by the CheckExclusives task,
  and cause the build to fail.
- Scala compilation generates a warning if the scala targets to be compiled
  have incompatible exclusive tags.
- The propagation code has been modified to avoid recomputing things.
- Exclusives tags have been added to all of the target types.
- A test was added to verify that the CheckExclusives task correctly
  detects errors.
- Documentation was updated and extended.

Reviewers note: Adding the "exclusives" tag to all of the target types seems
very ugly, but I wasn't able to find any other way of making it an option
on all of the targets. Is there some python/pants idiom that would make that
cleaner?

Auditors: benjy
Addressing review comments

- changed to a python idiom for default exclusives arguments.
- pruned redundancy from documentation.
- renamed test file.
- changed parameter handling for creation of tasks from the
  TestCheckExclusives test.
- cleaned up exclusives propagation for InternalTarget.

Still todo before this can merge to master:
- Examine all of the target types, to identify the set which are proxies,
  and make sure that all proxy targets propagate the exclusives correctly.

Auditor: benjy
Extended exclusives propagation.

The first draft of "exclusives" tagging support didn't handle two
corner cases:

(1) Types that weren't subclasses of InternalTarget, but had overridden
    implementations of the _walk method for tracing through dependencies;
(2) JVM based target types that could be transformed into jar dependencies.

This change adds coverage for those cases.

Auditors: benjy
Megamerge!

- Merge the exclusives code with the results of the twitter megamerge.
- Fix a test bug introduced in the merge.

Auditors: benjy
Adding compilation group chunking based on exclusives.
Added non-file build products.
Integrate exclusives declarations with compilation.

- Modify IvyResolve so that it recognized the different exclusives groups, and generates
  group-specific ivy reports.
- Added new build product types for data products.
- Added exclusive data as a data product.
- Added exclusives-based classpath computation.
- Modified JavaCompile and ScalaCompile to work with exclusives-based classpaths.
Use exclusives in compilation.

- New exclusives-based version of ivy_resolve, and updated versions of
  JavaCompile and ScalaCompile that use exclusives-based classpaths.
- Updated JvmTask and friends so that jvm tests and executables are launched
  with the correct exclusives-based classpath.

Note: this change doesn't entirely remove the old classpath manipulation code.
In case of disaster, that should make it easier to do a partial
rollback without undoing everything.

Auditors: benjy