v0.1.64 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 Bug fixes: - Fixed stack trace when encountering conflicting dependency package versions. v0.1.61 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 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 - Logging output now goes to stderr by default, instead of stdout. v0.1.56.alpha - Test release v0.1.55 - "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 - 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 - Fix bug in doing "fig -u" when the remote repository has a figrc file. v0.1.52 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 - 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 - Trying to get releases via rake to work properly for multiple platforms. v0.1.49 - Finalizing figrc name for URL whitelist. v0.1.47-48 - 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 - Rakefile improvements. - Fixing broken reference to Fig::Logging in environment.rb. v0.1.43-0.1.45 - Rakefile improvements. - Test file refactoring/improvements. - Complains if it has nothing to do. v0.1.42 - Fig::Package refactoring. - "file:" protocol works for FIG_REMOTE_HOME. - 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. v0.1.41 - 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.