Merge pull request #21 from leothekim/master

Add support for Stat population in ZooKeeperNode
Remove checkstyle as a default required compile phase goal, link this in instead as a twitter-specific requirement in BUILD.commons
Make the results of IvyResolve be target-dependent.

Previously the classpath file was always the latest one computed, even
if you then start working on a different target whose BUILD files
haven't change (and therefore won't trigger a new resolve).

This change qualifies each classpath file with (a hash of the ids of)
the targets it was generated from, and the main classpath file is now
a symlink to the appropriate one.

Signed-off-by: John Sirois <jsirois@twitter.com>
This push brings more improvements to the release candidate for the new pants build system as well as a major revamp of python .pex support.

 New python toolchain:
   The major components:
     PythonLauncher => PEX
     Environment => PEXBuilder
     Almost completely rewritten twitter.common.python
     First class PexInfo manifest for doing thin pexes
     PEX files now embed enough portions of pip/distribute/twitter.common.* rather than dumping out eggs
    No longer use EggParser + EggCache; instead use the "proper" pkg_resources Metadata+Distribution components

  pants:
    + Fix resolve cp construction to always occur
    + Add a comment to make it clear pants confluence pages should not be edited directly - give a pointer to the target to use instead
    + Fix markdown open to display isolated pages in addition to page graph roots
    + Remove -types from ivy resolves and instead uniformly use extension matching against jar to cull classpath mappings
    + Fix help - don't reuse the initial option parser - just seed a new one
    + Add support in test runner for failing fast and plumb this option through to pants.new's junit task
    + Fix compiler diagnostic filters to only apply to warnings - was squashing error messages as well
    + Pass return codes back up from the pants py command
    + Support jvm_args for jmake
    + Add orphan pid reaping to python tests
    + Add support regex excludes to old and new pants
    + Add configurable test timeouts to python test targets
    + Add basic command line pre-parsing support to enable free mixing of goals, targets and flags for 99.9% of cases
    + Fix AnsiColorDiagnosticListener to handle warnings and errors at eol - a common case being missing ;   + add a failing test and fix
    + Add support for : and :: syntax to select all sibling and all descendant targets, deprecate the corresponding --all and --all-recursive flags
    + Add a check that jars never get over-written
    + Add rcfile support to pants.new for defaulting flags
    + Fix dependency file flushing for cases when the compiler hits an error before ever flushing a class file
    + Support python_binary targets without sources
    + Fixup JUnitConsoleRunner to count all public methods of a concrete class' hierarchy to model junit4 native runner behavior
    + Protect pants/new java processes from CLASSPATH environment variables - scrub these and warn the user
    + Cut off BUILD file ancestor walks at the build root to prevent a large class of hard to diagnose errors
    + Add an option to force NailgunTasks to globally revert to subprocess java spawns instead of starting up a nailgun server
    + Add support for publishing snapshots to a local maven repo. + Fix latent bug when publishing targets with thrift or protobuf dependencies
    + Map jmake error codes to meaningful (for the most part!) messages
    + Use a single --specs flag to collect both explicit specs file paths and classnames
    + Add basic emma code coverage support for java_tests
    + Add a custom DiagnosticListener to the dependency tracking compiler to enable targeted supression of warnings and colorized build output
    + Add an option to log success/failure after execution
    + Fix missing provides transfer from protobuf target to synthesized java_library target
    + Add idea and eclipse goals to generate IntelliJ IDEA and Eclipse projects respectively
    + Adds filedeps and pathdeps goals to pants
    + Improve bundle mapping flexibility with support for relative_to
    + Remove duplicate pants BUILD definition

  python:
    + Have the log module respond to a NONE disk level by turning of disk logging completely and add a LogOptions method to allow apps to do this programmatically
    + Add an lru cache decorator
    + Fix wall_time handling for procfs, fixes thermos kills on linux
    + Add ignore_errors option to pex dependency resolution
    + Support initializing common log without disk logs
    + Fix error in python macosx platform compatibility logic, add tests
    + Add support for pex pkg_resources entry points
    + Safer package caching for .pex
    + Add daemonization to twitter.common.app

  jvm:
    upgrades:
      mahout-0.6-T1, finagle 2.0.1, twitter-text 1.4.10, gson 2.1

    + Add 99.9 and 99.99 as default percentiles in RequestStats
    + Just log changes in a serverset when they occur
    + Kill twitter.thrift/ThriftService
    + Introduce an interface to abstract TimeSeriesRepositoryImpl from Stats static badness
    + Unsuppress checkstyle for args, common/application and httphandlers
    + Expose Supplier<EndpointStatus> in ServerSetModule
    + Changes to the TokenStreamSerializer
      add a fingerprint of the attributes used in the serializer so that mismatches in attributes are detectable
      add a ByteRef-like interface for deserializing a snippet of a byte array
      ensure that TokenTypes are serialized to a single byte
    + Introduce a glog style formatted in common.logging
    + Narrow finagle-thrift dependencies to just what is required
    + Expose per event latency stat in SlidingStats
    + Scala command line parsing using case classes
Make resolve depend on gen.

This is so any deps injected into synthetic codegen targets
participate in the resolve.
Pythonpath bugfix in pants.
Merge pull request #25 from benjyw/master

Pants pythonpath bugfix.
This push brings more improvements to the release candidate for the new pants build system as well as python support for server sets

pants:
  + Add support for --gen-thrift-version= to allow for use of alternate thrift compilers
  + Fix python protobuf code gen
  + Updates to eclipse goal's generated project config to better match commons checkstyle
  + Add support for --(idea|eclipse)-intransitive to only map sources specified on the command line into projects
  + Fixup pants target caching by replacing BUILD file caching with external dependency caching
  + Add an option for commands to acquire a run-lock when they are not re-entrant.
  + Fixup phase preparation to allow for multiple rounds when goals inject new targets into the run context in the prepare step
  + Add support for a scalac_plugin target
  + Introduce a scalac plugin to track source -> classes and eliminate deprecated flags
  + Correctly map jmake return codes when run via popen instead of via a nailgun
  + Add support for maven and sbt local repositories for snapshot sharing
  + Add handling for vm crashes while running tests
  + Fallback to searching for pants nailguns via psutil when its available and pid files are deleted

python:
  + A new ZooKeeper client and Group abstraction with a Reliable ServerSet implementation and app integration

jvm:
  upgrades:
    guava-12.0, finagle 3.0.0, zookeeper 3.4.3

  + Various improvements in logging support including AppLauncher support for glog style flags vi the LogModule
  + Angrybird zookeeper server - a zookeeper server with an api to control events for testing
  + Create a Histogram interface in metric and a memory efficient implementation that creates gauges automatically based on the distribution of values rather than pre-determined buckets
Update commons configs:
+ update finagle deps in 3rdparty to include finagle-serversets.
+ fixup pants.ini to include new scalac plugin dependencies.
A ./pants provides goal.

Provides emits the list of all classes a target provides.
Address codereview comments.
Fix a bug.
Merge pull request #26 from benjyw/master

A "provides" goal for Pants.
Support custom naming schemes for ZooKeeper groups

Added support for custom naming schemes in ZooKeeper groups that
implement the Group.NodeNameScheme interface that are passed in through
the constructor.

Added backwards compatibility in the form of Group.DefaultNamingScheme
so that existing usage does not break.

Documented changes in constructor API, the new interface, and the new
default implementation.

Added test GroupTest.testJoinCustomNamingScheme to test that the nodes
are named according to the new naming scheme and a listener is updated
regarding their presence.
Add a warning if a file yields no test classes.

Currently we get an opaque error when dereferencing None.
Merge pull request #30 from benjyw/master

Add a warning if a scala source file generates no classes.
Merge pull request #28 from znewman01/namingscheme

Support custom naming schemes for ZooKeeper groups
Allow scalac and javac builds to be unflattened.
Merge pull request #31 from benjyw/master

Allow scalac and javac builds to be unflattened.
Zinc integration into Pants.

Not a trivial change. There's quite a bit of commonality between
scala_compile.py and java_compile.py that could be factored out,
but it's best to keep that for a separate change, as it's not
quite as simple as it seems.