Version 15.11.0
--------------

    * Added PreloadSubincludes in a similar vein to PreloadBuildDefs
      which allows the specified target to be subincluded automatically
      in all packages #1414
    * Added a new method for installing go modules that avoids a number
      of issues with using "go build" from within Please. This feature
      is experimental and can be enabled with the PleaseGoInstall
      feature flag #1417
    * Output directories now maintain file permission when moving outputs
      to plz-out #1441
    * Fix issues around subincluding from a target defined in the
      current package #1424
    * Fix regression in go_get() where it was failing to produce
      outputs in some circumstances #1437


Version 15.10.0
--------------

    * Added go_module() rule that handles vanity imports and
      module major versions better than go_get() #1396
    * Updated pip_library() to work with pip v20.3.x+ #1421
    * Fix issue with duplicate outs on go_get() causing missing
      outputs #1437


Version 15.9.2
--------------

    * Various small fixes and optimisations to remote execution
      #1401 #1397 #1402 #1403
    * Address edge case for filegroups so they now check if they're
      overriding another package #1404
    * Added option for a light colour scheme that works better for
      terminals with a light background #1405
    * Fixed non-deterministic hashes for outputs in go rules #1410


Version 15.9.1
--------------

    * Print milestone message to stderr instead of out


Version 15.9.0
--------------

    * Transitive dependencies of subinclude() calls are no longer downloaded
      if remote execution is enabled.
    * Secrets in the [BuildEnv] section no longer contribute to the config hash
      #1387
    * Codelabs are now live at https://please.build/codelabs.html
    * Made $DATA and $TOOLS variables available at runtime when using
      `plz run --env` #1384
    * `protoc_binary()` now translates go style os and arch values to the
       correct format for their releases #1394


Version 15.8.2
--------------

    * Stop sh_test() modifying the permissions of it's inputs #1375
    * Print a summary of log messages after a build #1377
    * Named tools, test_tools and data are now formatted as a dict
      instead of a list for `plz query print` #1379
    * Binary filegroups no longer modify their sources permissions
      #1376

Version 15.8.1
--------------

    * Revert to old behavior for go_get() when both `get` and `install`
      are lists #1365


Version 15.8.0
--------------

    * Allow go_get() to specify installs per module #1335
    * Allow format strings and raw strings to be implicitly
      concatenated in the build language #1344
    * Added is_platform() rule which can check the current platform
      matches the specified cpu and operating system.
    * Made go_get() specific about its outputs based on the installed
      packages. This allows multiple go_get() rules install different
      packages from the same module. This can help resolve cyclic
      dependencies. #1341 #1352
    * pip_library() now uses python -m pip instead of pip on the path
      to avoid problems where pip and python are different versions.
      #1346
    * Added exported_deps to genrule() and gentest() which can be used
      to re-export dependencies to those that depend on these rules.
      #1345
    * Made maven_jar() download its sources in a way that is compatible
      with tooling. This is gated behind the MavenJar feature flag and
      is due to be released in v16.
    * Fixed an issue where tools were being copied into build rules
      when they used entry points #1349
    * Made go_toolchain() install the standard libraries of the target
      platform when cross compiling #1350


Version 15.7.1
--------------

    * Subincludes now set the config values based on the --arch flag
      correctly #1324


Version 15.7.0
--------------

    * Glob will now include hidden files when Bazel compat is enabled #1305
    * Fix some niggles around select() and config_setting() #1324
    * Improved test output to include real and total time #1309
    * Fix to cgo_library() to set its import path correctly #1310
    * Adding multiplication and division to the BUILD language #1314
    * go_get() now tags download rules based on the whole module name
      rather than just the github group #1327
    * go_get() now supports multiple patches #1328 #1333
    * Fix nil pointer when failing to parse test output for remote execution
      #1330


Version 15.6.0
--------------

    * Added an `entry_points` dict to `build_rule()` which can be used
      to name a number of outputs from a build rule. These can later be
      referred to as tools in other rules. See `java_toolchain()` for an
      example. #1243
    * Rewrote `java_toolchain()` to use aforementioned entry points.
      NB: this implementation lacks support for javac workers #1263
    * Added `go_toolchain()` build rule. This is still a work in progress
      but currently downloads the golang distribution. This can then be
      used to set GoTool in your `.plzconfig`. #1286
    * Please will now retry on failures to download updates #1257
    * The pleasew wrapper script will now pass `$PLZ_ARGS` when it invokes
      please much like the bootstrap script. This can be useful in a CI
      environment. #1252
    * Added new sub-command `plz fmt` that will try and format build files.
      This uses a modified version of Bazel's buildifier that supports more
      of please's build language. #1265
    * Fix issue where `go_test()` wasn't using the configured `GoTool` for
      coverage. #1271
    * Allow `plz query somepath` to read from stdin #1269
    * Added `--log_append` which will make please append to `plz-out/log/build.log`
      instead of overriding it. This can be useful when piping outputs from
      `plz query` back into please. #1273
    * Introduced the concept of milestone releases! Once we feel please has reached
      a milestone in its development, we will write up a summary of recent changes
      and that release will be marked as a milestone. Please will print a dialogue
      linking to this writeup when updating. Watch this space, we will also be
      distributing these via a newsletter! #1281
    * Remote execution: turn off gzip compression by default (#1283) and add support
      for zstd compression (#1288)


Version 15.5.0
--------------

    * Added `test_tools` which works the same as `tools` but
      makes them available to `test_cmd` instead #1247
    * Added $(out_dir ...) and $(out_locations ...) command
      replacements #1244
    * Made `plz query roots` and `plz query filter` omit hidden
      rules from their results. This is closer to how other `plz query`
      commands work. Also added a `--hidden` flag so they can be
      included when needed #1242
    * Avoid trying to download the empty blob in a few places for
      remote execution #1241
    * Fixed edge case issue with go tests when there's no tests
      and a TestMain method #1245


Version 15.4.1
--------------

    * Additional test outputs are now optional when when executing
      remotely just as they are when executed locally #1234
    * Improved performance of preparing inputs for targets when
      executing remotely #1236


Version 15.4.0
--------------

    * The linux Please binary is now statically linked so is portable
      across musl and glibc linux distributions #1180
    * GOROOT is now respected when configured and the go tool is
      determined based off this variable. If the GOROOT is not provided,
      the GOROOT is determined as `go env GOROOT` based on the
      configured go tool. #1195
    * Java binaries are now self executable by default. This feature
      is gated behind a feature flag until v16. Type plz help featureflags
      for more information. #1197
    * Fixed esoteric edge cases in jarcat where it would fail to create
      directories under some circumstances #1203
    * subrepo_name() and package_name() now work in the top level of a
      build definition file returning the package and subrepo of their
      build rule respectively #1198
    * plz init is now interactive and will guide you through adding
      the pleasings subrepo if you wish. The pleasings subrepo will
      no longer be added implicitly as of please v16 #1205
    * Java tests no longer fail when the junit tool is a real file rather
      than being on the path #1207
    * Fixed regression with C and C++ proto rules #1216
    * Made hash_filegroup more portable by detecting available implementations
      of sha1hash #1209
    * The go_benchmark() rule now marks all its internal rules as test only #1221
    * Added interactive golang setup to plz init. Please will now detect a
      go.mod file and set your import path correspondingly. It will also
      warn around common pitfalls when setting up go on the path #1224 #1225
    * Added config option to make please descend into the package directory
      before running go tests. This is closer to how `go test` works and can
      help migrate from `go build` to please #1226
    * Deprecated --nocache which will be removed in v16 #1229
    * The pip_library() rule now applies its labels to all its sub-rules
      #1211
    * Added a config option to make please `set -e` before running any
      commands. This will make please fail fast and avoids errors being silently
      ignored #1210
    * Additional test outputs are now downloaded to plz-out when tests
      are run through remote execution #1230
    * Please now adds a `User-Agent` header to remote_file() requests #1232


Version 15.3.0
--------------

    * Implement more principled linking of go code, avoiding a lot of
      hackorama from the old approach and allowing arbitrary import
      paths for go_library rules. #1158
    * Added subrepo_name built in function to the build language. This
      should make targeting rules within your repository possible
      even when it's being used as a subrepo. #1190
    * Improved the way labels are applied to tests so all subrules are
      also labeled. #1189
    * Hashes of rules using "PassUnsafeEnv" no longer change as the env
      changes. #1187
    * Fixed `--in_wd` so that it stays in directory correctly. #1172


Version 15.2.0
--------------

    * Improved portability of applying patches to go_get rules #1160
    * Allow staying in the current directory when using plz run by
      passing the --in_wd flag
    * Fixed some issues around linking go packages (#1061 and #1157)
    * Added removeprefix and removesuffix built in functions to the
      build language #1155
    * Made subinclude variadic so multiple targets can be included on
      one line #1153
    * Removed `plz ide intellij` #1141
    * Http cache now retries on error. #1143
    * Please now returns the correct error code on cross compilation
      failures #1151
    * Improve the get_command built in function to return a dictionary
      in that case #1147
    * There is now a binary release of please for FreeBSD #1142
    * Please now cleans up stale outputs correctly which was causing
      issues when renaming a target #1134
    * Added an example http cache implementation. This might be preferable
      to something like nginx as its configuration is very light weight.
      #1133


Version 15.1.0
--------------

    * Some improvements around git operations and stamping targets. There's
      performance improvements (#1114 and #1113) as well as better error
      reporting (#1125)
    * New configuration option to limit the number of concurrent http cache
      requests. The default limit is 20. #1115
    * Made plz update respect the plain output flag #1120
    * Some improvements to the remote file so that it can extract a subset of
      files from the archive. The out parameter is now also optional and if it is not
      provided, the files are extracted into the root of the rule's output. #1123
    * Updated please to use go 1.15
    * HTTP cache now cleans up connections more robustly #1129
    * `plz clean --nobackground` now cleans read only files #1122
    * Support for custom output name for sh_binary rules #1119


Version 15.0.1
--------------

    * Go rules now write a go.mod file to plz-out to help go tooling work better
      with a please repo.
    * Fix links in plz-out/go/src so that they link to files rather than just the
      root of the repo. #1105
    * Fixed the --rerun flag on tests for remote execution to force a re-run of an
      already passed test. #1100


Version 15.0.0
--------------

    * Please now supports remote execution using the
      [Remote Execution API](https://github.com/bazelbuild/remote-apis).
      See the documentation for more detailed information about
      how to set it up and what's needed.
    * `plz query affectedtargets`, `changed` and `changes` have been
      consolidated into a single command `plz query changes`. See #922
      for more details & migration info.
    * `plz query deps` now always outputs unique dependencies (like the
      `--unique` flag used to do).
    * The RPC cache has been completely removed. We recommend the HTTP
      cache for simple caching setups, which some CI providers may
      offer by default.
    * `plz follow` has been removed.
    * The output of `cc_shared_object` rules are automatically prefixed
      with `lib` where appropriate.
    * SHA256 is now the default hash function. SHA1 hashes specified in
      BUILD files will continue to work.
    * `hash_filegroup` is now implemented in the BUILD language instead of
      as a builtin. Generally it shouldn't matter but the output format is
      slightly different (it is hex-encoded instead of base64).
    * Changed the proto_language contract: language plugins now have to output
      into $OUT_DIR instead of $TMP_DIR. This is to facilitate a change that
      simplifies the inner workings of proto_library improving incrementality,
      as well as doubling the performance when built using remote execution.
    * Added a --rerun flag to plz test. This shouldn't be strictly necessary
      if you're builds are pure however it can be useful when changing your
      environment/toolchain.
    * Added module_major_version argument to go_get rule. This works around
      some issues with modules that have done a major release. See the
      go_get documentation for more information. #1078


Version 14.6.0
--------------

    * Fixed a file leak in please #1017
    * Fixed a concurrency issue with uploading test results when using
      --num_runs #1016
    * Added metadata field to build rules that can be an arbitrary object.
      This metadata can later be retrieved by a new built-in function
      get_rule_metadata. #1006
    * Added java_toolchain rule that can be used to download a JDK. This
      can be passed to java_library and java_binary to specify the version
      of java to use. This is still a WIP and doesn't support a number of
      things, most notably javac workers. #1011
    * Added a go_benchmark rule that can be used to produce a binary to
      run a go benchmark suite. #1014


Version 14.5.7
--------------

    * Reused outputs of previously remotely built targets are now downloaded
      correctly in some circumstances.


Version 14.5.6
--------------

    * Incrementality stats & caching statuses are now calculated correctly
      when using remote execution.


Version 14.5.5
--------------

    * Test outputs are no longer downloaded in batches for remote execution
      to avoid exceeding the size limit.
    * $(exe) replacements no longer include local paths for remote execution.


Version 14.5.4
--------------

    * Test output is no longer repeated for multiple failing runs (#1001)
    * Fixed output package checks (#999)
    * Various remote execution fixes.


Version 14.5.3
--------------

    * Fix issue where test_results.xml was missing package and suite names

Version 14.5.2
--------------

    * Go test output now parses correctly again (#994)
    * Matches of original targets for downloading outputs are now more exact (#987)


Version 14.5.1
--------------

    * Various improvements to Go test result parsing, especially skip messages (#980, #982)
    * Remote execution now orders directory contents lexicographically (#979)
    * `plz test --shell` correctly sets environment variables accounting for multiple runs.


Version 14.5.0
--------------

    * Runs tests in parallel across multiple workers when providing --num_runs flag (#996)
    * Fixes for go coverage to make sure the coverage file is always generated (#977)
    * Fix for parsing go 1.14 test output (#969)
    * Fixed "negative repeat" issue with narrow terminal size when rending progress bars (#967)
    * Supporting --num_runs meaningfully for remote execution (#974)

Version 14.4.4
--------------

    * Pexes are now more Windows compatible (#947)
    * Suppressed some spurious logfile creation (#949)


Version 14.4.3
--------------

    * Rules consuming files across package boundaries are now checked more accurately and
      at build time rather than parse time.
    * Data attributes are downloaded recursively when building remotely.


Version 14.4.2
--------------

    * Auth tokens are now attached to outgoing requests on the remote asset API when
      the URL differs to the main execution API.


Version 14.4.1
--------------

    * Various improvements to double-star globbing implementation.
    * `plz hash --update` is now a bit more robust to non-trivial BUILD files.


Version 14.4.0
--------------

    * Binary rules now generally accept a `data` argument indicating dependencies they need at runtime
      (paralleling the existing equivalent on tests). This is mostly relevant for remote execution.
    * Double-star globbing is now more consistent (#927, #874)
    * Parsing of JSON coverage output from Istanbul is now more correct (#923)
    * `plz run` now accepts a `--remote` flag allowing it to leverage remote execution.


Version 14.3.11
---------------

    * Fixed an issue since 14.3.8, plz now again falls back to copying when linking fails.


Version 14.3.10
---------------

    * Suppressed some spurious errors about linking duplicate test results into surefire directory.


Version 14.3.9
--------------

    * Fix creation of links in e.g. plz-out/go which in some rare circumstances could
      end up polluting other parts of plz-out (#899).
    * Fixed java_library rules that took only resources and not srcs (#900)


Version 14.3.8
--------------

    * Fix for python_test which was not correctly accepting `data` as a dict (#899).
    * Allow symlinks in jarcat tarballs (#898)


Version 14.3.7
--------------

    * Coverage reports use unified class / file names (#885)
    * Fixed a bug in `plz init` in the previous version.


Version 14.3.6
--------------

    * Python testrunner compatible with newer versions of coverage (#870)
    * Updated a number of third-party Python libraries (#872)
    * Temporarily reverted concurrency change from last release.


Version 14.3.5
--------------

    * Fix bug where trying to subinclude :all would hang forever (#862)
    * Better concurrency for parse-only operations on bigger machines
    * Updated to Go 1.14
    * More remote execution fixes


Version 14.3.4
--------------

    * Fixed some quoting in Go rules from previous release.


Version 14.3.3
--------------

    * Fixed a bug where `plz query changes` could be thrown off by sources beginning with ./
      All source files now have that stripped for consistency.
    * Some corrections for proto_library rules at the root of the repo.
    * Extensively quoted build variables to make things work better in paths with spaces (#850)


Version 14.3.2
--------------

    * Add an SCM_COMMIT_DATE env var to stamped build targets (in the format
    YYYMMDD)

Version 14.3.1
--------------

    * Fix jarcat when rules are sandboxed


Version 14.3.0
--------------

    * The `data` argument to various test rules can now be named (as `srcs` and `tools` etc).
    * Remote execution now requires the new Remote Asset API for `remote_file` rules.


Version 14.2.2
--------------
    * Modified `sh_binary` rule to exclude its own output from zip.


Version 14.2.1
--------------

    * Fixed args sometimes not being honoured in `plz run`.


Version 14.2.0
--------------

    * Targets with stamp=True now get a file containing metadata about their dependencies (#805)
    * plz run now does a better job of terminating subprocesses when killed (#808)
    * Various fixes towards bootstrapping on ARM (#796)
    * Support for TLS with remote execution
    * Remote execution displays progress and RPC bytes in/out


Version 14.1.12
---------------

    * More fixes for remote execution


Version 14.1.11
---------------

    * Fixed some overly aggressive logging from remote API libraries
    * Multiplex capabilities when there's a different execution / CAS server
    * jarcat now extracts xzipped tarballs correctly.


Version 14.1.10
---------------

    * python2 compatibility fix in please_pex
    * Various remote execution fixes
    * protoc_binary now provides well-known types as a dependency


Version 14.1.9
--------------

    * Make remote timeout configurable (#770)
    * Fix faulty download blob logic for servers that support batching reads.


Version 14.1.8
--------------

    * Fix for an issue where protoc_flags passed to grpc_library were passed
      twice to the actual protoc invocation
    * Changed .pydistutils.cfg to setup.cfg in pip_library (#762)


Version 14.1.7
--------------

    * More fixes for remote execution / caching.


Version 14.1.6
--------------

    * Fixed label replacements for tools in subrepos
    * Fixed uploading stdout to remote CAS


Version 14.1.5
--------------

    * More fixes for remote execution / caching.


Version 14.1.4
--------------

    * Fix issues with flags for recent pip versions
    * More fixes for remote execution / caching.


Version 14.1.3
--------------

    * More small fixes to remote execution code.


Version 14.1.2
--------------

    * Lots of small fixes to remote execution code. It remains experimental.


Version 14.1.1
--------------

    * Fixed width calculation in interactive terminal display
    * Fixed a long-standing bug in --failing_tests_ok flag so it only applies to tests.


Version 14.1.0
--------------

    * Added a separate `go_test_main` rule to template the main file for a go test in
      a way that can be consumed separately from an actual test.
    * Exit codes are now a bit more granular.
    * `plz query print` now accepts a `-l` / `--label` flag to print specific labels for a target.
    * `plz tool` works outside a repo
    * Fixed a rare segfault when using both RPC and remote execution caches
    * Various langserver fixes


Version 14.0.0
--------------

    * Hashes are stored on files in xattrs (when available) for faster rebuilds (#640).
    * Use of xattrs can now be disabled for systems where they are not supported (#641, #548, #644)
    * The machine config file now lives in `/etc/please/plzconfig`
      (previously it was `/etc/plzconfig`).
    * `plz tool maven` and the builtin `maven_jars` are removed. They can be used from their
      new home of https://github.com/thought-machine/pleasings.
    * Non zip-safe pexes are now cached in $HOME & can be reused on subsequent runs.
    * Users can bring their own test runner via the `python.testrunnerbootstrap` config property.
    * `go_test` no longer works for versions prior to 1.8
    * `go_library` rules using assembly now only work with Go 1.12+ (previously they did not
      work with 1.12) (#659)
    * The HTTP cache protocol has changed; we no longer provide a server implementation, but it
      is now compatible with many other implementations (e.g. Cirrus, nginx/webdav, etc).
    * The RPC cache is now deprecated in favour of a new remote execution cache. The client
      remains in plz but we aren't providing the server implementation any more.
    * `plz rebuild` is removed in favour of `plz build --rebuild`
    * The `--keep_going` flag has been removed (#655)
    * `python_binary` and `python_test` now take a `site` argument determining whether they
      import the site module at startup. Default is off. (#634)
    * Import lines are excluded from Python coverage stats (#607)
    * Jarcat honours --strip_prefix in some more places
    * Support for uploading test results to a remote server (#657)


Version 13.8.2
--------------

    * Fix watch on files at repo root (#618)
    * Allow targets labelled as manual to be included in (most) `plz query` invocations
    * Add jcenter.bintry.com as a default Maven repo to improve reliability (looks like
      repo1.maven.org rate limits us sometimes).


Version 13.8.1
--------------

    * Update returns to original directory before re-exec (#627)
    * More arguments are completed as filenames (#628)
    * Initial support for incremental coverage calculations.


Version 13.8.0
--------------

    * Allow specifying Python interpreter options through global config (#625)
    * Allow `sh_cmd` to take commands as a list (#623)
    * Explicit feature passing in the behave test runner integration (#621)


Version 13.7.1
--------------

    * More robust subprocess management (#620)
    * Improved default handling of files shown for coverage.
    * Handle sources not existing on PATH more gracefully during `plz query changes`
    * Allow for non-flat tarballs (#624)


Version 13.7.0
--------------

    * `genrule` now accepts `pass_env`, a list of environment variables to be passed through (#575)
    * `go_get` rules can now find dependencies without `gopath` (#617)
    * Downloaded plz versions can be hash validated in addition to signature checked (#615)
    * Jacoco version updated for better java 11 compatibility.


Version 13.6.3
--------------

    * Instruct user directory to add to PATH manually. (#614)
    * Use master for default revision in go_get, to avoid slow path. (#613)
    * Setting PDEATHSIG on child processes (#605)


Version 13.6.2
--------------

    * bzip2 decompression is now supported when extracting remote_file rules.
    * go_get improvements for multiple downloads in the same rule.
    * No longer fails for stamped rules when the SCM revision is unknown; instead
      the placeholder <unknown> will be returned.


Version 13.6.1
--------------

    * Add licences field to go_get
    * Warn if stdin is being piped but not being read


Version 13.6.0
--------------

    * Various fixes for `plz watch --run` (#599, #600, #602, #603)
    * Fixes for `plz coverage` with no argument (#535)
    * More cross-compilation fixes (#603)
    * `remote_file` now takes an `extract` argument to extract tarballs / zipfiles.
    * Added `get_licences` builtin to find licences of a target.


Version 13.5.5
--------------

    * Fix for static Go binaries with definitions (#597)
    * Allow config_setting rules to switch based on OS (#596)


Version 13.5.4
--------------

    * Fix for finding subrepos (fixes cc_test in #577)
    * Fixed secret substitutions only replacing the first tilde (#572)


Version 13.5.3
--------------

    * Several cross-compilation issues fixed (#581, #582, #584, #585).
    * Process termination is more robust for test timeouts etc.


Version 13.5.2
--------------

    * Cached test results have an equivalent property set.
    * Fixed pre_build argument not always being honoured on `genrule`.
    * `plz init config` now does not need to be run within a repo (as `plz init` does not).


Version 13.5.1
--------------

    * Level of reverse dependencies queried can now be controlled by a flag (#570)


Version 13.5.0
--------------

    * Test sizes are now configurable through config (and more usable for non-builtin rules)
    * Old user config files (in ~/.please/plzconfig) are now auto-migrated to new location.
    * A Homebrew formula is now available (#530)
    * please.location config property is now auto-detected based on install location.
      This is somewhat nicer for system-level installs through Brew etc.
    * Improved incrementality for go_library targets
    * Don't arbitrarily exclude files named src.jar any more


Version 13.4.8
--------------

    * Fix worker replacements that are not build labels not to be prefixed incorrectly.
    * Honour escape sequences in f-strings correctly.
    * Fixed a rare parse failure involving functions with a particular argument configuration.


Version 13.4.7
--------------

    * Fix for some incorrect cache misses by not re-retrieving post-build output.
    * Config hash filters out PATH since items located via it are hashed directly.


Version 13.4.6
--------------

    * Fixed 'licences' error in maven_jars. Now issues a deprecation warning.


Version 13.4.5
--------------

    * Fixed some post-build functions that were incorrectly erroring.


Version 13.4.4
--------------

    * Bunch of Bazel compat fixes
    * Fixed visibility checking of subinclude()


Version 13.4.3
--------------

    * Fixed an issue on OSX with some incorrect dirs when the test sandbox flag was enabled.


Version 13.4.2
--------------

    * Fixed `plz init` command without the `config` subcommand.


Version 13.4.1
--------------

    * Various minor subrepo improvements & fixes
    * Fixed query revdeps which wasn't querying to arbitrary depth correctly.


Version 13.4.0
--------------

    * The sandbox tool now uses user namespaces and is shipped with Please.
      It also sandboxes the test directory too.
    * Tools are now looked up via PATH, allowing a little more flexibility around installation.
    * go_get now works as before in a repo containing a go.mod
    * `plz query deps` has a `--hidden` flag to expose internal targets.
    * cgo_test now works with coverage
    * Added `plz init config` subcommand to add things to config files
    * User config file has moved to ~/.config/please/plzconfig; the old location is still
      read but is deprecated.


Version 13.3.4
--------------

    * Fixed Go coverage when there are hyphens in the path (#538)
    * Some small FreeBSD-specific fixes
    * `plz clean` honours the starting directory in the same way as `plz build` (#536)


Version 13.3.3
--------------

    * Fixed `proto_library` for .proto files that specify a `go_package`.
    * Fix to not rebuild rules as often in some rare cases (involving rules that have no
      declared outputs but add them later using post-build functions).


Version 13.3.2
--------------

    * Fixed race condition in cache for git builtins.


Version 13.3.1
--------------

    * Improvements to git/exec error messages & path search for git builtins.


Version 13.3.0
--------------

    * Fixed extra_outs on go_get (#483)
    * Fixed termination of subdir walking (#489)
    * Added linker definition support to `go tool link` (#491)
    * Rename support in LPS
    * Improved determinism in go_get
    * Added native git commands (git_branch, git_commit, git_show and git_state).



Version 13.2.7
--------------

    * Disallowed adding empty outputs to a target (this never made sense and
      would only break things).
    * Langserver now supports autoformatting and completion for local files
      and argument names.
    * Fixed an issue with incorrect permissions when a rule marked as binary
      had a directory as an output (#478).


Version 13.2.6
--------------

    * IntelliJ project export now ignores 'provides' redirects in
      dependencies.

Version 13.2.5
--------------

    * Fix for a possible infinite loop during builds when some specific kinds of
      changes to targets were made.
    * Further updates to language protocol server.


Version 13.2.4
--------------

    * Better support for long filenames when operating on ar archives.


Version 13.2.3
--------------

    * Some fixes to `plz watch`.


Version 13.2.2
--------------

    * Fix to cc_static_library which wasn't always calculating symbol tables correctly.


Version 13.2.1
--------------

    * Fixes to C and C++ rules in some subtle cases where object files could be created with
      conflicting names.
    * Language server now implements various textDocument and completion methods.


Version 13.2.0
--------------

    * Test result files no longer have hashes in their names.
    * UnitTest++ main has been moved out of core to pleasings.
      This should be transparent at first but does involve downloading a subrepo -
      it is part of a longer-term plan to make cc_test more generic.
    * Some changes to how plz is released:
      * Tarballs are released as xz as well as gz, which is considerably smaller
      * Supports downloading releases from Github if downloadlocation is set correctly.
      * Not releasing .deb artifacts for now
      * Releases are now built on CircleCI and released automatically.
      * Java components now live in github.com/thought-machine/please-java. They are
        still released as part of Please in the same way as before, but there's no
        javac requirement to build it now.
    * please tool maven has a --graph flag that allows some integration
      with existing BUILD files.
	* Coverage can be disabled for all tests that have a particular label.
    * Includes a language server which is still incomplete but under active development.
      In future this will be the solution for IDE integration with BUILD files.


Version 13.1.8
--------------

    * Corrected some cases where package() was not honoured correctly.


Version 13.1.7
--------------

    * Correctly check `data` attributes of rules during `plz query changes`.


Version 13.1.6
--------------

    * Fixed some spurious cache warnings.


Version 13.1.5
--------------

    * More robust property expansions in `plz tool maven`.


Version 13.1.4
--------------

    * Fixed python_wheel which in some subtle cases was not honouring `patch` correctly.


Version 13.1.3
--------------

    * :all and ... labels are explicitly banned in various contexts.
      This never actually worked, but the error messages are more useful now.
    * Various subrepo fixes.


Version 13.1.1
--------------

    * Some fixes to coverage output


Version 13.1.0
--------------

    * Test flakes now have more distinct treatment for multiple runs (#350)
    * Support for limited PEP-498 style f-strings in the BUILD grammar.
    * Added `plz query roots` which returns roots of a dependency graph expressed
      as a set of labels (i.e. the ones in the list that have no dependencies).
    * Some improvements to structure of plz-out/go and some fixes for protos.


Version 13.0.1
--------------

    * Minor fixes to Prometheus metrics and behave test runner.


Version 13.0.0
--------------

    * Can now start shared test workers in a similar way to shared build workers.
	* Worker protocol has been changed to JSON instead of protobuf. This isn't compatible
	  with older versions, but they shouldn't normally mix anyway.
    * Now communicating with Docker using a proper API instead of execing the CLI.
      docker_run_args is no longer supported as a result.
    * Directory cache now supports a `dircompress` config option which stores artifacts
      as gzipped tarballs. This is slower to save / restore but results in fewer files
      and less space used.
    * Support behave as a Python test runner.
    * Supports Python 3.7
    * Better preservation of XML test results


Version 12.2.5
--------------

    * Fixed calculation of sources in `plz query changes` (#314)


Version 12.2.4
--------------

    * Don't produce detailed test output if input is stdin.


Version 12.2.3
--------------

    * Better XML output for tests that are skipped.


Version 12.2.2
--------------

    * Fixed path hashing in `plz query changes`


Version 12.2.1
--------------

    * Ensure Prometheus metrics only get initialised once.


Version 12.2.0
--------------

    * Initial cross-compiling support via new --arch flag.
      See the docs for more info: https://please.build/cross_compiling.html
    * Added support for the Java --release flag (new in Java 9/10).
    * Support to pass environment variables (#302, fixes #205)
    * Added 'plz query changes' subcommand. This supersedes the old workflow
      involving plz_diff_graphs and is considerably faster.


Version 12.1.8
--------------

    * Make sure run arguments are passed into sh_binary.
    * Use jarcat when creating archives for sh_binary rules.
    * Fix sh_binary to use zip/unzip instead of tar.
    * Ensure sh_binary extracts files into the same directory as the script being run.

Version 12.1.3
--------------

    * More symlink fixes in outputs (#299)


Version 12.1.2
--------------

    * Fix for some errors relating to symlinks in outputs.


Version 12.1.1
--------------

    * Fix to incrementality in python_library rules where in some cases bytecode
      was generated inconsistently.


Version 12.1.0
--------------

    * `pip_library` rules output single .whl files for better cache performance (#297)
    * Corrected some distutils errors when using Homebrew's `pip3` (#294)
    * Initial (still experimental) implementation of `http_archive` and
      `new_http_archive` rules.
    * Various other improvements to Bazel compatibility.
    * `remote_file` now has a builtin implementation and can show progress.
    * A lot of internal refactoring around the implementation of subinclude().
      Parse tasks now happen off the main worker 'threads' so they don't block them.
      This is a prerequisite for subrepo support.
    * Migrated most uses of `filepath.Walk` to `godirwalk` (#273).
    * Fixed handling of aliases (#298)


Version 12.0.0
--------------

    * Parser overhaul, cgo interface / cffi has been removed. There is now no requirement
      for Python to be installed on a machine during initial bootstrap.
      The still-unnamed BUILD language is now a much tighter subset of Python, which
      will hopefully not present too many issues unless one is doing particularly fiddly
      things in BUILD files.
    * Go rules now filter their sources via build tags (including implicit ones derived from
      filenames) as `go build` would. This can be suppressed by setting `filter_srcs = False`
      if the old behaviour is preferred.
    * The default Python interpreter is now python3. It can be set to python in the
      .plzconfig if one prefers the old behaviour.
    * The GoVersion config attribute has been removed, and with it support for versions < 1.5.
    * The BUILD file linter (accessed via `plz tool lint`) has been removed. The warnings that
	  it reported are essentially all now prohibited by the parser.
	* The RPC cache now uses gzip compression; the server will need to be updated to the
      latest version to be able to communicate with clients.


Version 11.4.0
--------------

    * Added --run flag to plz watch which invokes the targets using `plz run`
      instead of build / test.
    * Replace hyphen with underscore in buildenv plzconfig sections (#274)
    * Added `plz query rules` which prints out the currently known set of rules definitions.


Version 11.3.2
--------------

    * Fix for build failures in a rare case where there's a stale output file that is
      part of the path for another output in a subdirectory, ultimately failing with
      "not a directory" errors.


Version 11.3.1
--------------

    * Improved checking for banned or deprecated BUILD language features
    * Compiled with Go 1.9.3, hopefully this may fix rare "sweep increased allocation count"
      bugs due to https://github.com/golang/go/issues/22781.


Version 11.3.0
--------------

    * Support for Java 9 and JEP-220 features: `java_module` and `java_runtime_image`
      can be used to build a standalone Java image using modules.
      New config properties `jlinktool` and `javahome` have been added.


Version 11.2.1
--------------

    * Small fix for some Java coverage instrumentation issues.


Version 11.2.0
--------------

    * Add support for merging Akka's reference.conf files when building
      java_library and java_binary targets with akka dependencies
    * Add --env flag on plz run that applies config values to the environment
      (notably PATH)

Version 11.1.3
--------------

    * As much sorting as possible of original targets is now retained when they are passed
      into subcommands (most notably `plz run sequential`, but could be others too).
    * Fixed some duplicate flags on proto_library.


Version 11.1.2
--------------

    * Fix for go_library when asm_srcs are passed, in some cases build would fail
      with permissions errors.


Version 11.1.0
--------------

    * python_binary and python_test rules can now import binary modules directly
      via an import hook that dynamically extracts them as needed. Hence zip_safe is
      not needed in many cases it was previously.


Version 11.0.2
--------------

    * Several small fixes to please_maven correcting a few cases.


Version 11.0.1
--------------

    * Fixed a rare internal data race.
    * Added a warning for potential cases where one target outputs into a directory written
      by another target, which can cause subtle build failures.


Version 11.0.0
--------------

    * Now ships with a builtin parser engine so the .so's aren't necessary (although
      still included for now) and there's no requirement to have cffi or any Python
      version installed to run.
    * Interactive debugging for tests; passing `-d` to `plz test` or `plz cover`
      causes the test to break into an interactive debugger on failure. Currently only
      works on Python, C and C++ tests.
    * Altered priority of config files; `/etc/plzconfig` is now the lowest priority and
      there is an additional `~/.please/plzconfig` immediately after it.
    * Added --profile flag which selects a config profile, e.g. `--profile dev` will
      attempt to read `.plzconfig.dev` if it exists.
    * Added --version flag to `plz update` to force updating to a particular version,
      and --latest flag to always update to the latest.
    * parse.experimentaldir config property can now be repeated.
    * Removed deprecated plz query completions --bash_script / --zsh_script flags
      in favour of plz --completion_script.
    * Fixed a bug where Python tests could fail under coverage for non-trivial setups
      (like where the srcs are outputs of rules from another package).


Version 10.3.5
--------------

    * Fix an issue on OSX where the parser engine was sometimes not found when plz
      was invoked through a symlink.


Version 10.3.4
--------------

    * Fix bug where some java tests couldn't load package-private classes when run with
      coverage and without a test package specified due to security boundaries created
      by instrumentation process.


Version 10.3.3
--------------

    * Fixed RPC cache server to serve metrics on --http_port as the flag documentation said.
      --metrics_port still works but will be removed in some future version.


Version 10.3.2
--------------

    * Minor fix to calculation of number of test runs when specifying -n on a flaky test.
    * Updated metrics on RPC cache server.


Version 10.3.1
--------------

    * Small tab completion fixes.


Version 10.3.0
--------------

    * Support for using pytest as the test runner instead of unittest
    * Python tests now supply test files as runtime files instead of packaging into
      the pex itself, leading to somewhat faster rebuild times.
    * `go_library` rules can now be individually opted out of coverage instrumentation.
    * `cgo_library` rules now accept a `pkg_config` argument to determine appropriate
      compiler flags for dependencies.


Version 10.2.0
--------------

    * Support for specifying Go import paths (#249)
    * `plz follow` now works anywhere (you don't have to be in a plz repo)
    * Fixed `sh_binary` which wasn't honouring visibility correctly.


Version 10.1.1
--------------

    * Fixes a long-lurking bug where some config values didn't override properly.


Version 10.1.0
--------------

    * Dynamic support for Python wheel naming schemes, either via name_scheme on the
      rule or by setting it in the config.
    * diff_graphs added to plz tool.


Version 10.0.1
--------------

    * Minor fix to Python import hooks in please_pex.


Version 10.0.0
--------------

    * please_pex rewritten to be more efficient. This is a breaking change for anyone
      who assumed they could import pkg_resources or pex as a global which will no longer
      be available (although these are easy to add using pip_library or python_wheel rules
      if still needed).
    * cgo_library takes a subdir argument that is needed if sources are in a subdirectory
      from the BUILD file (this isn't breaking since it never worked without).
    * Support for assembly (using go tool asm) in go_library and go_binary rules.
    * Removed a number of deprecated config properties.
    * Removed a number of deprecated arguments to builtin build rules (most have been
      deprecated and often nonfunctional for a long time now).


Version 9.5.1
-------------

    * Is now possible to prevent Java tests from consuming stdout / stderr by passing
      -DPLZ_NO_OUTPUT_CAPTURE to Java when running the jars. This isn't exposed through
      plz anywhere though.


Version 9.5.0
-------------

    * New config property, parse.preloadbuilddefs which specifies files to be loaded
      into the global rule context.
    * Moved a bunch of config properties (buildfilename, blacklistdirs, lang, parserengine,
      nonce, experimentaldir and linttool) out of the [please] section since that had
      turned into a bit of a grab-bag of unstructured properties.
      Old ones are still honoured for now but will be removed in v10.0.
    * please_sandbox now mounts a tmpfs on /tmp
    * `plz query print` prints a comment & build label on stdout rather then the bare label
      on stderr.


Version 9.4.3
-------------

    * Fix a subtle bug in junit_runner where it could throw an index exception on
      certain filenames.


Version 9.4.2
-------------

    * Fix to result parsing of Go tests when things log to stdout
      before the first test begins.


Version 9.4.1
-------------

    * Small fix to maven_jar rules on OSX which would sometimes take the wrong path for
      binary artifacts.


Version 9.4.0
-------------

    * Added a c_object rule which lets you compile a C or C++ object file from a single
      input. It's lower-level than c_library so rarely needed, but allows a bit more control.
    * Added protoc_binary which can download a protoc release to use as the protoc_tool.
      Unfortunately there is no equivalent available for gRPC C++ / Python plugins.
    * Pre- and post- build functions are now better optimised about recalculating
      changes after they run. Can significantly speed up building packages with
      many c_library rules in them.
    * Jarcat can now align files to specific size boundaries in a similar way to
      Android's zipalign command.
    * Setting PDEATHSIG on child commands which may help ensure that subprocesses
      (especially workers) terminate correctly.
    * Runtime data of tests is exposed in a $DATA env var.
    * Cleaning of the directory cache is now done in-process rather than in a
      forked subprocess. This allows it to be better synchronised with the main build
      about what it's deleting.


Version 9.3.2
-------------

    * Fixed a bug where data entries of targets would turn up at build time as well.


Version 9.3.1
-------------

    * Fixed command in previous version.


Version 9.3.0
-------------

    * Downloaded versions are now verified against a detached GPG signature.
    * Support for following the progress of a remote build using `plz follow`.
      Requires it to open a port, which is configured in the [events] section
      of .plzconfig.
    * Support for arbitrary env vars in .plzconfig which are available to all build rules.
      Note that these cause rebuilds of all targets on change, because we can't know what
      effects they'll have.
    * Go 1.9 is now required to compile Please.


Version 9.2.3
-------------

    * Fix a bug where C++ rules with a single source didn't always honour includes.
    * Fixed a panic in flags unmarshalling (only when flags were already incorrect,
      but we now handle it more nicely).


Version 9.2.2
-------------

    * Bugfix in go_get which sometimes failed due to not finding any directories to remove.


Version 9.2.1
-------------

    * Fixed one case that didn't correctly honour the `go` command location.
    * maven_jars / please_maven now correctly support the @aar syntax.


Version 9.2.0
-------------

    * Added check_config builtin which helps with asserting that things are
      set in .plzconfig, and ConfigError which is a little more specific than
      ParseError.
    * Support for passing multiple values for Maven repos (in config and to
      rules directly). They're searched in sequence and the rule succeeds as
      long as any one contains the requested artifact.
    * The name / location of the command invoked for `go` is now configurable.


Version 9.1.7
-------------

    * Fixed -o flag to be able to override map fields in config, such as buildconfig
      and aliases.
    * Fixed gc.keep field in config which wasn't being honoured properly.


Version 9.1.6
-------------

    * Fixed a subtle interaction of srcs and deps whereby transitive deps couldn't
      be accessed when specified as both srcs and deps.


Version 9.1.5
-------------

    * Actually fixed Python coverage some more.


Version 9.1.4
-------------

    * Fixed test code accidentally introduced into previous version for Python tests.


Version 9.1.3
-------------

    * Fixed `plz tool lint` which was looking in the wrong place.


Version 9.1.2
-------------

    * Fixed plz_diff_graphs again, pray I do not fix it further.


Version 9.1.1
-------------

    * Quick fix for plz_diff_graphs to honour manual:linux_amd64.
      Doesn't work correctly on OSX yet though.


Version 9.1.0
-------------

    * The 'manual' label can now be applied per-architecture, e.g. manual:linux_amd64.


Version 9.0.4
-------------

    * Fixed plz hash --update for cases where the hashes are on child rules.


Version 9.0.3
-------------

    * Minor fix to plz_maven to allow it to compare multiple repositories correctly.


Version 9.0.2
-------------

    * Fixed some pexes from previous commit where pex_root wasn't set properly.


Version 9.0.1
-------------

    * Better incrementality for python_test / python_binary rules.


Version 9.0.0
-------------

    * Better support for multiple Python versions; should now support python 2.7, 3.4, 3.5
      and 3.6 for bootstrap, and binary artifacts for all of those are written for coverage
      in generated test pexes.
    * Removed a number of esoteric builtin rules: github_file, git_repo, fpm_package and
      fpm_deb. Removed long-deprecated go_yacc rule and `link` argument to filegroup.
      Removed rules are available at github.com/thought-machine/pleasings as build_defs
      files; they will still work equivalently but it's unnecessary to have those built
      into the core.


Version 8.7.5
-------------

    * $(hash ) replacements correctly use output hashes instead of target hashes.


Version 8.7.4
-------------

    * Small fix for `maven_jar`; output filegroup is correctly tagged as binary.


Version 8.7.3
-------------

    * Fix for Debian's pip mess; we now attempt to pass --system to fix it
      if we can identify that we're running on Debian and using pip3.


Version 8.7.2
-------------

    * Fixed some bugs around handling >= in version specifier.


Version 8.7.1
-------------

    * Fixed a bug where building the :all or /... pseudo-targets would fail when
      post-build functions ran and require/provide meant not all the targets were needed.


Version 8.7.0
-------------

    * The protoc_flags argument to proto_library now applies transitively to any
      further protoc_library rules that depend on it, in a similar fashion to C++ rules.
      Since protos always need all transitive dependencies to compile they typically
      require transitive compiler flags as well.
    * Added a decompose function to the build builtins which breaks a build label into
      its package and name parts.


Version 8.6.1
-------------

    * No code change, but is now compiled with Go 1.9.


Version 8.6.0
-------------

    * Optional support for per-test metrics.


Version 8.5.4
-------------

    * Separate build & test sandboxing more correctly.


Version 8.5.3
-------------

    * Expand home paths correctly in secrets.


Version 8.5.2
-------------

    * Corrections to incrementality calculations when toggling targets between
      sandboxed and unsandboxed.


Version 8.5.1
-------------

    * Fixing timeouts in sandboxed actions by passing signals through to subprocesses.


Version 8.5.0
-------------

    * Adds an option for lightweight sandboxing of test / build actions.
      This only works on Linux right now, using a helper binary named please_sandbox
      which must be installed separately (the .deb is still built in this repo).


Version 8.4.4
-------------

    * Fixed issue with java_library rule introduced in previous version.


Version 8.4.3
-------------

    * Set $HOME during builds for some tools (notably Python) that want to know
      where it is and on some machine setups can fail without.


Version 8.4.2
-------------

    * Collect _pb2_grpc.py files for Python grpc_library rules.
    * Minor jarcat fix to improve determinism of outputs for tarballs.


Version 8.4.1
-------------

    * Pass -S when invoking the Python interpreter to byte-compile code.
      Fixes some cases where it failed importing site due to $HOME not being defined.


Version 8.4.0
-------------

    * `--include` and `--exclude` can now take a comma-separated list. These are essentially
      ANDed together (unlike passing the flag multiple times which ORs them).
    * `plz run parallel` limits the number of subprocesses run simultaneously.


Version 8.3.1
-------------

    * RPC cache now writes metadata files indicating who submitted artifacts.


Version 8.3.0
-------------

    * Added `manifest` argument to `java_binary` so you can specify an explicit MANIFEST.MF


Version 8.2.6
-------------

    * Fix to dependency cycle detection which could sometimes take a very long time.


Version 8.2.5
-------------

    * Some changes to how source hashes of other rules are calculated; fixes
      some subtle cases related to file names changing when contents don't.


Version 8.2.4
-------------

    * Internal improvements to hash_filegroup; it is now a known internal rule
      and operates more like normal filegroups (e.g. outputs are links and are
      never cached etc).


Version 8.2.3
-------------

    * Another fairly subtle fix to cc rules.


Version 8.2.2
-------------

    * Fairly subtle fix; add a missing `require` on `cc_static_library`.


Version 8.2.1
-------------

    * Leave the Python interpreter as given in the shebang of the pex, don't
      turn it into an absolute path.


Version 8.2.0
-------------

    * Rewrite of parts of Python rules for better performance
    * Added `static` argument to `go_test` rule, analogous to `go_binary`.


Version 8.1.1
-------------

    * Minor completion fixes to suppress warnings when version differs.


Version 8.1.0
-------------

    * Rewritten completion script; is now activated using
      `source <(plz --completion_script)` which works for both bash and zsh.
      It should also be more robust for more subtle flag combinations.


Version 8.0.5
-------------

    * Potential fix for a rare issue with rules like `hash_filegroup` that sometimes
      weren't marked as rebuilt correctly.


Version 8.0.4
-------------

    * Fix some tool-related errors in `proto_library` and `grpc_library`.


Version 8.0.3
-------------

    * Fix to cgo_library for cases where some of the sources are produced by a genrule.


Version 8.0.2
-------------

    * Small fix to jarcat to add __init__.py files in a couple more cases.
    * Subtle require/provide fix.


Version 8.0.1
-------------

    * Small fix to secrets in previous version which were causing some targets to rebuild
      more often than they should.


Version 8.0.0
-------------

    * The `tarball` rule has been rewritten to be more deterministic. As a consequence it now
      only supports gzip compression; the previous `compression` argument has been removed.
      This is obviously a breaking change for anything that was setting that argument.
    * Build rules with `needs_transitive_deps = True` no longer receive transitive deps of
      their `srcs`, only their `deps`.
      This is again a breaking change although a relatively subtle case that doesn't affect
      many rules; most cases that were using `srcs` and `deps` semantically correctly won't notice.
    * `plz query print` now accepts a `--fields` argument to print only the given fields.
    * `plz run` now has two new subcommands, `sequential` and `parallel` that allow passing
      multiple targets to be run either consecutively or concurrently.
    * Go 1.8 is now required to build the Please repo. Support for targeted Go versions is
      unchanged.


Version 7.12.0
--------------

    * Support for named output groups on rules. Outs can now optionally be specified as
      a dict of name -> outputs, and other rules can collect just the group they want.
      Resolves a few long-standing TODOs around the place.


Version 7.11.4
--------------

    * Fixed some indeterminacy in Go rules to do with the infamous symlinking malarkey.


Version 7.11.3
--------------

    * Fixed bug in RPC server that failed to load certificates from a directory.


Version 7.11.2
--------------

    * Tarballs are now correctly marked as `output_is_complete` so downstream rules don't
      fetch their transitive dependencies as well. Fixes some subtle interactions between
      `tarball` and `sh_binary`.


Version 7.11.1
--------------

    * Fix for performance regression of some setups (mostly large Java trees) introduced
      in previous version.


Version 7.11.0
--------------

    * `pkg_config_libs` is now applied transitively for `cc_library` and `c_library` rules.
    * Fixed a bug in pex writing where the output was not always deterministic.
    * Linter now detects deprecated & missing arguments and for duplicate third-party artifacts.


Version 7.10.3
--------------

    * Disabling tracing on RPC cache server, possible fix for aforementioned
      memory leak.
    * Fix for #208, whereby some C++ settings were not being honoured properly.


Version 7.10.2
--------------

    * Protobuf / gRPC update, testing to see if this helps an apparent memory leak in
      RPC cache server.


Version 7.10.1
--------------

    * Fix to go_get change in 7.10 to make it BSD-compatible.


Version 7.10.0
--------------

    * Add support for classifiers on `maven_jar`.
    * Automatic creation of `plz-out/go`, which contains some symlinks making it
      suitable for setting your GOPATH to to find some things in plz-out/gen (e.g.
      generated code).
    * Fix go_get with dependencies when in declared in repo root


Version 7.9.2
-------------

    * Honour the PATH settings given in plzconfig when starting worker processes.


Version 7.9.1
-------------

    * `proto_library` is a little more robust about some cases involving sources in
      subdirectories.
    * Fixed alwayslink for `cc_library` which was sometimes not honoured.


Version 7.9.0
-------------

    * Rewrite of proto_library and grpc_library rules. It's now possible to configure new
      languages externally for plugins such as grpc-gateway.
    * Add <root>/third_party/ to the default GOPATH
    * Added --shell flag to plz build, which is like --prepare but opens a shell in the
      work directory with an appropriate environment set.
    * Added --update flag to plz hash to rewrite hashes in a BUILD file.


Version 7.8.2
-------------

    * Correctly pass `pkg_config_libs` through `cc_binary` to `cc_library` (#190).


Version 7.8.1
-------------

    * Fixate tarball timestamps #188


Version 7.8.0
-------------

    * Added `plz export` command which exports a subset of the repo and its dependencies
      to an arbitrary directory.
    * Updating has a progress bar
    * Fixed some subtle linking issues in the compiled artifacts.


Version 7.7.1
-------------

    * Fixed flags argument to python_test rules.


Version 7.7.0
-------------

    * Versions in .plzconfig can now be specified as >=. Other patterns aren't (yet?) supported.
    * plz clean honours --include / --exclude
    * plz gc now rewrites / removes files and can be filtered to a list of targets
    * python3 parser engine now (mostly) works
    * Help message output improved
    * Fixed plz query revdeps when given a subpackage path (//src/... etc)


Version 7.6.4
-------------

    * Excluding errors from Python coverage reports; fixes failures when dynamically
      loading modules inside tests which coverage can't find the source for.


Version 7.6.3
-------------

    * Logging a periodic message during long-running tasks so it's possible to see
      what's still going (often the slowest test started a while back and you don't see
      any further messages logged while waiting).


Version 7.6.2
-------------

    * Minor bugfixes


Version 7.6.1
-------------

    * Fix to Istanbul coverage parsing to support instrumenting the source in a different
      target to the test target.


Version 7.6.0
-------------

    * Allow Unicode characters in target names.
    * Fixed some issues with plz cover when using Go 1.8
    * Fixed plz clean so it does not parse the repo unnecessarily.
    * Add current package directory to GOPATH, fixes #184.
    * Correctly exclude BUILD files from glob()
    * Fixed glob() for paths containing some atoms like ++


Version 7.5.0
-------------

    * Support for Istanbul's JSON coverage format.
    * please_pex now packages multiple versions of coverage.tracer which it attempts to
      import as appropriate.


Version 7.4.8
-------------

    * Support for Go 1.8 (specifically the changes to testing.MainStart).


Version 7.4.7
-------------

    * Fixed long-standing subtle issue with packaging Guava in junit_runner.


Version 7.4.6
-------------

    * Fix outs for js grpc_library rules.


Version 7.4.5
-------------

    * Add missing option to JS protos to generate serialisation code.


Version 7.4.4
-------------

    * Fix deadlock in metrics code.


Version 7.4.3
-------------

    * Suppress logging messages from worker processes as they die.


Version 7.4.2
-------------

    * Ensure that worker processes are killed at the end of a build.


Version 7.4.1
-------------

    * Fixed proto JS rules to correctly pick up transitive dependencies.


Version 7.4.0
-------------

    * Fixed please_pex for Python 3.6
    * Fixed go_test rules in the repo root.
    * Added proto.jsdep config option that gets used when building JS protos (#176)


Version 7.3.0
-------------

    * Support for generating Javascript files from a proto_library. Currently the
      generated code is not compiled in any way.
    * Fix to some obscure cases of building filegroups that weren't working properly.
    * Removed -Wextra from default CFLAGS, since many repos don't compile cleanly with it.
    * Falls back to trying to find a Bazel WORKSPACE file if run outside a plz repository.


Version 7.2.0
-------------

    * Support for 'remote' worker processes which are persisted throughout the build.
      These can be used to speed up compile times in cases where the compiler supports this
      and has significant startup overhead. Initial implementation for Java can have up to
      a 4x speedup on sufficiently large build graphs.
    * Added `plz help` command which can show reference information about built-in build rules,
      config settings, etc.
    * The Linux implementation will attempt to download a portable PyPy distribution if
      none of the plugins work against the system versions. Should make it easier to get
      up & running since it's not completely trivial to install.
    * Support for caches to store asynchronously, so further build actions don't have to
      wait on network latency. Retrieves must still happen synchronously, of course.
      The cache request scheme is also a little more efficient and will make slightly
	  fewer requests overall.


Version 7.1.1
-------------

    * Reverted an internal update to guava which broke some Java tests.
      In future we'll look more at compatibility here, ideally it shouldn't matter but it's
      not fully obvious what is best to do.


Version 7.1.0
-------------

    * Support for an "experimental" directory specified in plzconfig. If set it is subject
      to the following rules:
       - Targets in the experimental tree can depend on any other target, regardless
         of visibility constraints.
       - Targets outside the experimental tree can't depend on targets in it, again
         regardless of their visibility declaration.
       - Please doesn't descend into the experimental tree for commands like `plz test //...`
         so tests in there wouldn't generally be run.
    * New command, `plz gc`, which attempts to identify unused targets across the repo.
      "GC roots" are inferred from non-test binary targets, but can also be specified in .plzconfig.
    * `plz query revdeps` no longer prints the targets it was given in the first place.
    * More careful locking when building filegroups to avoid some race conditions.
    * `plz query graph` is now better optimised for the case of outputting the entire graph,
      which should be close to twice as fast as before.
    * filegroup() now honours the `hashes` argument correctly.


Version 7.0.8
-------------

    * Fixed a formatting bug with `plz query print`.


Version 7.0.6
-------------

    * Fixed a long-standing but mysteriously unfound bug in incrementality where we did not
      correctly handle symlinks to directories within a build dir.


Version 7.0.5
-------------

    * Fixed a requires statement on python_binary / python_test rules.


Version 7.0.4
-------------

    * Fixed some small issues around coverage for cgo_test rules.


Version 7.0.3
-------------

    * Fixed dependencies on fpm_deb again, pray I do not fix them further.


Version 7.0.2
-------------

    * Fixed dependencies on fpm_deb rules so they have Depends, not Build-Depends.


Version 7.0.1
-------------

    * Fixed a small bug where get_labels and has_label would return labels below a target
      marked output_is_complete, which would cause some build rules to then fail.
    * Fixed fpm_package which was not correctly honouring the `labels` argument.


Version 7.0.0
-------------

    * Introduced a set of c_library, c_binary rules etc. These parallel the cc_ versions and
      share most of the implementation.
    * cctool config setting renamed to cpptool, cctool now defines the compiler used for new
      c_library etc rules. This is a breaking change.
    * Similarly defaultoptcppflags and defaultdbgcppflags introduced.
    * The defines argument to cc_library now accepts a dict of token name -> value.
    * cgo_library has been extensively rewritten, and now takes separate arguments for srcs,
      go_srcs (Go files that don't import "C"), c_srcs and hdrs. This allows better integration
      with other native rules since it now honours the compiler and linker settings correctly.
    * Timeouts in .plzconfig are now given as durations instead of plain ints.
      The default is seconds but they can be suffixed with units (m, s, ms, etc).
      Interpretation of any existing values is unchanged apart from metrics.frequency which
      was inconsistently interpreted as milliseconds, and will now be interpreted as seconds
      if no unit is given. This would obviously only affect anyone who'd overridden that value.


Version 6.1.2
-------------

    * Some small fixes to Java rules
    * Fixed a bug where two filegroup rules outputting the same rule would sometimes fail
      when built simultaneously.


Version 6.1.0
-------------

    * Added a static flag to cc_binary to attempt to link it statically.
    * Fix cc_shared_object when srcs is empty.
    * Suppress gcc build ids to reduce nondetermism
    * Can now call HasLabel on an arbitrary build label, but it should be a transitive
      dependency of the currently building rule to be safe.
    * All sub-rules of a rule are rebuilt on 'plz rebuild'
    * fpm_deb and fpm_package take a 'dirs' argument allowing passing rules with multiple outputs


Version 6.0.3
-------------

    * Finally fixed cc_embed_binary for OSX


Version 6.0.2
-------------

    * Another small maven_jar fix, related to Android this time
    * plz query deps now filters its outputs by --include and --exclude


Version 6.0.1
-------------

    * Small maven_jar fix.


Version 6.0.0
-------------

    * Outputs are ordered canonically before hashing so tools like buildifier don't change
      rule hashes.
    * maven_jar is split into separate rules for binary & source artifacts, for better
      incrementality & being easier to consume by other rules (since source artifacts are
      generally not part of the build and only there for help for IDEs).
    * cgo_library's 'package' argument has been changed to 'out' to be more consistent with
      other rules (most notably go_library).
    * cgo_library and cgo_test now have a setting in the config describing what they should
      use for CC.
    * go_binary now accepts a 'static' flag that attempts to completely statically link
      the target.
    * plz watch now discards events that do not relate to source files it cares about
      (previously it would fire on any event in a relevant directory).
    * include_defs and the cxx_ forms of the cc_* rules are now only available in Bazel
      compatibility mode (which essentially also covers Buck now too).
    * The version in .plzconfig is now parsed as a semver so must be valid by those rules.
      Shouldn't be a major problem since there haven't been any versions for a long time
      that wouldn't be valid.


Version 5.5.4
-------------

    * Fix a bug where multiple filegroups writing the same file could race with one another.

Version 5.5.3
-------------

    * bugfix: make sh_binary work with and without dependencies
    * sh_binary switched to use the same shebang as the original script (when there
      are dependencies)

Version 5.5.2
-------------

    * Increased maximum message size limit on RPC cache server to 100MB since at some
      point gRPC started limiting it, and their 4MB default is too low for this case.
    * Small fix for plz watch for targets with named sources.


Version 5.5.1
-------------

    * Fixed several potential sources of nondeterminism in various places.


Version 5.5.0
-------------

    * Linter can now suppress warnings over an entire file by adding a line with only
      the suppression comment on it.
    * Support for adding generic properties to the config which makes it less awkward to
      write third-party rules that want to be able to set such things.
    * Log file is always written (there seems to be no real performance penalty)
    * `plz query revdeps` correctly identifies subincludes


Version 5.4.1
-------------

    * Fixed name of please_build_linter to be consistent between .deb and tarballs.


Version 5.4.0
-------------

    * Now ships with a linter to identify potential problems in BUILD / build_defs files.
    * Minor determinism fix to go_get
    * please_pex now only specifies 'python', not the version it was built with.
    * Fixed running single tests in go_test rules.


Version 5.3.0
-------------

    * Some fairly extensive tweaks / cleanups to C++ rules.
    * Added config options for configuring flags for pip in pip_library rules.
    * Fixed generation of __init__.py files.
    * Various _test rules now support being passed flags which are added to their test_cmd.
    * Fixed some indeterminacy in some Java rules
    * Fixed some deps being incorrectly attached to proto rules of the wrong language.
    * Cache servers now accept durations in the form "3m", "10h25m", etc.
    * Cache servers have a parameter to clean artifacts that haven't been accessed in
      a certain period, defaulting to 30 days.


Version 5.2.3
-------------

    * Correct a small bug where visibility labels sometimes incorrectly applied too widely
    * Various Python rules now respect package() directives correctly
    * Fix to pip_library for rules with install_subdirectory=True and names not matching
      the package name.


Version 5.2.2
-------------

    * Added missing protoc tool to proto_library / grpc_library rules.


Version 5.2.1
-------------

    * Reduced cardinality of labels sent to Prometheus so pushgateways don't get
      overwhelmed so quickly.
    * Licence matching is now case-insensitive.


Version 5.2.0
-------------

    * Added support for pushing metrics to a Prometheus pushgateway
    * New flag --show_output / -s for plz test (+cover) to show the output of tests
      even when successful.
    * __init__.py writing moved from parse time to build time.
    * Releases now built with Go 1.7


Version 5.1.0
-------------

    * Initial C++ coverage support
    * Support for coverage in Go 1.7
    * Support for Go 1.7 style subtests
    * Added identifying labels to grpc_library rules
    * Support for optional additional outputs on rules.


Version 5.0.1
-------------

    * Fix bug in java_library which would fail when given both srcs and resources.


Version 5.0.0
-------------

    * `tools` can now accept non-build rule labels which are interpreted as system binaries.
      They are then hashed into the rule so it will rebuild appropriately.
    * Corollary to above: grpcversion and protocversion properties have been removed from config.
      goversion remains since it identifies some compatibility changes for 1.4.
    * please_maven better supports more esoteric details of Maven.
    * `plz watch` honours the previously set build config (i.e. `plz watch -c dbg` invokes
      its subprocesses with `-c dbg` as well).


Version 4.5.1
-------------

    * `plz run` does not print to stdout any more, so things can consume stdout of it
      and only get that of the running target.


Version 4.5.0
-------------

    * `plz build` now outputs more information about what target produced what files, and
      prints to stdout so other programs can consume it if needed.


Version 4.4.1
-------------

    * Fix to `plz watch` which wasn't deduplicating dependencies correctly, so could take
      a very long time to start on deep dependency trees.
    * Performance improvements to `get_labels()`.


Version 4.4.0
-------------

    * Added support for multiple per-config test commands in the same way as build commands.
    * Added hash_filegroup rule which acts like a normal filegroup but creates outputs with
      a name based on their hash, which facilitates having immutable names for artifacts.


Version 4.3.2
-------------

    * Fix a divide by zero bug in coverage stats display.


Version 4.3.1
-------------

    * Fix to java configs from previous version where opt didn't have debug info,
      we have an example of a test that fails in that configuration, so disabling
      until we have more info.


Version 4.3.0
-------------

    * Default compiler options for javac are now settable in config file.
    * Fixes to rare, subtle & quick to anger panics from concurrent map accesses in
      plz and the cache servers.
    * Fix to C++ tests where very rarely the output file got overwritten.
    * Work paths are correctly stripped from cgo_library and go_get rules.


Version 4.2.2
-------------

    * Fix divide by zero in coverage stats.
    * Another RPC cache fix, do not delete outputs when retrieving other files, only
      when retrieving the main ones in the build step.


Version 4.2.1
-------------

    * The RPC cache now deletes outputs of a target to fix a rare case around targets
      that have an output that is a directory and items in it are later removed.


Version 4.2.0
-------------

    * Adds some extra stats to output coverage file.

Version 4.1.0
-------------

    * New command, `plz watch`, which watches the sources of a set of targets for
      changes and rebuilds / re-tests them when they do.
    * Support for generating C++ gRPC code in grpc_library.
    * maven_jar now has a `binary` argument which prompts it to download a
      native binary (.exe in Maven parlance).
    * Some subtle changes to pexes to make them work better when not zip_safe.
    * Bazel compatibility mode now supports $@, $<, etc.


Version 4.0.2
-------------

    * Remove Docker containers more forcibly.
    * Exit code of fatal build failures changed slightly.
    * python_binary now correctly accepts a rule for its `main`.


Version 4.0.1
-------------

    * Fixes some containerised Java tests when calculating coverage.


Version 4.0.0
-------------

    * Some rewrites of Go rules with several advantages:
      - Now compatible with Go 1.7. Previously the linker would panic, apparently when doing
        a dead code pass related to x/net/context. Still a little unsure of details.
      - Should be faster, does some linking instead of copying & gives the compiler / linker
        fewer directories to search.
      - Compilation of binary / test code is separated from the linking step for better
        incrementality.
      There are some consequences from this:
      - The gopath config entry must be set appropriately for libraries to be found.
        Normally the defaults will be adequate here.
      - Similarly, `src` subdirs are no longer implicitly searched in some circumstances.
      - A go_binary rule must declare all dependencies used in its main package explicitly;
        previously it was possible to pick them up transitively.
      These will likely break some code that relied on the old behaviour; although such
      code was probably technically incorrect, it's reasonable to consider this a breaking
      change, hence the major version bump.
    * Config options can be dynamically overridden on the command line,
      e.g. `plz build -o go.version:1.7`
    * Output files are made read-only in most cases.
    * Post-build functions are run once only since it's quite tough to require them to be
      idempotent.


Version 3.6.2
-------------

    * Remove undocumented skip_cache argument to build_rule; filegroups implicitly have this
      and it's nicer not to expose it to anyone else.


Version 3.6.1
-------------

    * Update SRCS for named sources as well as unnamed ones when affected by require/provide.
    * Jarcat has an extra flag to allow renaming directories within a zip file (currently
      not used by any builtin rules).

Version 3.6.0
-------------

    * add a `src_dir` argument to java_library
    * allow attaching deps to a remote_file
    * fix `plz clean` background bug
    * #107 Introduce https and mutual auth support to RPC cache
    * #108 New query subcommand, `plz query whatoutputs`, which queries the current graph and returns the
      target responsible for the provided file(s)


Version 3.5.0
-------------

    * New command, `plz rebuild`, which behaves like `plz build` except that the named targets
      (but not their dependencies) are always rebuilt.
    * `remote_file` and `maven_jar` rules now print the URL before fetching, to make it a
      bit easier to follow what they're actually trying to do if they fail.
    * The Python hash seed is fixed before initialising the interpreter, so dict / set iteration
      order should be deterministic between runs. The security implications aren't really a
      concern in this context but repeatability is.


Version 3.4.1
-------------

    * fix for type checking script when run through python3
    * Don't try to retrieve results from containerised tests that have no_test_output = True.
    * Private targets are omitted from `plz query somepath`.


Version 3.4.0
-------------

    * `plz run` and `plz test` now default to the current package + subpackages when run
      without arguments. `plz clean` and `plz query` still retain the old semantics of the
      entire repo.


Version 3.3.0
-------------

    * Build / test commands are now run with "-o pipefail" so you don't have to specify
      yourself. This could potentially break any rules that relied on the default
      behaviour although it's unlikely that anything did that deliberately.
    * Sources are deduplicated on build rules.
    * Fixed a minor bug where plz run would incorrectly pass the --assert_version flag to
      the target if it updated automatically.
    * RPC cache now gives up after a sufficient number of failures so it doesn't drown
      you in messages on long builds.
    * If any of the entries in `srcs` in a build rule are None, they're skipped. This makes
      it easier to write some rules with optional inputs.
    * Added a config property for the default maven repo.
    * Output file from java_binary is now configurable.


Version 3.2.0
-------------

    * Added type checks on arguments to build rules, because the errors can be
      obtuse if you get them wrong.
      Strictly speaking this is compatible with the previous release since it simply
      enforces documentation, although there are subtle cases that would have been
      accepted before that no longer are.


Version 3.1.3
-------------

    * Die immediately after a build finishes with unsuccessful targets; this matches
      previous behaviour in the face of --failing_tests_ok.


Version 3.1.2
-------------

    * When a target fails, plz now waits for all other building targets to conclude
      before terminating. We expect that over repeated builds this will be faster
      because it won't keep abandoning half-complete tasks.
      Compiler feedback should show immediately, and you can Ctrl+C it to stop whenever.


Version 3.1.1
-------------

    * Fixed `plz run` on java_binary rules not marked as self_executable.
    * Various minor cache fixes. Access times should be correctly regenerated
      on restart now.
    * Initial work on FreeBSD port; is now mostly buildable there.


Version 3.1.0
-------------

    * Extra GOPATH additions for cgo_library / cgo_test are configurable through
      [go]gopath setting. We typically use third_party/go for this.
    * pip_library commands changed a bit to try to make it more deterministic.
    * When artifacts fail hash verification after cache retrieval, attempt to build
      locally instead of failing.


Version 3.0.2
-------------

    * Some caching fixes; directory entries are now retrieved correctly between restarts
      of the RPC cache server.


Version 3.0.1
-------------

    * Fix to pex generation from previous version where it could sometimes add extraneous
      __init__.py files which conflicted with real ones added later.


Version 3.0.0
-------------

    * Rewrite of cffi parser interface to use cffi's new embedding
      (see http://cffi.readthedocs.io/en/latest/embedding.html).
      This means that we can use cpython or pypy as engines, and build both as separate
      .so's which we attempt to dlopen() at runtime. The advantage of all this is that
      it becomes possible to run plz with CPython + cffi, which is quite a bit more
      straightforward to get installed in the way we need on Linux at present.
      PyPy should continue to work for anyone who had it working already though.
    * Builtin rules no longer call zip and jar, because those produce nondeterministic
      output due to encoding timestamps into their output. They now use jarcat instead.
      Note that this is a breaking change for some maven_jars rules whose hashes will change.


Version 2.4.0
-------------

    * Minor fixes to Python coverage code
    * Added a 'native' attribute to maven_jar which attempts to fetch a .jar with
      native code. It also now takes 'hashes' since those might of course have
      different ones on each architecture.
    * Minor fixes to reverse deps queries.


Version 2.3.5
-------------

    * Better identification of dependency mediation in please_maven
    * Rewording of version upgrade message.


Version 2.3.4
-------------

    * Incrementality fix for some cases where targets weren't correctly rebuilt
      if their dependencies had been cached.


Version 2.3.3
-------------

    * Fix for sh_binary which used an incorrectly formatted version of sed.

Version 2.3.2
-------------

    * Fix where existing partial outputs were sometimes not removed correctly.


Version 2.3.1
-------------

    * Fix for cc_static_library which was broken in previous version.


Version 2.3.0
-------------

    * Added Bazel compatibility mode; can be configured in .plzconfig and alters several
      aspects of parsing behaviour to better mimic Bazel's behaviour. This allows parsing
      of simple Bazel projects, complex Skylark rules are a long way from working at this
      point though.
    * cc_library gained new arguments, `includes` and `defines` which add directories to
      the include path and define preprocessor symbols respectively. These are transitively
      applied to dependent cc_library rules.
    * cc_test has a new argument, `write_test_main` which defaults to true. If set to False
      it does not provide a main() and you must write it yourself.
    * java_binary no longer has to have main_class specified.
    * cc_library generates (possibly) more sub-rules to compile each of its `srcs` separately,
      which is significantly faster for large numbers of inputs.
    * filegroup now has an internal implementation rather than being done in bash. This
      allows some things internally to be done more robustly and avoids errors from command
      line length limits for very large filegroups.
    * `plz query somepath` now respects :all labels.


Version 2.2.1
-------------

    * Reworked ordering of tasks during build; should make little difference to overall time
      but parses will happen relatively faster so the estimated total task number will rise
      faster. This is more akin to the pre-1.8 behaviour.
    * Fix bug where targets with need_transitive_deps = True could incorrectly receive tools
      of their indirect deps in their tmp directory.


Version 2.2.0
-------------

    * Python targets now have a `stripped` build config in which the .py files are stripped out
      and only .pyc / .pyo bytecode files included in the .pex.
      We're considering making this the default behaviour for `opt` but if we do that will be
      left for a future major revision.


Version 2.1.2
-------------
    * Fixes one more bug with sh_binary where paths were taken to be relative when they were absolute.

Version 2.1.1
-------------
    * Fixes bug with sh_binary not ignoring the main script properly when generating the tarball.

Version 2.1.0
-------------
    * Adds additional features to sh_binary to make it more complete. sh_binary now creates
      a single bash script. This script contains all dependencies as well as the main
      script to be executed. When the sh_binary is run, it extracts all the files
      to the current directory and finally executes the main script.

Version 2.0.0
-------------

    * We are going to try doing semver from here on, so this release increments the major
      version due to several very slightly breaking changes.
    * More convenient output on incorrect hashes.
    * C++ tests now honour being given a specific test to run (The current implementation
      of this requires C++11, we could write it in a more tedious way if it's a problem).
    * Reading stdin for build labels is now done asynchronously, so Please will build initial
      targets from a relatively slow supplying process immediately rather than waiting for them all.
      `plz query affectedtargets` and `plz query completions` still retain the old behaviour
      for technical reasons (aka. laziness).
      It is also slightly more robust about the input it accepts (esp. around spaces).
    * `plz query alltargets` now does not display hidden targets (those starting with an
      underscore) by default. It has a new `--hidden` flag which will show them as well.
    * `subinclude()` can now be given a URL to download build defs from. Downloads will be
      deduplicated and run as `real` build targets so the parse remains fast (or at least
      as fast as possible given that something has to be downloaded for it to proceed).


Version 1.8.2
-------------

    * Fix interactive display on versions of iTerm (2.1.x) that don't support the
      ANSI CPL instruction.
    * Go version in config now only affects hashes of Go targets. This alters the
      general hash calculation logic so unfortunately will force rebuilds of all targets -
      this is unavoidable but will lead to better incrementality in future.
    * Suffix temp build directories with #.build (and tests with #.test instead of just .test)
      to avoid cases where they clash with paths to sub-packages that happen to
      begin with the same name.


Version 1.8.1
-------------

    * Support for loading arch-specific config files, .plzconfig_linux_amd64 etc.
      Allows tweaking config for different machine types.


Version 1.8.0
-------------

    * Reworked internal queuing implementation which prioritises `subinclude()` targets
      more highly. `subinclude()` itself also caches compiled code.
    * New feature, `plz query reverseDeps` which finds reverse dependencies of a target.
    * `plz query graph` output has more features in it.
    * new setting in config, blacklistdirs, which excludes certain directory names from
      being walked by `plz build ...` and the like.
    * Upgraded python coverage package.
    * Upgraded gRPC implementation. Note that this is a breaking change for the RPC cache
      so that will need to be upgraded in sync with plz itself.
    * Allow passing build target expressions to --exclude.
    * Fix for some relative implicit labels passed on the command line which sometimes
      incorrectly lost a slash.
    * Terminal window titles are now updated as build progresses.


Version 1.7.3
-------------

    * Support for maven_jars fetching specified optional dependencies via 'optional' argument.


Version 1.7.2
-------------

    * Fix to Java rules which were subtly broken in previous version.


Version 1.7.1
-------------

    * Additional flag, `--include_file`, to `plz cover` which filters coverage output to
      just the given files.
    * maven_jars now has two new arguments, `combine` which combines its transitive deps
      into a single uberjar and `hash` which sets the hash for that uberjar.
      The intention here is to make it more lightweight to set a hash for a single target
      rather than having to provide potentially many individual hashes.
    * Fixed aliases which were accidentally broken by some flag changes.


Version 1.7.0
-------------

    * Reworking of error handling in parsing code. Previous code used to panic back through
      the parser which deeply upset PyPy (often we got away with it because we'd die before
      anything else could go wrong, but not always). Now errors are returned to Python and
      reraised as exceptions there - which implies that it's possible for BUILD code to
      catch and handle such exceptions, although I don't recommend writing them that way :)
    * Optimised glob() a bit so it doesn't descend into directories that will never match
      the given pattern.
    * Fixed compilation of clang tests with python3
    * Officially ban subincluding of local targets (didn't actually work before anyway)
    * `plz clean` now cleans sub-targets as well
    * Banned double slashes in build labels which was being incorrectly let though, leading
      to some very strange failures.
    * Ensure paths are relative in hash memoisation - improves hit rate by about 30% and
      is a performance improvement (although probably not very noticeable in most cases).
	* `plz cover` now has a `--line_coverage_report` / `-l` flag to produce line-by-line
      coverage output for its affected files.


Version 1.6.7
-------------

    * Fix for go_src part of proto_library; don't think we exercise that internally
      anywhere any more, but it is now a bit less broken than before.


Version 1.6.6
-------------

    * Fix to flaky tests; don't count as failures once success has been reached.


Version 1.6.5
-------------

    * BuildGraph now uses a RWMutex instead of a normal Mutex for slightly better concurrency.
    * Added `plz hash` command which calculates the current hash for targets.
    * Jarcat now does proper unsigning of jars always.


Version 1.6.4
-------------

    * `glob()` now correctly finds files in the current directory that are prefixed
      with **, ie. `glob(['**/*.png'])` matches `a.png`.


Version 1.6.3
-------------

    * Proto rules now correctly set up C++ headers / sources separately which fixes
      compilation with Clang.


Version 1.6.2
-------------

    * Fix for proto rules where grpc_library sometimes did not add a plugin correctly.


Version 1.6.1
-------------

    * Various tools now honour the please.location setting correctly.


Version 1.6.0
-------------

    * RPC cache now initialises asynchronously so if it's not available the
      build will not hang waiting for its connection to time out.
      This is a breaking addition to the cache's interface since it is now required to
      implement the gRPC health check (from google.golang.org/grpc/health) so
      v1.6+ of the server will have to be deployed to support v1.6+ clients.
      It will remain backwards compatible for older clients though.
    * Plz now comes with a wrapper script which can be committed and will fetch
      plz and invoke it. Makes it easy to use for people who don't have it
      installed already, ala Gradle's gradlew script.
    * The default location for tools is in ~/.please instead of /opt/please,
      which again makes it easier for people who don't have the tools already.
    * --max_flakes flag has been removed in favour of --num_runs always making
      a test run exactly that many times. Hopefully this is less confusing.
    * `query alltargets` now obeys the original targets and --include / --exclude better.
    * There is now a `system_library` rule which can collect files from outside the build tree.
      Correspondingly, there is a `system_srcs` attribute on `build_rule`.


Version 1.5.12
--------------

    * Altered exclusion rules for java_binary / java_test to better support native libraries.


Version 1.5.11
--------------

    * Write explicit failures into unit test output on timeout etc. Needed for some downstream
      tools that don't check attributes like 'failures' and need explicit entries.


Version 1.5.10
--------------

    * Fix for multiple caches which could sometimes panic with a negative waitgroup.


Version 1.5.9
-------------

    * grpc_library now correctly honours the 'languages' argument.


Version 1.5.8
-------------

    * Various fixes to RPC cache. Use base64 URL encoding and short hashes.


Version 1.5.7
-------------

    * Adds `go generate` support. You can now call it by adding `go_tools` to your go_library.


Version 1.5.6
-------------

    * Fix bug where golang tests pass if they panic since the exit code was being ignored
      after piping the command to tee.
    * 'plz query completions' now treats \: as equivalent to : to work around #18.


Version 1.5.5
-------------

    * Another similar fix for ForkExec call to cache_cleaner.


Version 1.5.4
-------------

    * Fix to cache_cleaner which wasn't always cleaning correctly.


Version 1.5.3
-------------

    * Fix tarballs to be consistent about /opt/please/please_go_test.


Version 1.5.2
-------------

    * Fix incorrect warning on tools that have multiple outputs.


Version 1.5.1
-------------

    * Fixed a bug where importing of libraries in test main files could be indeterminate
      if you had multiple libraries of the same name in different subdirectories.


Version 1.5.0
-------------

    * Support for build configurations, activated by '-c opt' and '-c dbg'. Those two
      are provided by default on C++ and Go rules; other languages can stick with a
      single command at present, use those and / or define their own configs.
    * The 'strip' config option and go_binary argument has been removed. It's now
      implicit in -c opt for go_binary.
    * C++ config options have changed a lot; the test / normal dichotomy has gone, we now
      have defaults for dbg and opt and a default set of ldflags. -lunittest++ is applied
      automatically by cc_test.
    * --no_cache has been changed to --nocache for consistency.
    * The -c argument to plz clean is now removed. Default is to clean the cache,
      and it honours the top-level --nocache flag if you don't want to clean that.
    * python_library now has an 'out' argument where you can set the name of the output
      pex. It defaults to the same as before.
    * More reliable returning of test output when tests time out.


Version 1.4.9
-------------

    * 'plz clean' now backgrounds itself when possible, in which case the user can
      continue with other tasks with no delay.
    * Added licenses() builtin function for Bazel compatibility; it roughly parallels
      theirs in setting the default licence for all targets in a BUILD file. Implicitly
      we can also now use package(default_licences = [...]) which is equivalent.
    * + is now allowed in names of build rules.
    * Fixed .deb package to include plz_diff_graphs.


Version 1.4.8
-------------

    * Fixed a bug where Please would sometimes panic during coverage display.
    * 'plz query graph' now includes all transitive dependencies of requested targets
      as well as the targets themselves.


Version 1.4.7
-------------

    * Quoting of expansions in shell commands now only happens when needed.
    * $PKG variable is available to test commands as well.
    * $ROOT_DIR variable is no longer available to any commands.


Version 1.4.6
-------------

    * Added a 'tools' attribute on genrules which refers to things used to build a rule
      which aren't copied into the temp directory.
    * Fixed bug where filegroup() didn't correctly honour the binary flag.


Version 1.4.5
-------------

    * Fix debs to have .jar suffix correctly.
    * cc_library now correctly supports multiple srcs. As a result it produces a single .a
      always instead of .o files. 'archive' attribute is now deprecated.


Version 1.4.4
-------------

    * Make timeout for retrieving Dockerised test results configurable, and default to
      a higher value.
    * Remove results file before running plz test or plz cover.
    * Add configurable extensions which can be excluded from coverage.


Version 1.4.3
-------------

    * Adds support for nested tests in golang (e.g. test suites).


Version 1.4.2
-------------

    * Add a test failure when the test returns nonzero but produces a valid output
      file with no errors, so we always show at least one in the summary.
    * Add a cc_static_library rule which archives a transitive set of C++ rules.
      Essentially it's the static counterpart to cc_shared_object.
    * 'plz op' repeats the previous operation.
    * Non-zip-safe pexes are now always extracted at startup, even if pex thinks
      it doesn't need to. Fixes a bug where incrementality wasn't always correct
      because we modify the .pex file after pex has built it.
    * New flags --colour and --nocolour allow one to force coloured output on/off.


Version 1.4.1
-------------

    * Temporary directories are now cleaned after successfully building or testing.
    * Minor updates to interactive console display.
    * Fixes to make cgo_library more robust.
    * Small fix to cc_embed_binary which no longer requires passing deps if the src
      is generated via a genrule.


Version 1.4.0
-------------

    * java_binary and java_test now generate a self-executable .jar file and no
      wrapper script, so the _name#jar sub-rule is no longer generated.
    * A number of deprecated arguments have been removed; for example
      source_under_test, headers / exported_headers, etc.
    * Added a global config parameter to allow enabling/disabling PyPI globally.
    * Slightly stricter type checking of arguments to build_rule
    * All output of build steps now prints to stderr instead of stdout
      (plz query still prints to stdout but plz test / plz build don't)
    * Config hashes are now much more granular; only things that affect something
      global are used in the calculation of the config hash. Changes to tools etc
      are assumed to be handled by the rule hash of any rule using that tool.
    * Test container settings in the global config only affect containerised
      test rules and only at test time.
    * Added a nonce field to the config which we'll use to invalidate the config
      hash when necessary. This might happen at any minor release but should
      be rare that we'll have to change it.
    * Interactive display should be a bit nicer on some non-vsynced terminals
      (xterm? not entirely sure what the conditions here were).
    * 'query graph' now accepts a list of targets to filter to.
    * Support for building with python3.
    * Initial support for aliases in config file; the implementation is a little
      agricultural but they seem to work so far, within their limits.
    * Fix a bunch of small bugs too numerous to mention here.


Version 1.3.9
-------------

    * go_get now takes a `revision` argument which allows pinning libraries to a
      particular git revision. `install` now has no effect on it.
    * Adding new targets to a package in post build functions now takes effect
      immediately, rather than waiting until the end of that post build function.
      Fixes some subtle race conditions around dependencies.


Version 1.3.8
-------------

    * Fixed several (benign) race conditions in the interactive display in the interest
      of having it run cleanly under go's race detector.
    * Bunch of small cleanups suggested by gometalint.
    * Add fpm_package and fpm_deb rules and use those to build packages instead of
      top-level script.
    * Fix for test result hashes; make them the same length as others so the cache cleaner
      finds them ok.
    * Fixed a hash calculation bug that would sometimes silently fail when the sources of a rule
      included a symlink to a directory.


Version 1.3.7
-------------

    * Rules that specify a source dependency on a single output of another rule are now
      honoured correctly when being built into a larger rule (eg. a python_library into
      a python_binary, as happens often with protos).
    * Added option to proto config to rewrite package of Python proto modules.


Version 1.3.6
------------

    * please_maven now correctly fetches all transitive dependencies, not just one level.
    * Added org.ow2.asm:asm-debug-all as a dependency for the test runner which was missing.
    * 'plz query graph' now outputs labels in the graph dump.
    * plz_diff_graphs can now include/exclude based on labels.


Version 1.3.5
-------------

    * Fixed a couple of subtle internal race conditions. Suspect that most but not all
      cases were benign, and it's nicer to have them gone, albeit at the cost of more
      lock contention - not that it seems to matter particularly.
    * More robust Python licence detection.


Version 1.3.4
-------------

    * More informative error messages when parsing fails due to not finding a package.
    * Defaults for repeated entries in the config files now only take effect if nothing else
      is specified (ie. the entries in the config replace instead of appending). This
      was always the intended behaviour although it's technically breaking.
    * Added 'plz query graph' command that produces a (currently fairly minimal) JSON
      representation of the graph that other tools could consume.
    * Added a tool to diff two graphs produced by new 'query graph' command.


Version 1.3.3
-------------

    * Fix to filegroup rules at the top level of the repo.
    * Fix some hash instability in at least some rules.


Version 1.3.2
-------------

    * Support for autodetecting licenses for packages found in a maven_jars rule.
      Still pretty experimental since it's surprisingly hard to handle all the maven output
      (maybe having someone write this who knew more about Maven would have been an idea...)
    * Fix a parse bug where we need to transitively pass the requirement to build a target
      that's needed for parse.
    * Correct bug in output where it would sometimes crash in rare circumstances (attempting
      to print build output of a target that wasn't built due to 'manual' label or similar)


Version 1.3.1
-------------

    * Added possibility for targets to depend on a single output of another rule,
      using the format //package:target:output_file. This isn't accepted as a command
      line input and is still a little experimental. Proto rules have been changed to
      use it instead of generating #only sub-rules.
    * Changed detection of multiple rules outputting the same file to parse-time detection
      instead of unreliable build-time detection (this requires the proto changes above).
    * The exec statement is now banned from the build language.
    * When multiple caches are configured, artifacts fetched from a lower-priority cache
      are stored into a higher-priority cache (eg. RPC cache -> dir cache).
    * Support for associating licences with build targets. Can specify which to accept
      and reject in the config.


Version 1.3
-----------

    * Add support to go_binary for stripping symbols.
    * Added self-cleaning to HTTP cache
    * Added RPC cache implementation.
    * Fixed "source file not found" error in some (fairly complex) cases
      (I think, this one has been a long battle...)
    * Changed jarcat to proper logging & go-flags library
    * Implement file copying to dir cache via copy+rename to avoid errors when files
      are half-written.
    * Building with PyPy 4.0
    * Redid locking around parsing, should allow for better parallelism there
      (although I think PyPy is still limited by its GIL).
    * Introduced new builtin build function subinclude() which is similar to include_defs
      but can be visibility controlled and consumes a real build label instead of basically
      a file path. Will eventually remove include_defs since it can't be visibility controlled.
    * python_binary rules can be depended on by python_library rules and imported as though
      they were a python_library.


Version 1.2.7
-------------

    * Tag test results files with their runtime hash so they are correctly re-run
      when runtime data files change
    * Small fix to cc_shared_object which was incorrectly marked as binary.


Version 1.2.6
-------------

    * Propagate require / provide through exported_deps when producing sources.
    * Add zip_safe as a flag on python_library and pip_library. python_binary and
      python_test will pick this up if it's in their transitive dependencies and
      mark the pex appropriately.
    * Add a flag to control level of messages logged to file output separate from
      normal verbosity.


Version 1.2.5
-------------

    * Import ban in Python changed to work by inspecting the AST instead of hacking
      __builtins__. Removed some hacky global state changes as a result and added
      caching of bytecode which seems quite a bit faster for parsing.
    * Add flag to print commands as they're run (CEO request).
    * Use directories under /tmp for containerised tests rather than top-level ones
      so they can be run as non-root users within the container.


Version 1.2.4
-------------

    * Add detection of multiple rules outputting the same files. This is trickier
      then one might think due to things like filegroup() and python_library()
      repeating their outputs again so must be done at build time (not parse time).
    * Make output trace file configurable.
    * Delete test results file at plz startup.
    * Disallow : or / in an incoming target name.
    * Small cleanup which results in Java source / target levels now being strings.


Version 1.2.3
-------------

    * Small bugfix: named sources that are build labels now automatically add the
      dependency in the same way that anonymous sources do.
    * Fix a case where post-build rules weren't always linking up deps properly.
	* Rename split_path_ext to just splitext, it's more natural.


Version 1.2.2
-------------

    * Small bugfix: always attempt to kill container, even if we can't retrieve results.
    * Add basename, dirname, split_path and split_path_ext as global utility functions.


Version 1.2.1
-------------

    * Docker change: rather than attempting to run as the current user which often
      has weird effects because they're not known within the container, run as root and
      extract the files afterwards with 'docker cp' to avoid root ownership.
    * Added timeout and container arguments to sh_test which were missing
    * Small improvement to 'plz query print' to not repeat things that are implied
      (requires -> labels, exported_deps -> deps).
    * Strip all leading underscores for dependent rule names in interactive display
    * Remove PY_PKG variable, just replace it in bash
    * OP has merged my go-flags patch upstream, it's no longer needed
    * Allow specifying the output name of a go_library rule
    * Add labels arg to filegroup


Version 1.2
-----------

    * Support for acquiring the transitive set of labels a rule & its dependencies possess.
      Useful for implementing properties that affect the final target, eg. cc_library
      linker flags being applied to the final cc_binary.
    * cc rules: change 'headers' and 'exported_headers' to just 'hdrs', which are always
      exported because that's generally what you want. Will consider adding 'private_headers'
      or similar later if there's a need but for now I'd prefer the default to be obvious.
    * Incremental pex compilation; every python_library rule generates a little .zip file
      of just its stuff which get merged together in the final rule. Quite fiddly to get
      right but the speedup is dramatic.
    * Some rewriting of Go rules to make them more robust for complex libraries & go_get.
    * Added an exclusive file lock to two plz processes running in the same repo will
      not run simultaneously (unless you pass --nolock).


Version 1.1.4
-------------

    * Added jvm_args parameters to java_test and java_binary so it's possible to
      customise JVM startup.


Version 1.1.3
-------------

    * `plz update` now ignores the selfupdate field in config and always updates.
    * Added new subcommand, `plz query output` to get the outputs of a rule.


Version 1.1.2
-------------

    * Fix passing relative targets on command line; was accidentally broken by parsing
      build labels earlier on in the initialisation process.
    * Refactor of the underlying zip writer stuff in jarcat. Doesn't make much difference
      yet but is a step towards some future work.
    * Add a count of number of targets done / total which better approximates progress.


Version 1.1.1
-------------

    * Upgrade to go 1.5, at last fixed the PyPy issue with a couple of lines of Go.
      Note that this is a breaking change for developers (but invisible to users of plz,
      so we're doing it at a minor version).
    * Share env-building code between build & test, and log more for tests.
    * Fixes to http cache.
    * New command, 'query affectedtargets', which is similar to 'query affectedtests' but
      finds all targets, not just tests. 'query affectedtargets --tests' obsoletes
      'query affectedtests' which will be removed at plz 1.2.


Version 1.1
-----------

    * Major version bump because numbers were getting too big.
    * HTTP cache ready for early adopter testing
    * Can set containerisation settings on a per-target basis and control the user Docker
      runs as within the container.
    * Changed $(location ...) style substitutions to use relative instead of absolute paths
      so they can be shared via the HTTP cache.


Version 1.0.13
--------------

    * Expand ~ to home path when building targets.


Version 1.0.12
--------------

    * Initial implementation of HTTP cache, not yet ready to use.
    * Add a little more logging when targets fail to build, which we've seen a few times.
    * Some suggestions from go vet, one of which may improve locking potentially
    * Ensure rule outputs are added uniquely.


Version 1.0.11
--------------

    * Fix for cases where sometimes parse errors would not be reported.
      Turned out to be related to disallowing imports, so we attempt to
      allow them during compilation (but not execution) of code.
	* Update of go rules to be more correct and hopefully streamlined around go_get.


Version 1.0.10
--------------

    * Added RunArgs to [docker] section of config file to allow passing it
      arbitrary extra arguments.
    * Rewrite of parts of the Go rules to more correctly support targets
      in subdirectories.
    * add_out() function introduced to build language which can be used
      to annotate a target with additional outputs, particularly during
      post-build function. Still slightly experimental.


Version 1.0.9
-------------

    * 'query completions' can now be filtered to particular targets, so it will
      only complete binaries for 'plz run' and tests for 'plz test' or 'plz cover'.
    * Update by downloading tarballs instead of individual binaries. This deprecates
      the --extra_tools flag but we will keep it for compatibility for a while.
    * Fix for query affectedtests so it correctly excludes manual tests.


Version 1.0.8
-------------

    * Bugfix, 'query affectedtests' not always reading from stdin properly.


Version 1.0.7
-------------

    * Bugfix, previous version mistakenly changed 'query input' to 'query inputs'.


Version 1.0.6
-------------

    * Remove SRCDIR variable and built-in supporting code. No longer needed
      for compatibility and the symlink causes problems for some rules because
      it introduces a diamond into the folder structure.
    * Remove __import__ builtin from parser so build scripts can no longer
      import external modules.
    * Added a test_only attribute for library rules that ensures they can only be
      used by tests or other test_only rules.
    * python3 compatibility fix in test_main.py
    * Added a package() function that can be used to set various global config
      things (probably most usefully, default_visibility).
    * Flag parsing refactor; should mostly be invisible externally except that
      `plz clean cache` is now `plz clean --cache`.
    * Selective test running, eg. `plz test //test:my_test my_test_function`
    * --num_runs flag to force a test to run multiple times.
    * Some refactoring & bugfixes to require/provide.


Version 1.0.5
-------------

    * Fix crash in output code when window is very small vertically.
    * Support for Go 1.5. Seeing some issues that may be caused by it so
      not upgrading just yet.
    * Populate Java test class names correctly.
    * Display elapsed time for each test.
    * Fix for require / provide stuff still building unnecessary targets
      (they weren't depended on, but still got built).
    * Fix caching targets when run with plz cover.
    * Support for pseudo-targets like :all and ... with plz clean.


Version 1.0.4
-------------

    * Fix crash when running tests with --no_cache.
    * Nothing else, quick release to fix crasher.


Version 1.0.3
-------------

    * Test results are now cached & retrieved as other build artifacts.
    * Hashes are verified after retrieving from cache
    * Targets retrieved from cache are marked as unchanged when appropriate
    * Added a join_path builtin to the build language.
    * Remove all outputs after a build fails.
    * Attempt to import Python test modules ourselves before relying on unittest's
      detection, which produces misleading error messages if an ImportError is
      thrown while attempting to load the test.
    * Display depending target when we encounter a missing dependency.
    * If build fails due to an apparent dependency cycle, attempt to detect and
      print the cycle.


Version 1.0.2
-------------

    * Generate a python_library rule behind a python_binary to symlink
      the main .py file into plz-out. Fixes certain run issues.
    * Set ROOT_DIR variable while running tests.


Version 1.0.1
-------------

    * Support for skipping tests in go_test
    * Limit length of printed lines in interactive shell mode so
      output doesn't go berserk when window is too narrow.
      (it's still not great at being resized down but at least it
       stabilises after the window is reduced).
    * Fall back to attempting to copy files if hardlink fails.


Version 1.0
-----------

    * f1rst post!!!1!one
