Revision history for HTML::Mason.

An HTML version of this file, complete with links to documentation, is
available at http://www.masonhq.com/changes.html.

** denotes an incompatible change

1.09_01

This is a big release and there are a lot of backwards
incompatibilities.  Please make sure to read the UPGRADE document,
which covers these in more detail.

[ INCOMPATIBLE CHANGES ]

- ** Errors now report line numbers from the component source file.

- ** The Parser class has been removed entirely.  Its functionality
has been split between the Lexer and Compiler objects.  L{Compiler},
L{Compiler::ToObject} and L{Lexer}.

- ** The debug file feature has been removed.

- ** The previewer has been removed.

- ** The Interp use_reload_files parameter has been removed.  The new
static_source parameter provides a useful, and conceptually simpler,
replacement.  L{Interp/static_source}.

- ** Mason's built in caching now uses Cache::Cache to do all the
heavy lifting.  This means that parameters for both the $m->cache and
$m->cache_self methods have changed.

- ** The ApacheHandler's top_level_predicate parameter has been
removed.

- ** The mc_* commands have been removed entirely.

- ** The Interp's taint_check parameter has been removed.  Mason now
simply determines whether or not it is running in taint mode and acts
appropriately without user intervention.

- ** Mason now uses Apache::Request as the default argument processing
module.  You can explicitly use CGI.pm if you prefer.

- ** The ApacheHandler module no longers accepts parameters when
imported.  Instead, you specify this parameter via the ApacheHandler
constructor.

- ** The ApacheHandler module now requires a minimum of mod_perl 1.22.

- ** The Component's run_count() and first_time() methods have been
removed.

- ** The HTML::Mason::Config module is no longer needed, and is no
 longer generated during the installation process.

- ** The Interp's autohandler_name and dhandler_name params no longer take
undef as a valid value.

- ** The Interp's use_autohandlers, use_dhandlers, and
allow_recursive_autohandlers parameters have all been removed.

- ** The $m->top_args and $m->top_comp methods have been renamed to
$m->request_args and $m->request_comp.  The old methods are deprecated
but will work until the 1.20 release.

- ** Passing an Interp object to the ApacheHandler constructor (as in
a handler.pl file) will no longer work unless you set the Interp's
resolver_class parameter to
'HTML::Mason::Resolver::File::ApacheHandler'.  However, you can now
pass Interp constructor params directly to the ApacheHandler
constructor, which will create the interp object internally. 

- ** The MasonMultipleConfig httpd.conf parameter has been removed.
Mason can now figure this out by itself.

[ ENHANCEMENTS AND NEW FEATURES ]

- It is now possible to pass chunks of component content as part of a
component call.  L{Devel/Component Calls with Content}.

- Mason now supports subrequests via the new $m->subexec and
$m->make_subrequest methods.  L{Devel/Subrequests}.

- Mason no longer requires you to specify a component root or data
directory.  The component root now defaults to your document root in a
web context, or your filesystem root in a standalone context.  The
data directory will be a subdirectory of your server root under
mod_perl, and Mason can work without any data directory at all in
other contexts.

- The Resolver class API has been redesigned and is documented for the
first time.

- The installation process will offer to help you setup Mason for use
with mod_perl if it can find your Apache configuration file and it
cannot find an existing Mason configuration.

- The HTML::Mason::Request->instance method is now the officially
supported way of getting at the current request object outside of a
Mason component (suggested by John Siracusa).

- The HTML::Mason::Interp->comp_exists method now checks for a
component's existence without loading the component (suggested by
Randal Schwartz).

- Mason now includes a module called HTML::Mason::CGIHandler, which
greatly simplifies the use of Mason via CGI scripts.

- Mason now uses File::Spec for all filesystem operations.

- All the .pod files have been merged into their corresponding .pm
files, where appropriate.

- Added the Component attr_if_exists method (suggested by Joe
Frisbie).

- We now use the HTML::Entities module's encode function for the 'h'
substitution escape flag.  This module escapes high-ascii characters
properly.

- Calling a method via $m->comp('comp:method') works just like
$comp->call_method('method').  Previously, ???

- When an object contains other objects then the containing object's
constructor accepts parameters intended for the contained objects.
For example, the Interp object contains a Resolver object and Request
objects.  The Interp's new method will accept constructor parameter
for both the Resolver and Request objects.

[ BUG FIXES ]

- The <%args> section can now contain comments which contain the
string '=>' (reported by Chris Hutchinson).

- Fixed the longstanding bug that using print() or $r->print() causes
output/headers to appear out of order.  You can now safely use these,
though we still recommend that you use Mason to send output.

- Filtered output now does appear when $m->abort() used.  However, an
abort inside a component called via $m->scomp() still cause the output
generated by that component to disappear.

[ INTERNALS ]

- Output buffering and filtering is handled by the new
HTML::Mason::Buffer class.

- All fatal errors thrown during component execution are exception
objects in the HTML::Mason::Exception class hierarchy.

- The CGI GET/POST argument processing code has been simplified
(submitted by Ilmari Karonen).

- ApacheHandler now uses a special Resolver subclass to translate URIs
to component paths.

- Parameters passed to "set" accessors are now validated in the same
way as constructor parameters.

- The component requested and the arguments it was passed are now
properties of the Request object.

1.02  April 17, 2001

- Completely redesigned error display. The new display includes a
contextual source listing and readable stacktrace. You can access the
old error behavior with the raw_html and raw_fatal error modes.
(implemented by Matthew Lewinski)
- Fixed $m->file to close its filehandle between uses. (reported by
Matthew Lewinski)
- Fixed bad interaction with Mason 1.01 and CPAN module, by adding
version number to ApacheHandler.pm.
- Fixed $m->top_comp to work as documented, and made documentation
a bit more explicit. (reported by Gordon Henriksen)
- Fixed specification of a component root as "foo => /foo" in
httpd.conf. (reported by Chuck O'Donnell)
- Added MasonDeclineDirs, accidentally omitted in 1.01. (reported by
David Wheeler)
- Changed sql examples in Devel.pod to use bind variables. (suggested
by Austin S. Lin)

1.015 April 3, 2001

- Fixed incompatibility with mod_perl < 1.21_01, introduced in 1.01.
- Added 'use Apache.pm' to ApacheHandler.pm, necessary for some
mod_perl installations.

1.01  March 27, 2001

- Implemented configuration of Mason from httpd.conf via PerlSetVar
directives.  This removes the need for a handler.pl file in many
cases.  L{Admin/CONFIGURING MASON VIA httpd.conf}.
- Revamped ApacheHandler tests to use a real Apache web server and
mod_perl (assuming this is installed).  This allows for much better
testing of Mason.  However, the test suite takes a bit longer to run
as starting and stopping the server can take a second or two each
time.
- ** Fixed handling of POST requests with query strings via CGI.pm;
the query string arguments were previously ignored, and are now merged
with POST arguments. This is an incompatible change only for those
whose code relied on the arguments missing.
- Added basic validation of arguments to Parser, Interp,
and ApacheHandler constructors.
- Added interp->die_handler, allowing you to install your own
subroutine as $SIG{__DIE__} to catch errors during component
execution.  Alternately, you can simply turn the special error
handling off.  L{Interp/die_handler}
- Added interp->use_dhandlers and interp->use_autohandlers, more
intuitive ways to turn on/off dhandlers and autohandlers.
- Eliminated interp->verbose_compile_error, which is no longer needed
and has not worked for some time.
- Wrapped each component call in eval, allowing us to simplify the
request stack code.  No visible user change.
- Documented that you cannot call return() from a <%shared> or <%once>
section.  (reported by Paolo Campanella)
- Fixed documentation of escaped newline behavior.
- Fixed incorrect code for using mod_perl args method in
eg/session_handler.pl.

1.0  January 31, 2001

- Identical to 0.896 except for version.

0.896  January 5, 2001

- Fixed bug preventing Mason from working with PerlFreshRestart.
- Fixed use_reload_file to work as documented and not stat() source files. (submitted by Benjamin John Turner)
- Fixed display in Apache::Status.
- Documented the significance of ordering in <%args> sections.
- Fixed documentation of %ARGS with regards to hashes passed in query string. (suggested by Adam Stubbs)
- Added version # to 'use Apache::Session::File' in session_handler.pl.
- Fixed preloads documentation to match reality.

0.895  December 11, 2000

- ** Removed ApacheHandler from Mason.pm. It is now necessary to
explicitly 'use' the HTML::Mason::ApacheHandler module in your
handler.pl file (or elsewhere).  This fixes an intermittent
args_method bug and cleans up Mason.pod.
- ** Changed $m->caller_args to return a hash reference in scalar
context and a list/hash in list context. Older calls expecting a list
reference will need to be changed. L{Request/item_caller_args}
- Fixed Mason to work under Perl's tainting mode again.  Thanks to John
Tobey for pointing us in the right direction.
- Modified the definition of "next component" to depend on the current
component, not merely the number of times $m->call_next has been
called.  This allows $m->fetch_next to work as documented. Also
added $m->fetch_next_all, which returns the rest of the wrapper chain.
L{Request/item_fetch_next}
- Fixed bug with ../.. in component paths.  Versions 0.88 and 0.89
would create multiple object files for a single component and would
allow any filename to be treated as an internal component.  This was
_not_ exploitable externally via Apache, however.  (reported by Pascal
Eeftinck)
- Implemented $m->top_comp and $m->top_args, and fixed documentation
for $m->callers(-1).  (suggested by Kees Vonk) L{Request/item_top_args}
- Added full line comments to <%args> sections. (suggested by Matthew
Lewinski)
- Revamped test harness system with HTML::Mason::Tests, greatly
simplifying the new test creation process.
- Implemented partial compliance with Apache::Filter; Mason can now be
used as a pre-filter but not yet as a post-filter. i.e. Configurations
like "PerlHandler HTML::Mason Apache::Compress" will work.
- Implemented logging of NOT FOUND errors to match plain Apache. Also
issue special warnings for Mason-specific causes of NOT FOUND.
- Documented Mason request object's aborted and aborted_value methods.
L{Request/item_aborted}
- Documented the fact that any variable declared in the <%args>
section must be a valid Perl variable name.  The parser will now give
an error if it encounters an invalid name (such as $foo.x).
- Eliminated upgrade of Apache request object to Apache::Request class
if this were done previously.  (submitted by Shevek)
- Removed FAQ from distribution. Users should seek out the most
current FAQ, now maintained by Kwindla Kramer, on the web.
- Fixed bug where an attempt to escape a substitution that contained a
function operating on a list (like sort or map) ended up appending the
escape flag characters to the list being operated on.
- Fixed the test 08-ah to work with CGI versions >= 3.0. (reported by
Alexei V. Barantsev)
- Fixed a problem with the parser when running with a locale that used
a comma as the decimal separator instead of a period. (reported by
Louis-David Mitterrand)
- Clarified the 'u' escape flag in docs.
- Removed use of $r->finfo in Apachehandler.pm, which causes random
core dumps in certain versions of mod_perl.
- Updated eg/session_handler.pl code to match Apache::Session 1.50+.
- Fixed various problems with debug files.
- Fixed a bug sometimes seen when the parser failed to parse a
component called by another component.
- Fixed a bug that prevented the $m->cache_self method from returning
anything.
- Fixed documentation regarding 'months' and 'years' units in
expire_in cache flag.
- Fixed bug in HTML/Mason/Component/Subcomponent.pm create_time
method.  (reported by Caleb Crome)
- Fixed bug where Mason would try to escape undefined values in a
substitution with an escape flag.  (submitted by Denis Shaposhnikov)

0.89  September 14, 2000

- Fixed broken CGI args implementation from 0.88 (old arguments
appearing in new requests)
- Fixed system log bug from 0.88

0.88  August 30, 2000

>>>>>>> 1.54.2.9.2.15
- Fixed broken Parser postprocessor code (broken since 0.85).  Added
tests for this code path as well as the preprocessor feature.
(reported by Tim Bishop)
- Replaced lots of simple accessors with new HTML::Mason::MethodMaker
(which just makes simple read-only and read-write accessor methods).
- Removed all direct hash key access from one object into another.
- Removed all unneeded uses of Exporter in various modules.
- Added warning about using mod_perl as a DSO to README file.
- Added 'cgi_object' method to HTML::Mason::Request::ApacheHandler.
This method returns the CGI object Mason uses internally (unless
you're using Apache::Request instead in which case its a fatal error).
Added documentation for this. (suggested by many people).
- Squashed warning in assignment to %ARGS in component sub body.
- Fixed call_method and scall_method to take arbitrary list of args
instead of hash.
- Fixed expression escape flags to allow arbitrary following
whitespace.  (reported by Mikhail Zabaluev)
- Added FAQ on how to handle file uploads.
- $m->cache returns the value stored on a successful store action.
- Reduced memory usage by removing unneeded uses of various modules.
On my box I see about a 500k or so reduction in memory use (Dave).
- Removed all uses of the IO::* modules.
- Mason seems to be working under a mod_perl DSO, at least under
mod_perl 1.24 and Apache 1.3.12.  This probably has nothing to do with
Mason but the very adventurous are encouraged to experiment with a
mod_perl DSO and report back to the mason list.

0.87  May 24, 2000

- Fixed multiple GET/POST argument glitch introduced in 0.86.
(reported by Matt Hoskins)

0.86  May 18, 2000

- Fixed multiple-<%perl>-section infinite loop bug introduced in 0.85.
- (Re-)Fixed Apache hang on POST not-found bug.
- Added $m->scall_method, analagous to $m->scomp. (suggested by Michael Shulman)
- When using mod_perl args method, $r is upgraded to Apache::Request object.
(suggested by Matt Hoskins)
- Documented attr, methods, and flags in Component.pod.
- Improved error msg for <%def> or <%method> lacking name.
- Improved error msg for using invalid embedded tag in def or
method. (submitted by Dave Rolsky)
- Eliminated reliance on hash ordering in tests.
- Changed test scripts to create separate data dirs for each test
branch and clear data dir at start of test.
- Added mixed case and repeated sections to <%perl> tests.
- ** Removed mod_perl specific $m->http_input; can no longer be
supported.
- Fixed args processing loop to allow multiple file
uploads. (submitted by Matt Hoskins)

0.85  May 7, 2000

- Added object-oriented primitives to components. Components can
define methods and attributes and inherit from parent components.
Templates can access the current page's methods and attributes for
greater flexibility.  L{Devel/object_oriented_techniques}
- ** Major improvements/changes to autohandler feature. Autohandlers
are now recursive by default, and all applicable autohandlers for a
given page get a chance to run. If you have multiple autohandlers in
parent/child directories, or if you used autohandlers with
allow_recursive_autohandlers=0, you will need to adjust for the new
policy. L{Devel/autohandlers}
- Integrated a revamped parse_component that is cleaner, more modular
and easier to subclass. Courtesy of Dave Rolsky.
- New <%shared> section contains code that executes once per request
and whose declarations are visible from the main component, methods
and subcomponents alike. L{Devel/e_lt_sharede_gt_}
- Added escape flags for <% %> output. Can now HTML-escape or
URI-escape expressions on a site-wide or per-expression
basis. L{Devel/escaping_expressions}
- Added choice of CGI or Apache::Request when using
ApacheHandler. (submitted by Dave Rolsky)
L{ApacheHandler/parameters_to_the_use_declarat}
- Documented $m->clear_buffer, which removes all pending output from
the buffer.  L{Request/item_clear_buffer}
- Fixed keys and expires cache actions from m->cache
interface. (suggested by Matt Hoskins)
- dhandlers can now serve their own directory; added documentation
about handling directories.  L{Admin/allowing_directory_requests}
- Fixed dhandler bug introduced in 0.81 whereby $m->dhandler_arg only
contains the first branch of a multi-branch argument.
- Removed memory leak in ApacheHandler::handle_request_1. (submitted
by Pascal Eeftinck and Renzo Toma)
- Changed parent_comp() to owner() for subcomponents/methods.
L{Component/item_owner}
- Increased maximum recurse level from 16 to 32.
- Reorganized syntax section of developer's manual and added a "how to
use this manual" section.
- Added an UPGRADE guide to distribution.
- Added section about securing top-level components to Admin.pod.
(suggested by Sean Cazzell)
L{Admin/securing_top_level_components}
- Added section about declining image requests to Admin.pod.
L{Admin/declining_image_requests}
- Eliminated "Subroutine status_mason redefined" warning when creating
multiple ApacheHandlers.
- Updated cookie expiration in CD-ME example. (reported by Renzo Toma)
- Added a "-f" flag to rm in faq Makefile. (reported by Jeremy Taylor)

0.81  February 20, 2000

- Fixed small 0.8 bugs with automatic header sending. Headers are now
sent for blank pages and are not sent on an error status code.
- Fixed bug with default system log file. (submitted by Renzo Toma)
- Eliminated memory leak introduced in 0.8 for a few Linux platforms.
(submitted by Renzo Toma and Pascal Eeftinck)
- Fixed bug with component paths displaying two leading slashes.
- Fixed $comp->source_file when multiple comp roots declared.
- Fixed $m->decline in mod_perl mode.
- Removed legacy dhandler code from ApacheHandler.
- Replaced $r->filename with $r->finfo in ApacheHandler.
(submitted by Dennis Watson)
- Added dynamic virtual server configuration example to Admin.pod.
(submitted by Caleb Crome)

0.8  January 23, 2000

- New integrated request API. $m replaces $REQ as the global variable
containing the current request object. All mc_ commands have been
incorporated into $m methods: mc_comp becomes $m->comp, mc_file
becomes $m->file, etc. The old commands still work for now.
L{Request}
- The utility bin/convert0.8.pl converts existing components to use
the new request API.
- Autohandler methods have been renamed: from mc_auto_next to
$m->call_next and mc_auto_comp to $m->fetch_next. This is in
preparation for a more general component inheritance system.
convert0.8.pl handles this change. L{Devel/autohandlers}
- Can now specify multiple component roots in the spirit of @INC.
(suggested by Ewan Edwards and others) L{Admin/Component roots (multiple)}
- Simplified HTTP header behavior. Headers are sent at the end of the
request (in batch mode) or just before the first non-whitespace output
(in stream mode). suppress_http_header no longer needed.
L{Devel/sending http headers}
- New organization of Component class into subclasses
Component::FileBased and Component::Subcomponent. No outward change.
- Updated object file format. Mason should generally auto-detect
and recompile old object files, but may not catch everything. Try
removing your object directory if errors persist.
- ** mc_suppress_http_header command still exists but does nothing.
In most cases this should not cause a problem. The only
incompatibility is if you have used mc_suppress_http_header to
suppress headers completely (i.e. you don't want Mason to send headers
at all); in this case pass auto_send_headers=>0 to ApacheHandler.
- Output mode parameter was moved from ah->output_mode to
interp->out_mode, to make it independent of mod_perl.
ah->output_mode still works. L{Interp/item_out_mode}
- New in-memory code cache keeps track of component usage, and
discards the most infrequently used components as needed.  You can
specify the cache size with interp->max_code_cache_size.  L{Admin/Code
cache}
- ** Eliminated the now unnecessary interp->code_cache_mode.
- ** Eliminated the "source references" optimization, a common source of
bugs, no longer needed with the new code cache.
- Allow arguments to be accessed via @_ as in regular subroutines; no
longer required to be in hash form. (suggested by Ken Williams)
L{Devel/using instead}
- Added $m->scomp, which returns the output of the component call
instead of printing it. This is a cleaner replacement for the STORE
parameter, which still works but is no longer officially documented.
L{Request/item_scomp}
- Added $m->flush_buffer, which forces the buffer to be sent to the
client when in batch mode. L{Request/item_flush_buffer}
- Added $m->caller_args, which returns the argument list for any point
in the stack. (suggested by Lee Semel) L{Request/item_caller_args}
- Added $m->decline, which passes control to the next dhandler.
(suggested by Chuck O'Donnell) L{Request/item_decline}
- Augmented $m->cache_self to cache return values as well as output.
(suggested by Jon Frisby) L{Request/item_cache_self}
- Changed data cache filenames from colon-separated to url-encode
style for Win32 compatibility. (submitted by Ken Williams)
L{Admin/data_caching}
- Added improved, separate session_handler.pl for session handling.
- ** mc_comp_source no longer works for non-existent components.
- ** Removed mc_date legacy command.
- Many new test scripts.
- Added warnings about using Mason with mod_perl DSO.
- Added more site configuration examples to Admin.pod.
L{Admin/configuring virtual sites} 
- Split object parameter methods (interp->comp_root, etc.) into
read/write and read-only as appropriate.
- Fixed request stack corruption when die() or error from one
component is caught by another component's eval.
- Fixed doc_root / comp_root mismatch on case-insensitive O/S.
(reported by John Arnold)
- Fixed "directory not absolute" warning on "/" (reported by Joe Edmonds)
- Fixed reload file scanning mechanism (submitted by Brian Holmes)
- Added use_data_dumper_xs Config.pm item, which checks whether
Data::Dumper::Dumpxs is available. (reported by Pelle Johnsen)
- Added "code examples" section to README

0.72  October 15, 2000

- Eliminated long-standing infinite-block bug when POSTing to a
non-existent URL
- Fixed "keys" cache action which never worked as documented
(submitted by Scott Straley)
- Fixed source references on Win32 platforms by using text mode when
reading object file (submitted by Michael Shulman)
- Fixed various methods in FakeApache
- Remove final slash from system paths (component root, etc.) and
check that those paths are absolute
- Fixed all-text subcomponents, by bypassing the pure-text
optimization
- Quoted all hash strings in object file to reduce "Ambiguous use
of ..." warnings (suggested by Paul Schilling)
- Replaced */* with default-handler as recommended way to bypass Mason
(suggested by Dirk Koopman)
- Removed defunct pure text section in Administrators Guide (reported
by Michael Shulman)

0.71  September 14, 2000

- Logic of top_level_predicate was reversed in 0.7; fixed.
(reported by Tom Hughes, Eric Hammond)
- mc_suppress_http_header(0) was broken in 0.7; fixed.
(reported by Michael Alan Dorman)
- Fixed bug in parser section that determines whether % is at the
beginning of a line.  (reported by Tom Hughes)
- Parser no longer inadvertently accepts argument names with
whitespace.  (reported by Phillip Gwyn)

0.7  September 1, 2000

- Improved core implementation with two new classes,
HTML::Mason::Request and HTML::Mason::Component.  Code is now cleaner
and more scalable, and the new APIs give developers control and
introspection over Mason's inner workings.  L{Devel/component and
request objects}
- Added documentation to accommodate new classes: created
Request.pod and Component.pod, and moved component developer's guide
(previously at Components.pod) to Devel.pod to avoid
confusion. L{Devel/component and request objects}
- Object files have changed significantly (they now return a
component object).  Pre-0.7 object files will be detected and
automatically updated, unless you are running in reload file mode
in which case you are responsible for generating new object files.
- New <%def> section defines a subcomponent embedded inside a larger
component.  This allows repeated code and HTML to be modularized
without affecting the global component namespace.
L{Devel/e&lt%def_i_name_e&gt;}
- <%args> section now accommodates optional comments for declarations
L{Devel/e&lt%argse&gt;}
- Improved Perl translation of <%args> section (submitted by Ken
Williams)
- Autohandler and dhandler file names are now configurable
L{Interp/item_autohandler_name}
- Dhandlers, which formerly worked only in mod_perl mode, now work in
stand-alone mode as well
- Interp::exec is now re-entrant with all request specific information
having been moved to Request class.
- ** Reworked Parser API. parse is now called make_component, has a
simplified set of options, and returns a component object
directly. make is now called make_dirs. L{Parser/item_make_component}
- Source references now read from the object file, cleaner for a
variety of reasons. Preprocess and postprocess now work with source
references.
- Removed obsolete and undocumented Interp::vars and mc_var functions
- Simplified chown/getpwuid usage in handler.pl (submitted by Randal
Schwartz)

0.6.2  August 20, 2000

- Fixed problem with shared data cache locks over NFS (submitted by
Tom Hughes)
- Fixed mc_auto_comp, which never really worked as documented
- Fixed preloading for directories (submitted by Dennis Watson)
- Added back Utils::get_lock, which is used by content management

0.6.1  July 27, 2000

- Added warnings to convert-0.6.pl about occasional erroneous
component call syntax conversions (reported by Oleg Bartunov)
- Fixed conversion of <% mc_comp("/foo/$bar") %> (reported by Oleg
Bartunov)
- Fixed cache access under high concurrencies (reported by Oleg
Bartunov)
- Fixed uppercase <%PERL>, broken in 0.6 (reported by Daniel L. Jones)
- Fixed mc_suppress_http_header(0), broken in 0.6 (reported by Jim
Mortko)

0.6  July 16, 2000

- New <& &> tag provides a more convenient way to call components
inside HTML. mc_comp still works. L{Devel/components that output html}
- The "perl_" prefix has been eliminated from section names: now
simply use <%init>, <%cleanup>, <%args>, etc. The old names still
work. L{Devel/other perl sections}
- The utility bin/convert0.6.pl converts existing components to use
the above new syntax.
- New autohandler feature finally provides an easy way to specify a
common template or behavior for a directory. An autohandler is invoked
just before any top-level components in its directory begins executing.
It can display header/footers, apply a filtering function, set up
globals, etc.  A good complement to dhandlers. L{Devel/autohandlers}
- New <%once> section contains code that will be executed once when a
component is loaded.  It is useful for defining persistent variables
and named subroutines.  L{Devel/e&lt%oncee&gt;}
- New <%filter> section and mc_call_self command allow you to arbitrarily
filter the output of the current component. L{Devel/filtering}
- New <%text> section allows you to turn off Mason processing for a
particular section of text.  L{Devel/e&lt%texte&gt;}
- Implemented first installation test suite! [modus]
- HEAD optimization: we now automatically abort after headers are sent
on a HEAD request.
- New Parser make() utility traverses a tree of components, compiling
any out-of-date components into object files and reporting errors.
L{Parser/item_make_dirs}
- New mc_comp_source command returns the source filename of this or
any component.  L{Commands/item_mc_comp_source_compPath_}
- mc_file now uses current component path by default for relative paths
if no static_file_root defined (suggested by John Landahl)
- Various previewer interface improvements
- Removed link tags in pods documentation due to 5.004 problems
- Took out previewer stub from Mason.pm to eliminate "subroutine
redefined" warning
- Updated makeconfig.pl to prefer GDBM_File, to avoid a bug in
Berkeley DB 1.x
- Cleaned and sped up interp hooks facility
- Stopped substituting control characters for section strings in Parser
[modus]
- Fixed mc_cache 'expire' bug (reported by Aaron Ross)
- Changed ignore_warnings default to ignore "subroutine redefined"
warnings to make <%once> more useful
- Removed defunct Safe code from Parser and defunct ALLOW_HANDLERS
code from Interp
- Added index file to htdocs/

0.5.1  June 10, 2000
- Removed leftover "use File::Recurse" in ApacheHandler.pm [modus]
- Added empty test target to FAQ Makefile, required on certain
architectures [modus]

0.5   June 3, 2000
- Removed memory leak associated with "return sub { ... }"
- Overhauled Config.pm, now maintains previous configuration when
upgrading Mason (suggested by Patrick Kane)
- Made filename processing compatible with Windows 32 (suggested by
Rafael Weinstein)
- Removed requirement of File::Tools/File::Recurse, replaced with
standard File::Find
- Switched output to STDOUT from $r->print, to facilitate chaining
with other mod_perl tools
- Switched to standard argument processing code, now handles
multi-part forms [modus]
- New preprocess and postprocess Parser options allow you to apply
auomatic modifications to components, before or after they are compiled
into code. (submitted by Philip Gwyn) L{Parser/item_preprocess}
- New in_package Parser option allows components to live in any
package. (submitted by Philip Gwyn) L{Parser/in_package}
- Added documentation about using globals in components, and
some new facilities: Parser option 'allow_globals' and Interp
method 'set_global'. L{Admin/using global variables}
- Documented how to save persistent user information with Apache::Session [modus]
L{Admin/persistent user sessions}
- ** Changed behavior of reload_file mode to read directly from object
files. If you use reload files, you're now responsible for
creating object files. [mschmick]
- Reduced number of file stats when loading components [mschmick]
- New apache_status_title ApacheHandler option makes it possible to
use Mason's perl-status page with multiple ApacheHandler objects.
(submitted by Philip Gwyn) L{ApacheHandler/item_apache_status_title}
- Upgraded FakeApache/debug files to work with mod_perl 1.19
- New sections in Component Developer's Guide explain how debug files
work and some caveats about when they don't. L{Admin/debugging}
- Mentioned mailing lists, masonhq.com web site, and FAQ in the
documentation and README
- Improved documentation on how to integrate images and non-Mason
hierarchies with Mason. L{Mason/item_Do_you_plan_to_intermix_images_a}
- Differentiated mc_cache and mc_cache_self in the commands manual
(suggested by Tom Hukins)
- Increased discouraging of SDBM, improved warnings when cache store
fails (suggested by Patrick Kane)
- Fixed HTML documentation to work with IE (suggested by Fen Lebalme)
- Fixed infinite loop in ApacheHandler dhandler search (submitted by
Chuck O'Donnell)
- Documented Parser method parse(), which allows you to compile
components outside of a Interp environment. L{Parser/item_parse}
- New mc_cache actions 'expire' and 'keys' help you peer into data cache
files and expire selected keys. L{Devel/item_By_Explicit_Action}
- Corrected Parser to properly handle \ in components (submitted by
Ken Williams)
- ** Took Preview out of Mason.pm; ApacheHandler used only if mod_perl
environment. If you use the previewer, you now have to explicitly "use
HTML::Mason::Preview" in your handler.pl.
- Improved documentation about argument/GET/POST handling (suggested
by Ken Williams) L{Devel/passing_parameters}
- Added cache option 'busy_lock', which prevents multiple processes
from recomputing an expire cache value at the same time.  (suggested
by Dennis Watson) L{Devel/busy_locks}
- Inserted work-around for Perl 5.005 $r scoping bug (submitted by
Rafael Weinstein)
- Fixed "new CGI" example in Components.pod (submitted by Austin Lin)
- Fixed "return if content-type..." line in handler.pl and Mason.pod
(submitted by Patrick Kane)
- Added CREDITS file

0.4  January 06, 2000
- Added support for using Perl profiler in conjunction with debug
files
- Fixed bug in previewer HTML trace introduced in 0.3
- Created Perl status section for Mason
- Removed most warnings when PerlWarn is on (suggested by Philip Gwyn)
- Added code_cache_mode parameter to control caching of components in
memory
- Fixed mismatch between documentation and code with regards to cache
store events in system log.  The real event name is CACHE_WRITE.
- Changed system logging to use canonical server name when recording
URI
- Field access methods inside Mason objects are now handled with
custom subroutines instead of generic AUTOLOAD, improving performance
- Information for debug file is no longer collected if debug mode is
"none"
- Code to decline images and other non-text requests was placed in
default handler.pl and described in documentation (suggested by
Patrick Kane)
- Fixed server header output from debug files (suggested by Ewan
Edwards)
- Created a Mason bundle
- Created a CPAN "alias" from Apache::Mason to HTML::Mason

0.3   November 25, 1999
- Added optional system logging of page requests, cache activity,
component loading
- Deny directory requests so that index files will work in mod_perl
1.16+
- Removed reliance on several external packages (Date::Manip,
CGI::Base, URI::Escape). This should reduce the amount of memory taken
up by Mason processes and make Mason easier to install.
- ** Due to the removal of Date::Manip, the mc_date command will no
longer work unless Date::Manip is explicitly used, and the syntax for
the expire_at cache parameter and the Interp current_time parameter
have changed.
- Added parser taint_check flag which allows Mason to work with taint
checking on (suggested by Randal Schwartz)
- Added warning messages when returning 404 from ApacheHandler
- Improved cache locking with the use of separate lock files
- Makefile.PL checks for required and optional packages
- Documentation fixes and improvements
- Removed obsolete and undocumented commands from Commands.pm
- Failure to write debug file is now a warning rather than fatal error
- Augmented "no configuration for previewer port" error
- Fixed $interp->exec to be able to return list
- Changed parser to remove ctrl-Ms instead of replacing with spaces
- Always call http_header hook, not just at top level
- Added global IN_DEBUG_FILE flag
- Renamed mc_call_stack to mc_comp_stack to match documentation

0.2   August 21, 1999
- Replaced File::lockf module, which could not port to some systems,
with simple call to flock
- Corrected email address in README
- Fixed undeclared variable bug in preview component
- The previewer did not work in basic versions of Perl 5.004 due to an
eval scoping bug. A workaround was put in place.
- Fixed expire_if cache option to pass correct argument to provided
subroutine
- Empty argument section no longer parsing incorrectly
- Took out directory names from manifest which were causing errors on
install
- Debug file is no longer prepared when debug_mode is "none"
- Use Preview.pm in Mason.pm

0.1   July 22, 1999
- Original version; created by h2xs 1.18
