v1.21.1.beta.1 - 2014/11/17

  Bug fixes:

  - Republishing a package did not clean out no-longer-extant files from the
    runtime directory.

  New feature:

  - New --add synonym for the --append option.  A slight fix for the misnomer
    that the latter option is.

  Miscellaneous:

  - Include file size in checks for whether a local file is up-to-date for
    copying.
  - Command-line options listing in --options and --help-long output is now
    broken up into sections.
  - Stack trace no longer emitted when releasing repository lock after exec
    error.

v1.21.0 - 2014/10/13

  Bug fixes:

  - During publishing, now checks asset names after file name globbing, not
    before.  Also, archive names are checked for extraction support prior to
    writing to remote repository.  (Yes, that's the archive /names/ and not the
    archive /files/.)

v1.20.1.beta.1 - 2014/10/8

  - Test release.

v1.20.0 - 2014/10/7

  New features:

  - New --no-remote-figrc option that suppresses looking at
    $FIG_REMOTE_URL/_meta/figrc.
  - Treats an empty FIG_REMOTE_URL as equivalent to it being unset.  This
    allows temporary disabling remote access by invoking it like
    "FIG_REMOTE_URL= fig <... whatever...>".

v1.19.0 - 2014/9/26

  Miscellaneous:

  - Minimum version of libarchive-static is now v1.0.5.

  - There's no specific changes being made to prevent continued compatibility,
    but Fig is no longer going to be tested on Ruby v1.9.2.

v1.18.0 - 2014/7/1

  New features:

  - New --log-to-stdout option that, surprise, sends log output to standard
    output instead of standard error.  Can't be used with --log-config, but,
    then, you can get log output to go whereever you want with a configuration
    file.  ;]

v1.17.0 - 2014/5/5

  Miscellaneous:

  - Unused retrieve warnings are suppressed when other errors occur.

v1.16.1.beta.1 - 2014/4/29

  - Test release.

v1.16.0 - 2014/3/19

  Miscellaneous:

  - Work around broken utmp files by using getpwuid(3) to get the current user
    before falling back on getlogin(3).

v1.15.1.beta.2 - 2014/3/13
v1.15.1.beta.1 - 2014/3/5

  - Test releases.

v1.15.0 - 2014/2/24

  Miscellaneous:

  - When using sftp: URIs, warns if it looks like we're about to run into the
    bug reported at https://github.com/net-ssh/net-sftp/issues/27.  This does
    nothing to actually work around the bug, but at least gives you a clue as
    to what is going on.

v1.14.0 - 2014/2/10

  New features:

  - The return of SSH support, thanks to Alexey Klimkin.  Note that this uses
    external "ssh" and "scp" commands locally and expects to be able to run
    "find", GNU "stat", and "mkdir" remotely.

v1.13.1.beta.2 - 2014/1/31
v1.13.1.beta.1 - 2014/1/30

  - Test releases.

v1.13.0 - 2013/12/3

  Bug fixes:

  - Now, modulo the value of the --update-lock-response option, always locks
    FIG_HOME.  This is to avoid corruption of the local copy of the remote
    repository's figrc.  Thanks to James Fraser for the report.

  - Incorrect message when the remote repository was empty when using
    --list-remote.

  - The "up-to-date" check for files accessed via ftp:, file:, and sftp: URLs
    now includes a size check.

v1.12.1.beta.1 - 2013/11/12

  - Test release.

v1.12.0 - 2013/10/14

  Bug fixes:

  - The --suppress-*-includes options didn't affect --include options.  Thanks
    to Peter Royal for the report.

  Miscellaneous:

  - Now looks for "application.fig" in the current directory after looking for
    "package.fig".  There's no semantic difference, but it provides for an
    idiom for things which are "client" packages which will never be published,
    but just for pulling down dependencies.

v1.11.1.beta.2 - 2013/10/11
v1.11.1.beta.1 - 2013/10/09

  - Test releases.

v1.11.0 - 2013/09/25

  Bug fixes:

  - Fix crash with quoted command-lines.

v1.10.0 - 2013/09/25

  Bug fixes:

  - Command statements were not being correctly published if they contained "@"
    signs.

  Miscellaneous:

  - Resource statements that refer to directories will now pull in the full
    directory contents instead of just the directory itself.

v1.9.1.beta.2 - 2013/09/20
v1.9.1.beta.1 - 2013/09/19

  - Test releases.

v1.9.0 - 2013/09/19

  Bug fixes:

  - You can now set FIG_SVN_EXECUTABLE and FIG_GIT_EXECUTABLE to whitespace to
    turn off support for those VCSs.  Windows does not allow environment
    variables to be set to the empty string.

v1.8.0 - 2013/8/6

  Bug fixes:

  - The error message for invalid characters in path statements didn't
    correctly show the bad character in question.  Thanks to Jordan Samuels for
    the report.

v1.7.0 - 2013/6/5

  Miscellaneous:

  - No functional changes, just updated gem dependencies.

v1.6.0 - 2013/4/22

  New feature:

  - New --suppress-warning-unused-retrieve option to turn off warnings for
    retrieves that were enabled but which weren't triggered.  Can also be
    specified in app configuration (e.g. ~/.figrc) as an entry in the "suppress
    warnings" array:

      {
        "suppress warnings": ["unused retrieve"]
      }

v1.5.1.beta.1 - 2013/4/19

  - Test release.

v1.5.0 - 2013/4/8

  Bug fix:

  - "@" substitution in the command-line was using the incorrect package.

  Miscellaneous:

  - No longer even reads $PWD/.fig/retrieve if retrieves aren't going to
    happen.  Should solve race conditions with other fig processes doing
    updates.

  - json gem dependency is now 1.7.7.  Needed for Ruby v2 and whatever issue
    TeamCity was having with versions later than 1.6.5 a year ago does not
    appear to exist with 1.7.7.


v1.4.1.beta.1 - 2013/4/4

  - Test release.


v1.4.0 - 2013/3/18

  Miscellaneous:

  - Small clarification in error message when failing to download an asset.

  - No longer depends upon the sys-admin gem.


v1.3.1.beta.1 - 2013/3/13

  - Test release.


v1.3.0 - 2013/3/5

  Backwards incompatibility:

  - If you specify one of FIG_USERNAME/FIG_PASSWORD, you must specify both.

  Bug fixes:

  - In the change to not use the environment variables/prompting for assets,
    ~/.netrc gained priority over the environment variables again. Fixed.

  - Newlines are allowed in command-line options.

  New feature:

  - New --publish-comment option that allows you to put a comment at the top of
    published packages.  Works regardless of whether the package definition
    comes from a file or other command-line options.

      > fig --publish package/version --publish-comment $'This package is\n    awesome!' ...

      > fig --dump-package-definition-text package/version
      # This package is
      #     awesome!
      #
      #
      # Publishing information for package/version:
      ...

  Miscellaneous:

  - Publishing now includes VCS revision information.

    For Subversion, this is from the "Revision: " in the output of "svn info".
    It might be better to use the output of "svnversion", but this would
    require an additional FIG_SVNVERSION_EXECUTABLE environment variable and it
    seems better to keep things simpler by avoiding that.

    For Git, it includes the current branch and SHA1.


v1.2.1.beta.3 - 2013/3/1
v1.2.1.beta.2 - 2013/3/1
v1.2.1.beta.1 - 2013/2/27

  - Test releases.


v1.2.0 - 2013/2/26

  Bug fixes:

  - Unparsing of unglobbed asset paths containing single quotes was broken.

  - Deal with differences between return types of stat() from Net::SFTP and
    File.

  New features:

  - Now looks in figrc for an array under the key "environment variables to
    include in comments in published packages".  If present, the values of
    those environment variables will, surprise, show up in the text of
    published packages.

  - When publishing, attempts to identify VCS (currently Subversion and Git)
    URLs for the package and includes that information in comments in the
    package.  This can be turned off via the
    --suppress-vcs-comments-in-published-packages option.  The path to the VCS
    programs can be controlled via the FIG_SVN_EXECUTABLE and
    FIG_GIT_EXECUTABLE environment variables; individual VCS can be turned off
    by setting the variable to the empty string.

  - New --source-package option that will tell you what package a file was
    retrieved from:

      # Assuming a retrieve caused lib/libboost_timer.so to exist:
      > fig --source-package lib/libboost_timer.so
      boost/1.51.0.redhat6.gcc472

      > fig --source-package lib
      "lib" is a directory. Fig does not keep track of directories.

      > fig --source-package some-local-file.txt
      Don't know anything about "some-local-file.txt".

  - New --suppress-retrieves option that stops "retrieve" statements from
    firing, even if the --update* options are specified.  Useful if you want to
    do things like "fig --update package/version
    --dump-package-definition-text" without clobbering anything in your current
    directory.

  - It is now possible to use an unpublished package from within another via a
    "include-file" statement/--include-file command-line option.

    This is considered an experimental feature and its behavior has not been
    set in stone yet; changes may happen without notice.  Comments on its
    behavior, especially in terms of assets and of retrieves are welcome.

    Using this statement requires grammar version 2.  The
    statement/command-line option takes a single argument of a path to a
    package definition file, optionally followed by a colon and a config name.
    If the path requires quoting, the quotes go around the path and not the
    config name; this allows for use of the default config in a file path
    containing a colon, e.g. MS Windows absolute paths.  Given an unpublished
    package in ./foo/bar/baz.fig, your can use it in ./foo/bar.fig like so:

      grammar v2
      config default
        include-file 'bar/baz.fig':some-config
      end

    Note that the path is relative to including package, not relative to the
    current directory.

    The included package will act like a regularly published package with the
    exception that retrieves will be ignored because "[package]" substitution
    won't work because the package does not have a name.

    Packages that use include-file cannot be published.

  Miscellaneous:

  - Fig now depends upon the open4 gem.

  - Login behavior change for FTP with --login and for SFTP: Fig will not
    attempt to use login credentials from FIG_USERNAME/FIG_PASSWORD or use
    prompting for asset URLs.  Credentials in ~/.netrc will continue to be
    used.

  - Add -T as the short option for --dump-package-definition-text.

  - Add -R as the short option for --suppress-retrieves.


v1.1.1.beta.6 - 2013/2/25
v1.1.1.beta.5 - 2013/2/25
v1.1.1.beta.4 - 2013/2/21
v1.1.1.beta.3 - 2013/2/19
v1.1.1.beta.2 - 2013/2/14
v1.1.1.beta.1 - 2013/2/12

  - Test releases.


v1.1.0 - 2013/2/11

  Backwards incompatibilities:

  - Package names and versions and config names can no longer be "." or "..".
    Attempting to use one of these would produce bad effects before, so this
    should not be a big deal.

  - The FIG_USERNAME and FIG_PASSWORD environment variables take precedence
    over values in ~/.netrc.  This is a better fit with the general *nix idea
    that the command-line should take precedence over the environment which
    should take precedence over dotfiles.

  - Removed support for SSH.  It was never fully functional and depended upon
    fig being installed at the same absolute path on the remote machine as it
    was on the local one.  Use SFTP instead.

  New features:

  - Graphviz (http://graphviz.org/) output for --list-dependencies and
    --list-variables via --graphviz option.  You'll need something that can
    interpret .dot files to use this.

      fig package/v1.2.3 --list-dependencies --graphviz |
        dot -Tpng -o package-1.2.3.png

      fig package/v1.2:config --list-variables --list-all-configs --graphviz |
        dot -Tpng -o package-1.2.3.png

    Since Fig just emits DOT (http://graphviz.org/content/dot-language), Fig
    doesn't have a dependency upon Graphviz libraries, etc.

  - Support for SFTP.  Set FIG_REMOTE_URL to something like
    «sftp://host:port/some/path».  Note that this *requires* the use of
    ~/.netrc or FIG_USERNAME/FIG_PASSWORD in order to authenticate; there is no
    anonymous SFTP.  Thus, the use of the --login option is superfluous with
    SFTP.


v1.0.1.beta.2 - 2013/2/6
v1.0.1.beta.1

  - Test releases.


v1.0.0 - 2013/1/2

  New features:

  - New --suppress-all-includes and --suppress-cross-package-includes options
    prevent package traversal.  The driving use case is retrieving individual
    components of path statements.  Say you have a package definition that
    looked like:

      config default
        include something/some-version
        include other/whatever
        add CLASSPATH=@/foo.jar
      end

    You could then get the portion of CLASSPATH from the package definition
    only and not any dependencies via

      fig --suppress-all-includes --get CLASSPATH

    If you've got multiple config blocks, you can still have intra-package
    dependencies take effect:

      config default
        include something/some-version
        include other/whatever
        include :base-environment
      end

      config base-environment
        add CLASSPATH=@/foo.jar
      end

    You just allow those includes to work:

      fig --suppress-cross-package-includes --get CLASSPATH

  - New --suppress-cleanup-of-retrieves option that stops Fig from deleting
    files previously downloaded as a result of a retrieve statement.  Useful if
    you wish to toggle between multiple configurations rapidly without waiting
    for file shuffling.


v0.2.6.beta.1 - 2012/12/18

  - Test release.


v0.2.5 - 2012/12/13

  Backwards incompatibilities:

  - The layout of $FIG_HOME has changed in a backwards-incompatible manner (See
    "Bug fix" section below).

    When run with a local repository created by an earlier version of Fig, Fig
    will exit with the message

      Local repository is in version 1 format. This version of fig can only
      deal with repositories in version 2 format. Either point $FIG_HOME to a
      different location or rename or delete «existing path».  (Be mindful of
      packages that have been published only locally.)

    If you don't have any packages that were were only locally published (i.e.
    created using the --publish-local option), it should be safe to simply
    remove the directory and then use the --update or --update-if-missing
    option to pull packages from the remote repository.

    Any local repository created by this version of Fig will not be readable by
    earlier versions.  Fig v0.1.64 and later will fail with a "Local repository
    is in version 2 format. This version of fig can only deal with repositories
    in version 1 format." message when reading a repository created by this
    version.

  Bug fix:

  - The contents of packages are no longer intermingled with archives used in
    the packages, meaning that there's a smaller chance of different assets
    clobbering each other and of packages getting corrupted.


v0.2.4.beta.1 - 2012/12/11

  - Test release.


v0.2.3 - 2012/12/11

  Backwards incompatibilities:

  - Now requires Ruby v1.9.2.

  Miscellaneous:

  - Warns about environment variables that refer to non-existent paths after
    publishing.

      fig --publish package/version --set foo=@/bar

      Checking status of package/version...
      Publishing package/version.
      Publishing using the v0 grammar.
      The foo variable points to a path that does not exist
      (/tmp/fig-testing/home/repos/package/version/bar); retrieve statements
      that are active when this package is included may fail.

    Note that this check is done after the package has been successfully
    published; it does not prevent problems, but only detects potential ones.
    Due to the indirect and inexact relationship between paths from asset
    statements and environment variable statements, the check cannot be done
    before publishing.

  - Warning about unused retrieve no longer appears when there is a problem
    with the variable itself.

  - Stack traces of includes contain file names and "command-line" if the
    includes came from package definition files or from "--include" options.
    E.g.

      fig --update --list-variables --include thingy/1.0.0.30 --file some-dependencies.fig --config blahblahblah

      Version mismatch for package thingy (1.0.0.30 vs 1.0.0.81).
      <command-line>:default
        thingy/1.0.0.30:default
      <command-line>:default
        <some-dependencies.fig>:blahblahblah
          thingy/1.0.0.81:default

  - Other error message clarifications.


v0.2.2.beta.3 - 2012/12/7
v0.2.2.beta.2 - 2012/12/7
v0.2.2.beta.1 - 2012/12/6

  - Test releases


v0.2.1 - 2012/11/5

  Backwards incompatibilities:

  - In a retrieve statement, it is now an error to have an unescaped open
    square bracket ("[") that is not followed by "ackage]".  In other words,
    the following was previously acceptable:

      retrieve VARIABLE->foo[bar]baz

    You now will need to use the v1 grammar and escape the square bracket:

      grammar v1
      retrieve VARIABLE->foo\[bar]baz

  - Next version will not support Ruby v1.8.

  Bug fix:

  - Bad variable name with HTTP downloads fixed.

  New features:

  - New --dump-package-definition-for-command-line option, useful for
    previewing a package defined via the --set, --append, --archive,
    --resource, --include, and --override options.

  - The long in-progress v1 grammar is available.  It solves a lot of
    inconsistencies in the original, now v0, grammar.  The primary differences
    are in allowing Bourne-shell like quoting and escaping of values (double
    quotes allow whitespace, single quotes turns all interpolation off, etc.)
    and the command statement now can be used without involving the shell.

    For the most part, this should be transparent to you.

    Command-line options are treated as if they were specified in the v1
    grammar.

    Older versions of fig cannot read v1 format, but versions since v0.1.75
    will cleanly tell you that they can't handle it.

    In order to be as compatible with older fig versions, the new fig will
    publish packages using the v0 grammar, if it can find a way to do so, even
    if the input package definition is given in the v1 grammar.  Thus, given a
    package.fig file containing

      grammar v1

      config default
        set foo='bar'
      end

    the published package will look like

      # grammar v0

      config default
        set foo=bar
      end

    If, when publishing, fig determines that it needs to use the v1 grammar, it
    will tell you why:

      > fig --set 'baz=foo#bar' --publish-local v1-grammar/test

      Publishing v1-grammar/test locally.
      Publishing using the v1 grammar.
      Grammar v1 is required because the set statement (--set option) contains a comment ("#") character.

    Documentation for the new grammar is available at
    https://github.com/mfoemmel/fig/wiki/v1-grammar.  It may be helpful to have
    a look at the old one, as well:
    https://github.com/mfoemmel/fig/wiki/v0-grammar

  Miscellaneous:

  - The restriction on using keywords in names introduced in v0.1.71 has been
    reversed.  If changes are required to deal with that, there'll just be a
    new grammar version introduced.

  - Fewer stack traces with network errors.


v0.2.0.beta.2 - 2012/10/24
v0.2.0.beta.1 - 2012/10/12

  - Test releases.


v0.1.81 - 2012/9/25

  Backwards incompatibilities:

  - Command statements are no longer split on whitespace and then reassembled
    with space characters.  Previously, the output of running a package
    containing

      config default
        command "echo 'foo   bar'"  # 3 space characters between "foo" and "bar"
      end

    would be "foo bar"; it is now "foo   bar".  It is expected that few things
    depended upon the old behavior.

  New features:

  - Command statements are no longer split on whitespace and then reassembled
    with space characters.  This should make what is run and what is in a
    package definition file match most people's expectations.


v0.1.80.beta.1 - 2012/9/20

  - Test release.


v0.1.79 - 2012/9/13

  Backwards incompatibilities:

  - Commands given via the command-line are no longer run through the shell if
    given as multiple arguments.  This should be a pretty esoteric issue, but
    if you're depending upon double interpolation of command-lines or joining
    of quoted expressions, then this change will break your usage of fig.

    Previously, running

      fig -- javac -classpath '$SOMEPATH' whatever

    would pass javac the value of the SOMEPATH environment variable after fig
    had manipulated it.  If you still want the shell involved, pass a single
    argument to fig by quoting, e.g.

      fig -- 'javac -classpath $SOMEPATH whatever'

  - Commands given via the command-line have the same "@" expansion done on
    them that "command" statements in a package definition do, i.e. "@package"
    gets replaced with the path to that package and "@" gets replaced by the
    path to the base package.

  New features:

  - Commands given via the command-line are no longer run through the shell if
    given as multiple arguments.  This means that there should be fewer
    surprises in usage.

    Note that command statements still go through splitting on whitespace and
    reassembling with space characters.

  - Commands given via the command-line have the same "@" expansion done on
    them that "command" statements in a package definition do, i.e. "@package"
    gets replaced with the path to that package and "@" gets replaced by the
    path to the base package.

  Bug fixes:

  - For both environment variable and command statements, at signs that follow
    escaped at signs are expanded.  Previously, if you had

      set FOO=X\@Y@Z

    then the value of FOO after expansion would be "X@Y@Z".  Now it would
    (correctly) be "X@Ypackage-pathZ".

  - Doing a --update after a --publish-local doesn't delete the local package.
    Actually, updates handle failed downloads better in general and don't
    delete local copies of packages.


v0.1.78.beta.2 - 2012/9/11
v0.1.78.beta.1 - 2012/8/31

  - Test releases.


v0.1.77 - 2012/8/15

  Bug fixes:

  - Fix for the case where the value of an environment variable statement is
    the path to a symlink when a retrieve is in effect.  Note that retrieves of
    symlinks will be copied as the target of the symlink and not as the
    symlink; however, if the retrieve is of a directory which contains
    symlinks, those symlinks will be copied as symlinks.

    If we have a package.fig that looks like

      retrieve SOMEPATH->somewhere
      config default
        include foo/57
      end

    and the contents of the "foo" package look like

      config default
        set SOMEPATH=a_symlink
      end

    then the target of "a_symlink" will be copied to "somewhere" as the type of
    the target (i.e. a file or directory).  If, however, the contents of the
    "foo" package look like

      config default
        set SOMEPATH=a_directory
      end

    and "a_directory" contains a symlink named "another_symlink", then
    "another_symlink" will be copied to "somewhere" as a symlink.

  - Retrieves of symlinks will not occur if the symlink was previously
    retrieved.  Previously, if you updated the same package multiple times and
    that package contained symlinks, the symlinks would be recreated on every
    update, even though the regular files would not.


v0.1.76 - 2012/8/7

  New features:

  - New --version-plain option for getting the fig version without any nice
    formatting (and no trailing newline in the output).  Useful for programatic
    access to the fig version.


v0.1.75 - 2012/8/1

  Backwards incompatibilities:

  - Unquoted archive statements now have their values globbed if they don't
    look like URLs.  If you happen to have a statement like

      archive some/path/foo?bar*.tar.gz

    then this will match files that it did not previously find.

  New features:

  - Asset statements now behave identically, with the exception of the
    extraction of archive statements and the path preservation of resource
    statements.  Previously, archives weren't globbed, i.e. you couldn't say

      archive yadda/*.tar.gz

    You had to specify all archives individually.

  - New --run-command-statement option that allows you to run command
    statements in unpublished packages.  (No more need to publish to test
    whether they work!)  Say you have a package.fig file in the current
    directory that looks like

      config default
        command "echo hello!"
      end

    If you just run "fig", it still says that there's nothing to do, but it
    additionally warns you about the situation.  You can get non-default
    commands to run using the --config option, e.g. "fig
    --run-command-statement --config run-chrome":

      config run-chrome
        command "chrome ..."
      end

  - New grammar statement to allow for future expansion.  Syntax:

      grammar v<number>

    This statement is only valid as the first statement in a package
    definition.  In other words

      grammar v0
      config default
      end

    is valid, but

      config default
      end
      grammar v0

    is not.  The only valid version right now is 0, but this means that we can
    change the syntax in the future without breaking any existing packages.

    Note that this statement will be emitted for all published packages, but
    will be commented out so that older versions of Fig can still read them.
    For example, the significant parts of the package definition generated by
    "fig --publish foo/5 --set variable=value" are:

      # grammar v0
      config default
        set variable=value
      end


v0.1.74.beta.3 - 2012/7/27
v0.1.74.beta.2 - 2012/7/27
v0.1.74.beta.1 - 2012/7/27

  - Test releases.


v0.1.73 - 2012/7/12

  Backwards incompatibilities:

  - --update-lock-response is, for the time being, no longer supported on
    Windows.  Dealing with file locking on Windows is hard and we don't have
    the time to figure it right now.

  Bug fixes:

  - FIG_HOME locking didn't cover all the situations that it should have, e.g.
    the --clean option.

  - Crash when --command-extra-args was specified without a package descriptor.


v0.1.72.beta.2
v0.1.72.beta.1

  - Test releases


v0.1.71 - 2012/6/25

  Backwards incompatibilities:

  - Packages, resources, archives, and configs cannot have names that are
    keywords (other than "config") in order to have more clear parse error
    messages and allow for future expandability.  (You didn't really want a
    package named "end" did you?)

  New features:

  - Default for --update-lock-response is now "wait" instead of "fail".
    However, if a pre-existing lock is encountered and you haven't explicitly
    specified "--update-lock-response wait", you'll get a warning about the
    wait.  Note that this warning is not influenced by --log-level.

  - Can specify the location of the remote repository via ~/.figrc or the value
    of the --figrc parameter by specifying a value for "default
    FIG_REMOTE_URL", e.g.

      { "default FIG_REMOTE_URL" : "file:///some/path" }

  - New --dump-package-definition-text option, which gives you the text of the
    base package.  Useful for looking at published packages.

  - New --dump-package-definition-parsed option, which, surprise, gives you the
    the base package after Fig has digested it.  Note that you won't see the
    result of --set/--append/--archive/--resource options in this because those
    get stored outside of the base package.

  - Warns on ignored --archive/--resource options.

  - The output "--help" was getting way too long.  The text that it now emits
    is non-comprehensive, but it should fit onto a single screen and includes
    pointers to the new "--options" and "--help-long" options.

  Bug fixes:

  - Loading an overridden package version that had one config include another
    config of the same package could cause problems in some circumstances.


v0.1.70.beta.1

  - Test release.


v0.1.69 - 2012/6/20

  Backwards incompatibilities:

  - While publishing, you cannot simultaneously have a package definition file
    (e.g. "package.fig") and use environment variable options (--set/--append).
    Previous to now, any package definition file would simply be ignored and
    the publish would happen based upon the environment variable options.

    - Easier to understand, yet unlikely to already exist case:

        fig package/1.2.3 --publish --set VARIABLE=VALUE --file non-default.fig

      Is this supposed to mean publish based upon the --set option or the
      --file option?  Again, it was the former, but that was non-obvious.

    - More likely existing case:

        fig package/1.2.3 --publish --set VARIABLE=VALUE

      while there is a "package.fig" file in the current directory.
      Workaround: use the "--no-file" option:

        fig package/1.2.3 --publish --set VARIABLE=VALUE --no-file

    Just to be clear, it's perfectly fine (and useful) to have combined a
    package definition file and environment variable options when not
    publishing.

  New feature (and backwards incompatibility):

  - Locks FIG_HOME when updating.  (Or attempts to.  If FIG_HOME is on NFS, all
    bets are off.)  By default, if Fig is updating and notices another instance
    updating, it will fail.  You can override this behavior via
    --update-lock-response.  Specify "wait" to get Fig to wait for lock release
    or "ignore" for it to skip lock checking.

    The default behavior of failing was chosen to prevent surprises in the
    scenario of starting multiple servers out of the same directory:

        for exchange in cme ice liffe cboe
        do
            fig --update -- run-server $exchange &
        done

    If Fig defaulted to waiting, the above scenario would silently cause three
    out of the four servers to block until the other one's updates were
    finished.

  Bug fixes:

  - Specifying --update with FIG_REMOTE_URL using FTP should be fast as it used
    to be.

  - Skips retrieving directories and files to themselves.  (Tragic accident of
    retrieving "." onto itself resulted in a corrupted git repo.)


v0.1.68.beta.2
v0.1.68.beta.1

  - Test releases


v0.1.67 - 2012/6/7

  Backwards incompatibilities:

  - The --update and --update-if-missing options are always paid attention to.
    (Hey, you said update; Fig endeavors to comply.) This causes problems where
    these were previously ignored.

    - If you specify --clean, you'll get an error about the options not
      agreeing about whether the base package should be loaded.

    - Publishing may fail if you have versionless includes.  Workaround: don't
      use versionless includes or do the update and the publish separately.

  Bug fixes:

  - Updating and using any of the --list-* options would delete any previously
    retrieved files.

  - More fixes in dealing with symlinks.

  - Better error reporting for failed installations and package version
    conflicts.


v0.1.66.beta.2
v0.1.66.beta.1

  - Test releases


v0.1.65 - 2012/5/21

  Bug fixes:

  - Treat trailing double-slashes in environment variable statements as if they
    weren't there, i.e.

        set FOO=blah//

    is the same as

        set FOO=blah


v0.1.64 - 2012/5/21

  Backwards incompatibilities:

  - --set and --append command-line options now take priority over package.fig
    files and --include options are now processed after any "include"
    statements.

    Previously, "fig foo/1.2.3 --set SET=command-line --append
    APPEND=command-line --include command-line/1.2.3" was equivalent to

      config default
        set SET=command-line
        add APPEND=command-line
        include command-line/1.2.3

        include foo/1.2.3
      end

    Now it is equivalent to

      config default
        include foo/1.2.3

        set SET=command-line
        add APPEND=command-line
        include command-line/1.2.3
      end

    (It really is like that: a package is synthesized with statements
    equivalent to the command-line options and that package is run through the
    whole process.)

  - Retrieve variable names can no longer contain "@", "/", or ".".  Since
    environment variable statements only allow alphanumerics and underscore in
    the variable names, any retrieve variable with those characters in its name
    would never have any effect.

  - Running fig --publish or --publish-local with --resource or --archive
    options without also specifying a --set or --append option is now an error.

    What would previously happen is that the --resource and --archive options
    were ignored and package.fig locating would happen and the publish would be
    based only on that.  Probably not what was intended.

    E.g.:

      fig --publish foo/1 --resource=something.txt

    would ignore the --resource option, look for a package.fig file and publish
    based upon that.

  - Now fails if you specify both a descriptor and the --file option and you
    aren't publishing.  Previously it would silently ignore the --file option,
    which could be a bit more than a little surprising.

  New features:

  - Overrides are now independent statements, no longer attached to includes.
    E.g. this

      config default
        include A/1 override C/3
        include B/1 override C/3
      end

    is now equivalent to this

      config default
        override C/3
        include A/1
        include B/1
      end

    No changes to existing (functioning) package.fig files will be necessary.
    In fact, this will fix some that didn't work due to versionless includes.

  - You can now specify overrides on the command-line using "--override".

  - Now checks repository format version and fails if it's different from what
    it knows about.

    There are no immediate plans to change the repository format, but
    considering the inability to fix the non-unique archive name issue below,
    it behooves us to allow for a format change in the future.  If the layout
    does change, then current code could possibly corrupt the future
    repository.

  - Warns if you attempt to use a "retrieve" statement to write to an absolute
    path; all retrieve destinations are relative.

  - Now warns about ineffectual "retrieve" statements.

  - A lot of existence checks have been added, resulting in nicer error
    messages and fewer stack traces.

  - README.md has had most of its content ripped out.  Documentation has been
    greatly expanded and is available at https://github.com/mfoemmel/fig/wiki.

  - Includes the Fig version in the comments in published .fig files.

  Bug fixes:

  - Better command-line parsing.  There were a number of scenarios where
    missing or malformed arguments to options would cause incorrect behavior or
    stack traces.

  - Handling of symlinks is better.

  - Now checks that archive base names are unique before allowing publishing.
    Previously, if you had something like

        archive http://somewhere/archive.tar.gz
        archive foo/archive.tar.gz

    everything would work locally, but the version of the package published to
    the remote repository was corrupt.  Given the current repository layout,
    this is not fixable, so we now disallow publishing packages like this.

    Similarly, we now complain about archives named "resources.tar.gz" because
    Fig creates an archive by that name to hold resources.

  - Updates should be more robust in the face of simultaneous runs of fig.

  - Retrieves:

    * Now saves retrieve metadata prior to an exec(2).  Previously, if you ran
      a command, Fig would lose track of what you had in your current
      directory.

    * Cleanup of retrieves for no-longer-referenced packages now happens, i.e.,
      if a dependency removes a dependency, files are correctly removed.

      Note that, depending upon the packages involved, switching between two
      base packages can be slower than it was before.  In other words, if
      packages "foo" and "bar" have a lot of retrieves of dependences NOT in
      common, running

          fig --update-if-missing foo/v1.2.3
          fig --update-if-missing bar/v6.5.4

      will be slower.  On the other hand, you won't have a lot of stuff from
      "foo" hanging around that shouldn't be there.


v0.1.63.beta.2
v0.1.63.beta.1

  - Test releases


v0.1.62 - 2012/4/2

  Bug fixes:

  - Fixed stack trace when encountering conflicting dependency package
    versions.


v0.1.61 - 2012/3/29

  New features:

  - Constraints on the values of "resource", "append", "path", "add", and "set"
    statements greatly relaxed (prompted by C++ libraries with "++" in their
    names).

  - The package name can now include a "_" for parsing. Previously you could
    publish a package with an underscore in the name but would be unable to
    subsequently use it.

  Bug fixes:

  - Removed dependency on the 'ftp' gem.


v0.1.60.alpha.2
v0.1.60.alpha.1

  - Test releases


v0.1.59 - 2012/3/9

  Backwards incompatibilities:

  - Specifying a config in the descriptor and --config is now an error, i.e you
    can't do:

        fig package/1.2.3:some_config --config some_other_config

    Allowing configurations in both locations was ambiguous and the developers,
    let alone users, couldn't tell which configuration would prevail.

  New features:

  - "--list-variables" option.  This will display all variables manipulated by
    Fig, following package dependencies recursively.  Can have
    "--list-all-configs" and "--list-tree" applied to it for tracking down
    where that nasty setting of EDITOR to "emacs" comes from.

    Example "--list-variables --list-tree" output:

        A/1.2.3
        |   CLASSPATH = something:$CLASSPATH
        |   FROM_A    = blah
        '---C/5.6.7
        |       CLASSPATH = something_else:$CLASSPATH
        |       FROM_C    = blah
        '---B/1.2.3
                CLASSPATH = planet_x:$CLASSPATH
                FROM_B    = blah

    See README.md for more.

    Suggestions for changes to the output format welcome.

  - "--command-extra-args" option.  Allows you to say that the rest of the fig
    command-line is to be appended to the end of the command in a "command"
    statement.

  - The .fig file created in a repository now contains metadata about
    the publishing of the package (time/user/host).

  - Logging output is colorized if going to a tty on *nix.  This includes
    restoration of the old colorization of local package downloads/deletions.
    Colors are not currently configurable.

  - The primary package is now treated the same as other packages as far as
    updates are concerned.  Previously, if you started with a new environment,
    e.g. FIG_HOME was empty, running "fig foo/1.2.3 -- echo foo" would fall
    over.  Even asking for updates ("fig --update foo/1.2.3 -- echo foo")
    wouldn't change anything.  Now the latter case will work.

  - "--suppress-warning-include-statement-missing-version" option and "suppress
    warnings" entry in figrc will, unsurprisingly, turn off warnings for things
    like "include foo" in included packages.  Note that this will NOT turn off
    these warnings for the contents of a package.fig file.

    The idea is that, while not having a version on an include is a bad idea,
    you don't decide on the contents of your dependencies.  So, this allows you
    to stop Fig from complaining about things you can't control, while still
    yelling at you for things that you do.

  - The test suite passes on MS Windows!

  Bug fixes:

  - You can publish packages that have versionless includes again.

  Significant Internals:

  - The definition of a package descriptor has become more restrictive in the
    Ruby code.  This shouldn't be an issue because the Treetop grammar has
    already restricted it this way; this is just a check from the Ruby side.


v0.1.58.beta.1
v0.1.58.alpha.2
v0.1.58.alpha.1

  - Test releases


v0.1.57 - 2012/2/13

  - Logging output now goes to stderr by default, instead of stdout.


v0.1.56.alpha - 2012/2/13

  - Test release


v0.1.55 - 2012/1/25

  - "include" of another package without specifying a version is now a warning
    about its ability to work is dependent upon include ordering.


v0.1.54 - 2012/1/25

  - Emits an error when you've got an "include" of another package without
    specifying the version.  It used to be the case that you could leave the
    version off, but that would only work if there was a "current" version of
    the depended upon package published.  Which meant that you'd have to
    --force the publication of the "current" version.


v0.1.53 - 2012/1/24

  - Fix bug in doing "fig -u" when the remote repository has a figrc file.


v0.1.52 - 2012/1/23

  Notice:

  A lot of internal changes have been made to make future changes easier and
  test coverage is significantly better than it was before.  We believe that we
  haven't broken anything (other than the purposeful changes below), but due to
  the scope of the changes, we may have done so.  Please report any problems
  you run into.

  Backwards incompatibilities:

  - Now requires at least ruby v1.8.7.

  - You can no longer run a command without using "--".  Through an accident of
    implementation, you previously could do

        fig echo foo

    You are now required to run this as

        fig -- echo foo

  - You can no longer specify multiple --clean or --list-configs options.

  - There was partial support for overridding the local location of a package
    via a "fig.properties" file in the current directory.  A full
    implementation of this type of thing may come in the future, but for the
    time being, in the efforts of making the code clean, this is gone.

  - Development now requires at least rspec 2.8.

  New features:

  - "--list-dependencies" option.  This will list all dependencies a given
    package has, recursively.

    For example, if you have package A which depends upon packages B and C
    which both depend upon package D, running

        fig --list-dependencies A/1.2.3

    will give you

        B/2.3.4
        C/3.4.5
        D/4.5.6

    If you additionally specify "--list-tree", you'll get a nested dependency
    tree:

        fig --list-dependencies --list-tree A/1.2.3

        A/1.2.3
            B/2.3.4
                D/4.5.6
            C/3.4.5
                D/4.5.6

    If you don't specify a package descriptor, but you've got a package.fig
    file in the current directory with the same dependencies as package A
    above, you'll get

        fig --list-dependencies --list-tree

        <unpublished>
            B/2.3.4
                D/4.5.6
            C/3.4.5
                D/4.5.6

    If there are no dependencies, you don't specify "--list-tree", and stdout
    is connected to a terminal:

        fig --list-dependencies package-with-no-dependencies/1.2.3

        <no dependencies>

    However, if stdout is not connected to a terminal:

        fig --list-dependencies package-with-no-dependencies/1.2.3 | cat

        [no output]

    Additionally, you can specify "--list-all-configs"; this will follow all
    the configurations in the base package.  Note that this will show multiple
    versions of the same package if different configurations depend upon
    different versions.


v0.1.51 - 2012/1/3

  - You can now set an environment variable to the empty string with "set".

  - Fix bug with same env variable in both APPEND and RETRIEVE statements,
    causing Fig to attempt to retrieve libs intended for publish. (The bug
    was introduced in 0.1.49, in commit aa3f3ab6c7, while fixing another bug).


v0.1.50 - 2011/12/5

  - Trying to get releases via rake to work properly for multiple platforms.


v0.1.49 - 2011/12/2

  - Finalizing figrc name for URL whitelist.


v0.1.47-48 - 2011/11/16

  - Exception, regex, and test refactoring.

  - Fixing operator precedence in environment.

  - Updated copyright years.

  - Changed README example to use file:// URL.

  - Change ssh:// tests to file:// tests.

  - Refactored '[package]' substitution.

  - Implemented @ escaping in variables.


v0.1.46 - 2011/11/15

  - Rakefile improvements.

  - Fixing broken reference to Fig::Logging in environment.rb.


v0.1.43-0.1.45 - 2011/11/15

  - Rakefile improvements.

  - Test file refactoring/improvements.

  - Complains if it has nothing to do.


v0.1.42 - 2011/11/15

  - Fig::Package refactoring.

  - "file:" protocol works for FIG_REMOTE_URL.

  - Testing no longer requires ssh.

  - Implemented whitelist checking after parse.

  - Simplify character classes in grammar, slight grammar refactoring.

  - Supports MacOS (better) in Rakefile.

  - No longer emits stack trace for invalid command line option(s).

  - Tests emits std(out|err) on failure, for ease in debugging test failures.


v0.1.41 - 2011/11/10

  - Release cleanup


v0.1.40

  - Works on Mac (in conjunction with libarchive-static 1.0.1).

  - Supports configuration via rc files in JSON format.  These can be (in
    ascending order of priority of values):
      - in the repository under "_meta/figrc"
      - in your home directory in ".figrc"
      - specified on the command-line via the "--figrc" option

    Note that values from all the above locations will be merged into a
    single, net application configuration.  E.g. if
    <repository>/_meta/figrc contains

      {"a" => 5, "b" => 7"}

    and ~/.figrc contains

      {"a" => 37}

    then Fig will see a value for "a" of 37 and a value for "b" of 7.

    Processing of ~/.figrc can be suppressed via the "--no-figrc" option.

  - Supports logging via log4r. Configure via "log configuration" in the rc
    files or via the "--log-config" and "--log-level" command-line options.
    The configuration files must be in XML or YAML format in a way supported
    by log4r and contain configuration for a "fig" logger.  The "--log-level"
    will override any value found in the configuration files.

  - Added additional messages about activity including file download source
    and destination.  Try "--log-level debug".  Suggestions about changes to
    levels that are supported, which levels messages are emitted at, and any
    additional desired logging are welcome.

  - Supports "-v/--version" to emit the Fig version.

  - No longer silently does nothing when no arguments are specified.

  - Start of support for restricting URLs in package.fig files via a URL
    whitelist; not complete yet and will likely change.

  - RSpec usage has been upgraded to v2.