Changes in shFlags 1.0.x
========================

Changes with 1.0.4
------------------

Fixed issue #10. Usage of ``expr`` under FreeBSD 7.2 (FreeNAS 0.7.1) and FreeBSD
8.0 that was causing many unit tests to fail.

Fixed issue where booleans were sometimes mis-configured to require additional
values like other flags.

Changed _flags_fatal() to exit with FLAGS_ERROR immediately.

Fixed issue #11. When help is requested, the help flag is no longer prefixed
with [no].

Upgraded shUnit2 to 2.1.6.

Fixed issue #12. Requesting help shouldn't be considered an error.

Added the ability to override the use of the OS default 'getopt' command by
defining the FLAGS_GETOPT_CMD variable.

Updated gen_test_results.sh and versions from shUnit2 source.

Fixed issues# 13, 14. Added support for dashes ('-') in long flag names. The
defined flag will still be declared with underscores ('_') due to shell
limitations, so only one of a dashed flag name or an underscored flag name are
allowed, not both.

Changes with 1.0.3
------------------

MAJOR CHANGE! ``FLAGS_ARGC`` is now obsolete, and is replaced by
``FLAGS_ARGV``. See below for more info.

Fixed issue# 7 where long flags defined with '=' (e.g. --abc=123) made it
impossible for the user to know how many non-flag command-line arguments were
available because the value returned by ``FLAGS_ARGC`` was wrong. The
``FLAGS_ARGC`` value is now obsolete, but will be maintained for backwards
compatibility. The new method of getting the non-flag arguments is by executing
``eval set -- "${FLAGS_ARGV}"`` after the **FLAGS** call. The arguments will
then be available using the standard shell $#, $@, $*, $1, etc. variables.

Due to above fix for issue# 7, there is now proper support for mixing flags
with non-flag arguments on the command-line. Previously, all non-flag arguments
had to be at the end of the command-line.

Renamed ``_flags_standardGetopt()`` and ``_flags_enhancedGetopt()`` functions to
``_flags_getoptStandard()`` and ``_flags_getoptEnhanced()``.

Took out the setting and restoration of the '-u' shell flag to treat unset
variables as an error. No point in having it in this library as it is verified
in the unit tests, and provides basically no benefit.

Fixed bug under Solaris where the generated help was adding extra 'x'
characters.

Added checks for reserved flag variables (e.g. FLAGS_TRUE).

Fixed some unset variable bugs.

Now report the actual getopt error if there is one.

All tests now properly enable skipping based on whether a standard or enhanced
getopt is found.

Added the OS version to OS release for Solaris.

Fixed flags_reset() so it unsets the default value environment vars.


Changes with 1.0.2
------------------

FLAGS_PARENT no longer transforms into a constant so that it can be defined at
run time in scripts.

Added warning about short flags being unsupported when there are problems
parsing the options with **getopt**.

Add default values to end of description strings.

Fixed bug that returned an error instead of success when recalling the default
values for empty strings.

Added warning when a duplicate flag definition is attempted.

Improved ``assert[Warn|Error]Msg()`` test helper grepping.

Replaced shell_versions.sh with a new versions library and created
**gen_test_results.sh** to make releases easier.

Copied the coding standards from shUnit2, but haven't fully implemented them
in shFlags yet.

Issue# 1: When a user defines their own --help flag, no more warning is thrown
when FLAGS() is called stating that the help flag already defined.

Issue# 2: Passing the --nohelp option no longer gives help output.

Issue# 3: Added support for screen width detection.


Changes with 1.0.1
------------------

Fixed bug where the help output added [no] to all flag names

Added additional example files that are referenced by the documentation.

Improved zsh version and option checking.

Upgraded shUnit2 to 2.1.4

Added unit testing for the help output.

When including a library (e.g. shflags) in a script, zsh 3.0.8 doesn't actually
execute the code in-line, but later. As such, variables that are defined in the
library cannot be used until functions are called from the main code. This
required the 'help' flag definition to be moved inside the FLAGS command.


Changes with 1.0.0
------------------

This is the first official release, so everything is new.


.. vim:fileencoding=latin1:ft=rst:spell:tw=80
.. $Id$
