#
# Tracker Issues and Commits referenced here can be viewed online as:
#
#   Commit: https://github.com/derks/cement/commit/XXXXXXX
#    Issue: https://github.com/derks/cement/issues/#issue/XX
#

0.8.16 - Feb 07, 2011
------------------------------------------------------------------------------

 +  Stable Release 0.8.16
 +  [Feature GH#42] Added support for logging config per file
 -  [Bug GH#48] log_file 'backupCount' uses wrong config option
 -  [Bug GH#51] Unknown command error for namespace commands uses wrong arg
 +  [Bug] Renamed cement/ module to cementdevtools in devtools source fixes
    namespace issues (cement/__init__.py has code and can't be a namespace)
 -  [Bug] Convert command to 'default' if it starts with a '-' (meaning it 
    is actually an option... not a command)


0.8.14 - Dec 08, 2010
------------------------------------------------------------------------------

 +  Stable Release 0.8.14
 +  Reorganized project files.  Moved cement.devtools, cement.test back under
    cement main project.  All packages are under './src'.


0.8.12 - Dec 06, 2010
-----------------------------------------------------------------------------

 +  Stable Release 0.8.12
 +  Python 2.4 compatibility, thanks to Jason Koelker
 +  Display namespaces with underscores '_' in the label as dashes '-'.  
    Also disallow dashes in the name when registering a namespace.
 -  No longer hide '-help' commands, treat them the same as all other 
    commands.  Can pass is_hidden=True when exposing them anyway.
 +  Don't override config['enabled_plugins'], but add to it instead.


0.8.10 - Sat Oct 23, 2010
-----------------------------------------------------------------------------

 +  Stable Release 0.8.10
 +  Application config file now override plugin configs
 +  Added 'core.handlers' module which includes 'define_handler', and 
    'register_handler'.  
 +  Re-factored output rendering.  Output is now handled by 'output_handler' 
    in the config, overridden by @expose(), and overridden by 
    output_handler_override.  
 +  Add 'output_handler_override' to config
 +  Add the ability to pass 'version' to lay_cement, avoiding a dependency
    on pkg_resources.get_distribution
 +  Pass return dict all the way back from render() so it is returned from
    run_controller_command()
 -  Don't log.warn when no output_handler is set, just log.debug as the
    output_handler may purposely be set to None.
 +  Added core.testing.simulate() that assists in testing.  Simulate takes 
    args (as they would be passed via sys.argv) to simulate commands run from 
    command line, and is helpful in testing.  
 -  The use of CEMENT_API, including 'ensure_api_compat' is now deprecated.
    Applications should strictly rely on the version of Cement for 
    compatibility.
    

0.8.8 - Sun Aug 22, 2010
-----------------------------------------------------------------------------

 +  0.8.8 Stable Release
 -  Added a fix for logging.  Previously, an application using a shared 
    plugin (such as from Rosendale) would be unable to log because there 
    were no handlers setup for the providers module name space.
 -  core.controller.run_controller_command() now requires cli_opts/cli_args
    to be passed *not* as kwargs (potential incompatible change for any
    code using run_controller_command directly).
 -  Resolve GH#38 Plugin loaded/listed twice
 -  Store the func.__name__ in the hook tuple rather than the hook name
 -  Updated links in docs, and references to The Rosendale Project
 
 
0.8.6 - Jun 11, 2010
-----------------------------------------------------------------------------

 +  0.8.6 Stable Release
 +  Separating 'paste' dev tools to separate 'devtools' package/project.
    
 
0.8.4 - Jun 07, 2010
-----------------------------------------------------------------------------

 +  0.8.4 Stable Release
 +  Change module name to lower case 'cement' (non-functional change)
 +  Resolved GH#31 Add link to official dev/stable download locations to doc
 -  Resolved broken app_setup tests (application bootstrap hook)
 -  Resolved GH#29 Cement exceptions should display the apps exception name
 -  Resolved GH#32 Issues with Pasted Exception classes


0.8.2 - May 13, 2010 
-----------------------------------------------------------------------------

 +  0.8.2 Stable Release
 +  Enable passing output to a file rather than STDOUT (GH#20)
 +  Support engine:template mix from @expose()
 +  Namespace get_config() returns ConfigObj object (as is documented)
 +  Set all namespace's config options per cli options (if they have the key)
    regardless of what namespace is called.  I.e. If --myoption is passed to
    a command in the 'mynam' namespace, mynam.config['myoption'] is set as well
    as any other namespace that has that config key.
 +  log.warn on OptionConflictError
 -  Don't render genshi output if --quiet is passed
 -  Resolve GH#6 Make plugin templates pass full version, required_cement_api,
    etc when registering their namespace
 -  Resolve GH#27 Remove unused app_basepath from config templates
     
     
0.8 - Mar 24, 2010
-----------------------------------------------------------------------------

 +  0.8 Stable Release
 +  Paster now creates 'yourapp-plugin-yourplugin' rather than a plural 
    '-plugins-' which is more standard.
 -  Removed bogus hooks: bootstrap_plugins_hook
 +  Added some tests (very few)
 -  Set application exception classes based on package name, not project name
 +  Added 'post_bootstrap_hook'
 -  Fixed exception names in appmain.py.
    
    
0.7.2 - Mar 06, 2010
-----------------------------------------------------------------------------

 +  Branching to portland, API incompatible changes.
 +  Namespace config settings are overwritten by [namespace] sections of the
    primary applications configuration files.  Meaning, a namespace called
    'example' reads configurations from [example] in the applications config
    files.  Additionally, Plugin configs can now exist in main application 
    configs under [plugin], as well as the typical plugins.d directory.
 +  Added new 'bootstrap' directory where all application setup happens for 
    each namespace, and refactored 'plugins' around this bootstrap layout.
    Along with that, discarded the 'plugins' directory.  Plugins are now
    simply optional namespaces.
 +  Plugins can now be enabled by the [root] 'enabled_plugins' list, or under
    a [plugin] config by setting 'enable_plugin=true'.    
 +  All namespace configs are merged into the root config object as an 
    embedded object.  I.e. root_config['example'] is an embedded ConfigObj for
    the example namespaces config.
 +  cli_opts and cli_args are now passed to the controllers __init__ rather
    than to each function.  Functions now call 'self.cli_opts' or 
    'self.cli_args'.
 +  Added default exception classes for new projects.
 +  Use jsonpickle instead of straight json.
 +  Moved appmain.py/config.py to new 'core' directory.
 +  Updated documentation a lot!
 +  Changed register_hook to a class decorator, and added 'name' parameter to
    override the name of the hook to register too (still uses name of func
    otherwise).
 -  The 'options_hook' has become post_options_hook.
 +  Set statedir (all data) to ~/<app_name> rather than ./var/etc.  Only 
    affects new apps (or apps without a config file).
 +  Added an additional config file location of <statedir>/etc/<app>.conf
 +  Added a -dev config file that is more suitable for development use.
 
 
0.6 - Feb 05, 2010
-----------------------------------------------------------------------------

 +  Version 0.6 Stable Release.
 +  Moving to the MIT License.
 +  Added full API and Developer documentation under ./doc


0.5.1 - Jan 2010
-----------------------------------------------------------------------------

New Features:

 +  Reworked cement to provide a proper model, view, controller interface
    very similar to the layout of TurboGears2.
 +  Added Genshi text templating support.
 +  Modified all paster templates to utilize new features.
 +  Added more debug output to Cement framework.
 +  Added pre_plugins_hook, and post_plugins_hook
 +  Added --debug, --json, and --quiet hard coded global options, which 
    function to alter output. The --quiet option removes sys.stdout 
    completely.
 +  Added Json output rendering, turns every app into a CLI-API
 +  The --json/--quiet options now buffer sys.stdout, and sys.stderror and 
    passes them on to json output should they be needed.  This eliminates the 
    ability for rouge output to interfere with what should be just json 
    output.

Incompatible Changes:

 -  Cement API Version Change: 0.5-0.6:20100115.  Cement will remain 
    compatible with this version of the API through version 0.6 stable.
 -  Removed 'register_command()' decorator in favor of the new expose()
    controller decorator.  
 -  Namespace 'commands' member is no longer a dict of CementCommand objects,
    is now a simplified dict of dicts.
 -  Plugin configs now end in .config, no longer .plugin
 -  Boolean config options now only support true/false to limit confusion

