Revision history for HTML::Mason.
An HTML version of this file, complete with links to documentation, is
available at http://www.masonhq.com/code/history.html.
** denotes an incompatible change
1.18 January 24, 2003
[ BUG FIXES ]
- Require Exception::Class 1.09. Version 1.08 has a bug that causes
problems with Mason when used with any Perl earlier than 5.8.0.
- Fix a bug in the lexer code that caused Mason to not work with Perl
5.00503 at all.
1.17 January 17, 2003
[ ENHANCEMENTS ]
- Added "REQUEST:" as a component specifier for method comp calls,
similar to "SELF:" and "PARENT:". "REQUEST:" is short-hand for
$m->request_comp. Suggested by Manuel Capinha, among others.
- Added $m->call_self. This was present in Mason pre-1.10, and has
been added back per Jon Swartz's request.
- Added $comp->attributes, similar to $comp->methods. This just
returns attributes for a given component object. It doesn't return
attributes inherited from a parent. Suggested by Matti Makitalo.
[ BUG FIXES ]
- ** When $m->cache_self was used for a component with a filter block,
the output would be cached _before_ filtering, and filtered every time
it was retrieved from the cache. This has been fixed, and the
documentation now specifies that the filtered output is cached.
- Fixed failure of 12-taint.t #7 on Win32 boxes. Reported by Randy
Kobes.
- Without HTML::Entities installed, 13-errors.t #7 failed. Reported
by Sam Kington.
- $m->file did not handle relative paths properly when called from a
subcomponent or method. Reported by Chris Hutchinson.
- If $m->abort was called in the shared block of a component that had
a filter, then a fatal error occured. Reported by Chris Pudney.
- Mason was not cooperating with Apache::Filter, and attempts to
filter Mason's output did not work. Fixing this also requires
Apache::Filter 1.021, if you are using Apache::Request to handling
incoming arguments. Reported by by Manuel Capinha.
- Mason assumed that if Scalar::Util loaded without errors, it had a
weaken() subroutine. However, Scalar::Util provides a pure Perl
implementation that does not include this subroutine. Now we check
for this subroutine explicitly. Reported by Autrijus Tang.
- Some code constructs, such as qw() lists, would end up being turned
into invalid code during component compilation. Reported by Robert
Landrum.
- Subclassing a subclass of HTML::Mason::Request broke when the class
between HTML::Mason::Request and your own class called
alter_superclass.
- Under mod_perl 2.0, when ApacheHandler could't resolve a filename to
a component, it would die instead of returning a not found status.
[ INCOMPATIBLE CHANGES ]
- Removed the long deprecated and undocumented $comp->parent_comp
method. Use $comp->owner instead.
1.16 December 13, 2002
[ ENHANCEMENTS ]
- Documented behavior of $m->flush_buffer when a filter is present.
- Turned off "nowrap" for error message on HTML error page. No more
horizontal scrolling!
- Substantially rewrote portions of the Admin Guide, in order to
improve and clarify the portions related to configuring and
customizing Mason under mod_perl.
- Added back "raw error" on HTML error page.
- Replaced FilesMatch with LocationMatch in docs and FAQ, because
using FilesMatch means you can't use dhandlers.
- Reduced memory usage when compiling large components. Memory usage
for smaller components hasn't changed much, but they weren't really a
problem in the first place.
- Added a cgi_request method to the CGIHandler::Request object, which
parallels the apache_req method offered by the ApacheHandler::Request
object.
[ BUG FIXES ]
- When using the code cache within an Interp, a circular reference was
created which prevented the Interp object from ever being destroyed.
With Perl 5.6.0+, this will be automatically prevented by using weak
references as needed. With Perl 5.00503, you will need to call the
new Interp->flush_code_cache method in order to break the circular
reference. This bug could cause memory leaks with code that created
new Interp objects over time, though most uses of Mason do not do
this. Reported by Kate Porter.
- Fixed bad parsing of <% $foo || 50 %>. Mason was interpreting this
as an escape flag. Escape flags now much match /^[[:alpha:]_]\w+/ and
Mason specifically looks for || in a substitution as well. Reported
by Kwindla Kramer.
- If a dhandler one subdirectory down (like /foo/dhandler) called
$m->decline, Mason threw a bogus exception. Fixed by Harmen.
- Running the test suite caused an error in the shell on Win32 with
newer versions of MakeMaker. Reported by Murat Unalan. (We _think_
this is fixed but we'd like confirmation from a Win32 user).
- It was not possible to set the data_cache_defaults parameter from
the httpd.conf file. Now it is.
- Mason was using Apache::Request->new instead of
Apache::Request->instance. This meant that if you had a handler that
ran earlier (like a TransHandler) and that handler created an
Apache::Request object, then the one Mason created would be missing
any POST arguments. Reported by Ray Zimmerman.
- Several different places in the docs said that Cache::Cache accepts
a username option, but there is no such thing.
- alter_superclass didn't work with CGIHandler because CGIHandler
didn't define a $VERSION variable. Reported by Nadine and Harry
Laxen.
- Made CGIHandler merge together POST and query string arguments in
order to be consistent with ApacheHandler. Reported by Nadine and Harry
Laxen.
- The CGIHandler module was overriding any out_method provided by the
user. Reported by Nadine and Harry Laxen.
1.15 October 14, 2002
[ BUG FIXES ]
- Fixed a number of problems with filters:
-- They didn't see changes made to %ARGS (they were seeing a copy).
-- They couldn't see any variables declared in <%args> blocks.
-- The presence of a filter caused a call to $m->flush_buffer,
breaking redirects.
- Added a number of tests for filters (*cough*).
- Fixed broken links and other bugs in the POD and HTML versions of
the docs.
- Fixed test failures when running as root. These failures were not
reflective of bugs in Mason, simply problems in the tests or test
setup. Now we skip the tests for end user installs (we still run them
during development, never fear).
- HTML::Mason::Request contained code that caused an error when using
the CPAN shell's "r" command.
1.14 October 7, 2002
[ BACKWARDS COMPATIBILITY ]
- Added compatibility layer for 1.0x cache API. It is now possible to
use $m->cache and $m->cache_self in the old way by setting the
data_cache_api parameter to '1.0'.
- Added back $comp->create_time, which was renamed as $comp->load_time
in 1.09_02, as a deprecated method.
- Added back $interp->time and $m->current_time, which were removed in
1.09_01, as deprecated methods.
[ ENHANCEMENTS ]
- Implemented the long requested user-defined escapes feature. It is
now possible to define your own escape flags, as well as overriding
Mason's own 'h' and 'u' flags.
- Implemented expire_if and busy_lock options in new $m->cache->get
API. These retain the essence of the 1.0x options although both
work a little differently.
- Added new module to implement caching extensions,
HTML::Mason::Cache::BaseCache, with accompanying documentation.
- Enhanced Params.pod with TOC and full descriptions of all
parameters. Standardized rest of documentation to link to Params.pod
when referring to a parameter.
- When a component path is not found, but that path matches a file on
disk, we now print an extra warning, because this indicates that the
user does not understand the distinction between component paths and
filesystem paths.
- The Request object's redirect() method now accepts an optional
additional argument, allowing users to use a status code other than
302 for the redirect.
- Mason should now work on a box with a fresh mod_perl 2/Apache 2
install. Previously, Mason unconditionally tried to load
Apache::Status, which comes with mod_perl 1.x, but not (yet?) with
mod_perl 2.
[ BUG FIXES ]
- Installation was failing when Exception::Class wasn't installed.
- Calling <%def> subcomponents no longer changes base_comp, which is
important in autohandlers. (reported by Ian Robertson)
- The documentation incorrectly indicated that you could create an
ApacheHandler object during server startup without providing a
component root. This will also shown incorrectly in the sample
handler.pl in the eg/ directory.
- Reduced Mason's memory usage when compiling and serving components.
This is particularly noticeable with very large components (1-2MB or
greater). Work on this will continue for future versions. (reported
by Todd Holbrook)
- %ARGS and <%shared> variables could not be accessed from <%filter>.
(reported by Adam Roth)
- Switch.pm did not work in file-based components. (reported by Gert
Thiel)
- use_strict could not be turned off. (reported by Viacheslav
Voytovich)
- $m->clear_buffer (and $m->redirect) did not work inside a component
call with content. (reported by Manuel Capinha)
- Some tests were failing on Windows, because they assumed Unix style
filesystem paths. This was a problem with the tests, not the core
code, but still worth fixing. (reported by Adam Rinehart).
- $m->caller() was inadvertently left out of the documentation - fixed.
- Fixed a small documentation error about what kinds of things are
valid keys in <%flags> and <%attr> blocks.
- Configuring multiple component roots via the httpd.conf file failed
silently (as opposed to releases 1.10 - 1.12, where this failed with
an error).
- Unreadable component source files caused the confusing error message
"source callback returned no source". This will now throw a much more
helpful exception.
- Errors occuring in subrequests would cause error output to be mixed
with regular output when the error_mode was "output" (the default with
ApacheHandler and CGIHandler). Errors in subrequests should now look
the same as errors in the top request.
1.13 August 26, 2002 (Taiwan time)
[ ENHANCEMENTS ]
- Replace the regex "[A-Za-z0-9]" with "\w", which should cooperate
better with Unicode.
- Added a section called "Avoiding Concurrent Recomputations" to the
Developer's Manual. This describes how to achieve the same effect as
was provided by the "busy locks" feature in 1.0x.
[ BUG FIXES ]
- When running under mod_perl, a warning was issued from
HTML::Mason::Request::ApacheHandler's exec() method. (reported by
Marius Feraru)
- The request wrapper code did not work with anonymous component.
(reported by Bob McElrath)
- Mason 1.10-1.12 did not cooperate with Apache::Filter, or any other
Apache subclass that overrode the print() method. (reported by Mark
Moseley)
- If an object blessed into Apache::Request was provided to
ApacheHandler's handle_request method, and you were using the
args_method parameter was set to "mod_perl" (the default), then
ApacheHandler would die. This was a bug introduced in 1.12 as a
result of fixing the memory leaks in 1.11. (reported by Autrijus
Tang)
- Configuring multiple component roots via the httpd.conf file failed.
(reported and patched by Alexei V. Barantsev)
- $interp->exec and $m->exec were not respecting wantarray. (reported
by David Bushong)
- Suppress a "subroutine redefined" warning from
HTML::Mason::Request::Apachehandler's exec() method. (reported by
Marius Feraru)
- Combining cache_self, <%filter> blocks, and $m->scomp did not work.
(reported by Calle Dybedahl)
- Tests 4 & 5 for 06-compiler.t would fail if HTML::Entities was not
installed. Now they will be skipped if necessary.
- Tests 75 & 99 for 08-ah.t depended on hash key ordering and would
fail with Perl 5.8.0. (submitted by Michael Gray)
- Fixed a number of cases where the lexer/compiler's behavior differed
from Mason 1.05 in unintended ways.
-- Dashes were not being allowed in subcomponent and method names,
even though this is documented as being allowed. (reported by Ken
Miller)
-- Space between a method or subcomponent name and the '>' at the end
of the tag was not being allowed. It should be noted that this is not
documented as being allowed in the docs, and so may change in the
future. But for now, we'd rather be compatible with 1.05. (reported
by Chris Hutchinson)
-- Comments were not being allowed after flag and attribute
assignments. Again, this is not documented as being allowed.
(reported by Chris Hutchinson)
- CPAN thought that version 1.68 of HTML::Mason::ApacheHandler (part
of the 1.05 release), was newer than version 1.242 (part of the 1.1201
release). This is what we get for using CVS to set verson numbers.
This version number is now set by hand in order to make sure that this
does not happen in the future.
1.1201 July 24, 2002
[ ENHANCEMENTS ]
- Added details to the UPGRADE document on what has changed with the
caching system.
- Added some documentation on how to arbitrarily expire items in the
cache with the new caching system. This is in HTML::Mason::Devel.
[ BUG FIXES ]
- Fixed a compilation error in HTML::Mason::Tools that was occuring
with Perl 5.00503.
- Made sure that <%method> and <%def> tags are treated
case-insensitively.
1.12 July 23, 2002
[ ENHANCEMENTS ]
- Various optimizations have been added to this release in order to
address the fact that Mason 1.11 is quite a bit slower than 1.05. One
major factor was optimizing Params::Validate and Class::Container, so
for that reason this version of Mason requires Params::Validate 0.24
and Class::Container 0.07. With these modules installed, this release
shows improvements of up to 50-60% in benchmarks that stress Mason's
weaknesses, with other benchmarks showing up to a 100% improvement.
- Made subclassing CGIHandler more useful by breaking out its arg
processing into a request_args method, just like ApacheHandler.
- Added alter_superclass method to Request class, for use by Request
subclasses. See the HTML::Mason::Subclassing document for details.
[ BUG FIXES ]
- Fix HTML generated for error messages so that tags balance out.
Unbalanced table tags caused this page to not display properly with
Netscape 4.x.
- Fix nasty memory leaks in ApacheHandler.
1.11 July 3, 2002
[ BUG FIXES ]
- The 08-ah.t tests failed with a runtime error if run by root. This
was not a Mason bug, but a bug in the test code itself.
- ApacheHandler did not work Perl 5.005.
- Even if ApacheHandler was given an Apache::Request object to
handle_request() or prepare_request(), it was still calling
Apache::Request->new. (reported by Ray Zimmerman)
- Fixed incorrect $m->make_subrequest documentation. (reported by Ray
Zimmerman)
- Added some incompatibilities in 1.10 to the UPGRADE document that
were left out in previous versions.
- HTML error output could be sent as plain text or some other content
type depending on your Apache config and the file extension of the
requested component. Now we explicitly set $r->content_type before
sending HTML error output.
- Fix failures of Resolver::File::glob_path() with Win32. (reported
by Adam Reinhart)
1.10 June 25, 2002
This is a big release and there are a number of backwards
incompatibilities with version 1.05 and earlier. Please make sure to
read the UPGRADE document, which covers these in more detail.
[ ENHANCEMENTS ]
- Mason can always detect when an object file was compiled with an
incompatible compiler/lexer, even if the object file contains syntax
errors.
- Method and subcomponent blocks with no name (<%method>) were caught
as an error, but the error message was very confusing. This has been
fixed.
- Added HTML::Mason::Subclassing, documentation on subclassing Mason
objects.
- Added documentation on the interaction between <%once> sections and
preloading components.
- Mason automatically calls $m->clear_buffer when $m->decline is
called.
[ BUG FIXES ]
- Fixed a bug in the lexer that made it think it had found a Perl-line
where none existed.
- Fixed a bug related to handling of parameters in httpd.conf files.
This was only noticeable if you attempted to provide a subclass of one
of Mason's classes (like your own Request class) that took its own
parameters. Mason was not recognizing those additional parameters as
valid.
- Improved line number reporting from earlier releases. Line numbers
are now reported properly for errors in any type of block.
1.09_02 June 4, 2002
[ INCOMPATIBLE CHANGES ]
- ** The Component class's create_time method has been renamed as
load_time.
- ** Relative component paths in the $interp->exec() method are no
longer resolved. All component paths must be absolute. Relative path
resolution was added in 1.09_01 so this change is unlikely to affect
most users.
- ** Removed option to expire a component from the Apache::Status
page. This option made little sense since components are cached
per-process, and there's no guarantee that any particular process has
cached a given component. Again, this is a feature added in 1.09_01
so this change should not cause most people any problems.
- ** Renamed CGIHandler's handle_cgi method to handle_comp.
- ** Removed the dev_dirs feature from CGIHandler.
- ** The default component root when not using ApacheHandler or
CGIHandler is now the current working directory at the time the
HTML::Mason::Resolver::File class is loaded.
[ ENHANCEMENTS ]
- All the modules included with Mason are now documented.
- Various pieces of existing documentation have been tweaked and
modified.
- Added handle_cgi_object method to CGIHandler.
- Mason works with the CVS version of mod_perl 2.0 when mod_perl 2.0's
backwards compatibility layer is used. AFAICT, the CVS version is
close enough to what will be released as 2.0 that few, if any, changes
should be required once 2.0 is out.
- When running Mason with the ApacheHandler or CGIHandler modules, the
Mason request object ($m) now has a "redirect" method, which can be
used to send an HTTP redirect to the client.
[ BUG FIXES ]
- $m->flush_buffer was sending out '' to the buffer, even if no output
existed. This caused ApacheHandler to send headers, which broke
redirects, for example.
- Fix broken Apache::Status page (reported by Thomas A. Lowery).
- The lexing code now handles some weird edge case errors in a better
way. One of these involved a component starting with a invalid block
name like <%foo>.
- A component that compiles into Perl code that causes syntax errors
seems to trigger a Perl bug when Mason attempts to eval it. The
symptom is that Mason simply hangs when it tries to eval the
component's object file. This bug is present in Perls before 5.7.3,
but appears to be fixed in the development branch. Mason will use
alarm, if supported by the system, to work around this.
- Output from subrequests was appearing _before_ other component
output. The new default is that this output appears "inline" in the
calling component, which we think is most DWIM-ish. Alternate
behavior can be achieved by explicitly setting the subrequest's
out_method parameter.
- The $r object provided by CGIHandler.pm was not passing header
values to CGI.pm in a way that CGI.pm liked. Now we add a '-' to the
front of the header name if necessary, and all headers are canonized
to lower case in order to avoid having duplicates.
- Mason only requires Apache::Request if you have mod_perl installed
already.
1.09_01 April 4, 2002
[ 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.
- ** The debug file feature has been removed.
- ** The previewer has been removed.
- ** The system log feature has been removed.
- ** The Interp use_reload_files parameter has been removed. The new
static_source parameter provides a useful, and conceptually simpler,
replacement.
- ** 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 its 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.
- ** The HTML::Mason::Interp time() method has gone away.
- ** The base_comp is now changed for each component call, unless that
component call uses a component object for its first argument, or the
call starts with SELF: or PARENT:.
- ** The "perl_" prefix for Mason tags is no longer supported.
[ ENHANCEMENTS AND NEW FEATURES ]
- It is now possible to pass chunks of component content as part of a
component call.
- Mason now supports subrequests via the new $m->subexec and
$m->make_subrequest methods.
- 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').
- 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.
- The ApacheHandler args_method is now a per-object parameter.
- Mason is now much smarter about recompiling components. In general,
it can detect if compiler options for a compiled component are
different from the current options, and will recompile the component
if necessary. The exception to this is that with compiler parameters
which take callbacks (such as preprocess), Mason can only tell if such
a parameter is present, not whether the actual callback has changed.
- The ApacheHandler object will chown any files created during server
startup as needed.
[ 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.05 April 30, 2001
- Fixed improper handling of parameters for non-GET/POST
request. (submitted by Radu Greab)
- Fixed Interp to accept a resolver object param. (reported by Bojan
Jovanovic)
- Fixed infinite loop when calling $m->decline with // in dhandler
arg. (reported by Baldur Kristinsson)
1.04 October 30, 2001
- Fixed locale parser_version 0,8 problem. (submitted by Louis-David Mitterrand)
- Fixed inability to use '/' for comp_root. (reported by Doug Hunt)
- Fixed HTML::Mason::Parser::make_dirs dying when reload_file not
defined. (reported by Ivan E. Panchenko)
- Made error_process regexps more specific. (suggested by Vadim Belman)
- Fixed $m->count. (reported by David Wheeler)
- Fixed writing of object files in taint mode. (submitted by Barrie Slaymaker)
- Made it possible to run Makefile.PL without prompts.
1.03 May 17, 2001
- Made raw error message accessible from the new error display via
an unobtrusive link.
- Fixed Apache tests when started by a non-root user. (reported
by Barrie Slaymaker)
- Added short-circuits for Apache tests on Win32 and on systems with
Apache configurations that cannot be properly parsed. (reported by
Jindra Vavruska)
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.
- 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.
- 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.
- 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.
- 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)
- 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.
- 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
- 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.
- ** 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.
- 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.
- Added escape flags for <% %> output. Can now HTML-escape or
URI-escape expressions on a site-wide or per-expression
basis.
- Added choice of CGI or Apache::Request when using
ApacheHandler. (submitted by Dave Rolsky)
- Documented $m->clear_buffer, which removes all pending output from
the 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.
- 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.
- 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)
- Added section about declining image requests to Admin.pod.
- 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.
- 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.
- Can now specify multiple component roots in the spirit of @INC.
(suggested by Ewan Edwards and others)
- 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.
- 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.
- 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.
- ** 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)
- 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.
- Added $m->flush_buffer, which forces the buffer to be sent to the
client when in batch mode.
- Added $m->caller_args, which returns the argument list for any point
in the stack. (suggested by Lee Semel)
- Added $m->decline, which passes control to the next dhandler.
(suggested by Chuck O'Donnell)
- Augmented $m->cache_self to cache return values as well as output.
(suggested by Jon Frisby)
- Changed data cache filenames from colon-separated to url-encode
style for Win32 compatibility. (submitted by Ken Williams)
- 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.
- 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.
- 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.
- 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.
- <%args> section now accommodates optional comments for declarations
- Improved Perl translation of <%args> section (submitted by Ken
Williams)
- Autohandler and dhandler file names are now configurable
- 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.
- 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.
- The "perl_" prefix has been eliminated from section names: now
simply use <%init>, <%cleanup>, <%args>, etc. The old names still
work.
- 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.
- 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.
- New <%filter> section and mc_call_self command allow you to arbitrarily
filter the output of the current component.
- New <%text> section allows you to turn off Mason processing for a
particular section of text.
- 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.
- New mc_comp_source command returns the source filename of this or
any component.
- 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)
- New in_package Parser option allows components to live in any
package. (submitted by Philip Gwyn)
- Added documentation about using globals in components, and
some new facilities: Parser option 'allow_globals' and Interp
method 'set_global'.
- Documented how to save persistent user information with Apache::Session [modus]
- ** 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)
- 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.
- 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.
- 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.
- New mc_cache actions 'expire' and 'keys' help you peer into data cache
files and expire selected keys.
- 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)
- Added cache option 'busy_lock', which prevents multiple processes
from recomputing an expire cache value at the same time. (suggested
by Dennis Watson)
- 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