ElasticSearch 0.19.9

Closes #14443.

Signed-off-by: Adam Vandenberg <flangy@gmail.com>
XCodeDependency: Clarify that Xcode.app is needed

Clarify the error message arising from XCodeDependency so that users know
XCode.app is needed and that just installing the CLT does not count as
"installing XCode".
XCodeDependency: Things that call xcodebuild

Anything that calls `xcodebuild` needs a full install of XCode.app. Two
formulae ommitted from this patch:

  - `fuse4x_kext`: Everything that depends on the kernel extension can be
    compiled by the CLT. Therefore, this formula is bottled and XCode is only
    needed to produce the bottles.

  - `graphviz`: XCode is only used to create GraphViz.app which is not used by
    any of the things which depend on `graphviz`. Creating the app should be
    made into an option.
graphviz: Use options DSL
graphviz: Building GraphViz.app is now optional

Building GraphViz.app requires a full install of XCode.app so building it
by default breaks the installation for users who only install the Command Line
Tools.

Fixes #14431.
Extend Set to allow repetition (*)

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Provide a common interface for Dependency and Requirement

Introduce a new Dependable module that provides useful interrogation
methods for Dependency and Requirement. These methods are mapped to
dependency tags in formula (:build, :optional, and :recommended).

Previously only Dependency objects recorded tags; this allows
Requirements to do the same.

Move Requirement subclasses to a separate file.
Formula#recursive_dependencies

This behaves like recursive_deps, but the resulting list consists of
Dependency objects instead of Formula objects. The list maintains the
installable order property of recursive_deps.

While in the area, add some comments clarifying the purpose of related
methods.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Return the block value in ARGV.filter_for_dependencies

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
FormulaInstaller: disambiguate show_header usage

show_header should default to false (we don't want to display it in the
case of installing a single formula without dependencies), but it only
worked this way by accident.

The assignment "show_header = true" creates a local variable named
show_header, and in the case where needed_deps is empty and this
assignment is not actually executed, the latter usage evaluates the
local variable instead of calling the method.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
FormulaInstaller: factor out requirement checking

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
FormulaInstaller: factor out dependency installation

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
FormulaInstaller: skip build-time deps for bottles

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
missing: don't report build-time deps

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
FormulaInstaller: implement installation locks

FormulaInstaller now attempts to take a lock on a "foo.brewing" file for
the formula and all of its dependencies before attempting installation.

The lock is an advisory lock implemented using flock(), and as such it
only locks out other processes that attempt to take the lock. It also
means that it is never necessary to manually remove the lock file,
because the lock is not enforced by I/O.

`brew uninstall` learns to respect the lock as well, so that kegs in the
dependency tree of foo can't be removed when another process is
installing foo.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Respect operation lock in link and unlink

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Dependency#to_formula and associated helpers

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Dependency#expand_dependencies

Move Formula.expand_dependencies into the Dependency class, and teach it
to skip optional or recommended deps when appropriate.

Move Formula.expand_deps and Formula#recursive_deps into compat, because
these methods do not respect the new optional and recommended tags and
thus should no longer be used.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Formula#finalize_dsl

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Add support for optional and recommended deps

Optional deps are not installed by default but generate a corresponding
"with-foo" option for the formula. Recommende deps _are_ installed by
default, and generate a corresponding "without-foo" option.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>