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). :default thingy/1.0.0.30:default :default :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 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 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 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 /_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.