Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

601 lines (384 sloc) 18.645 kb
New features:
- Can specify the location of the remote repository via ~/.figrc or the value
of the --figrc parameter by specifying a value for "default
{ "default FIG_REMOTE_URL" : "file:///some/path" }
Bug fixes:
- Warns on ignored --archive/--resource statements.
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
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.)
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
fig --update -- run-server $exchange &
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
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
- Test releases
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
Backwards incompatibilities:
- --set and --append command-line options now take priority over package.fig
files and --include options are now processed after any "include"
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
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
(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.
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
is now equivalent to this
config default
override C/3
include A/1
include B/1
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
- 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.
- has had most of its content ripped out. Documentation has been
greatly expanded and is available at
- 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
* 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.
- Test releases
Bug fixes:
- Fixed stack trace when encountering conflicting dependency package
New features:
- Constraints on the values of "resource", "append", "path", "add", and "set"
statements greatly relaxed (prompted by C++ libraries with "++" in their
- 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.
- Test releases
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:
| FROM_A = blah
| CLASSPATH = something_else:$CLASSPATH
| FROM_C = blah
FROM_B = blah
See 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"
- 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.
- Test releases
- Logging output now goes to stderr by default, instead of stdout.
- Test release
- "include" of another package without specifying a version is now a warning
about its ability to work is dependent upon include ordering.
- 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.
- Fix bug in doing "fig -u" when the remote repository has a figrc file.
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 "" 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
If you additionally specify "--list-tree", you'll get a nested dependency
fig --list-dependencies --list-tree A/1.2.3
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
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.
- 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).
- Trying to get releases via rake to work properly for multiple platforms.
- Finalizing figrc name for URL whitelist.
- 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.
- Rakefile improvements.
- Fixing broken reference to Fig::Logging in environment.rb.
- Rakefile improvements.
- Test file refactoring/improvements.
- Complains if it has nothing to do.
- Fig::Package refactoring.
- "file:" protocol works for FIG_REMOTE_URL.
- Testing no longer requires ssh.
- Implemented whitelist chceking 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.
- Release cleanup
- 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.
Jump to Line
Something went wrong with that request. Please try again.