<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Rivet 2.1: Release Notes and Known Problems</title>
    <link rel="stylesheet" href="../templates/wondrous/styles.css" type="text/css" />
</head>

<body>
    <div id="container">
        <div id="header">
            <h1><a href="../index.html">Rivet</a></h1>
            <h2 id="slogan">Webscripting for Tcl'ers</h2>
            <div class="clear"></div>
        </div>
        <div id="body">
            <div id="content">
                <h2>Rivet 2.1: Release Notes and Known Problems</h2>
                <div>
    <div class="sez">
        <h4>Download</h4>
        <p>
                    Rivet 2.1 is available for download from ASF mirror sites. Check the 
                    <a href="download.html">download page</a>

 for information about 
                    downloading the source code, rpm files or packages for SuSE, 
                    Redhat, Debian and Ubuntu (packages for SuSE and Redhat are available thanks to 
                    Harald Oehlmann).
                                    </p>
        <p>
                    Code integrity for this release can be checked using the 
                    public keys in the <a href="http://www.apache.org/dist/tcl/KEYS">KEYS</a>

 file.
                                    </p>
        <p>
                    Rivet 2.1 works with the Apache Webserver version 2.x (running the 
                    <strong>prefork</strong>

 MPM) and requires Tcl &gt;= 8.5.11
                                    </p>
    </div>
    <div class="sez">
        <h4>Rivet 2.1.4 Release Notes</h4>
        <p>New features</p>
        <ul>
            <li>New subcommand <tt>script</tt>

 for command <strong>::rivet::inspect</strong>

 returns
		   	      the full path to the current Rivet template or URL referenced script. In case
		   	      this command is invoked from outside a request processing the string value
		   	      by [info script] is returned                            </li>
        </ul>
        <p>Bug fixed and code reorganization</p>
        <ul>
            <li>Changed value returned by command <strong>headers redirect</strong>

 that caused
		   	      mod_rivet to fail with Tcl 8.6.1 (Fixes bug #55583)                            </li>
            <li>Reorganized autotools build scripts</li>
            <li>Redundant log message in ApacheRequest___parse() removed (fixes bug #55845)</li>
            <li>Small optimization attained by moving allocation of a control structure process
		   	      from the request processing scope into the process scope</li>
            <li>Removed call to Tcl to coax the Tcl command <strong>info script</strong>

 into 
		   	      returning the current rivet template name. This feature was undocumented
		   	      and the task has been devolved to the newly created <strong>::rivet::inspect script</strong>

 
		   	      command                            </li>
            <li>Fixed some comments that were breaking Tcl 8.6 (comments cannot go into a Tcl
		   	      <strong>switch</strong>

 command body)                            </li>
        </ul>
    </div>
    <div class="sez">
        <h4>Rivet 2.1.3 Release Notes</h4>
        <ul>
            <li>installation target 'make install' restored to its previous
                        functionality (hence the whole module and packages are installed)
                        by making it depend on two targets <i>install-binaries</i>

 and
                        <i>install-packages</i>
            </li>
            <li>New variant 'parse -string' to parse templates stored in strings</li>
            <li>Improved safety of command <strong>::rivet::parray</strong>

 
                    by escaping SGML characters in the output                            </li>
            <li>Improved detection of <b>SELECT</b>

 queries in <strong>::DIO::Mysql</strong>
            </li>
            <li>Various fixes in package <b>Calendar</b>
            </li>
            <li>Changed names of deprecated variables in autotools scripts</li>
        </ul>
    </div>
    <div class="sez">
        <h4>Rivet 2.1.2 Release Notes</h4>
        <ul>
            <li>various bug fixes to form2.tcl</li>
            <li>documentation improved for the form package and for the installation process</li>
            <li>libtool/autotool scripts update</li>
            <li>mod_rivet.c: fixed call to panic that refused to compile with Tcl8.6</li>
            <li>apache request: relaxed restrictions on HTTP methods accepted</li>
            <li>binary module/libraries and Tcl packages installations were split. 
		   				Rivet installation is a two step process now. This should make possible
		   				to create arch independent archives/packages of code written in Tcl and
		   				shipped with Rivet
		   			</li>
        </ul>
    </div>
    <div class="sez">
        <h4>Rivet 2.1.1 Release Notes</h4>
        <h5>Bug Fixes</h5>
        <ul>
            <li>
                       Fixed bug #54162: mod_rivet is now coexisting with mod_websh
                    </li>
            <li>
                        Checks on 'Content-Type' relaxed (Bug #53661). Rivet is now only
                        checking if such fields is the headers table.
                    </li>
            <li>
                        Rivet is now also handling PUT and DELETE requests (Bug #53661)
                    </li>
            <li>
                        New command ::rivet::xml for XML fragments composition
                    </li>
        </ul>
    </div>
    <div class="sez">
        <h4>Rivet 2.1.0 Release Notes</h4>
        <h5>New commands and Directives</h5>
        <p>
                    Starting with rivet version 2.1 the whole set of commands was moved into the 
                    <strong>::rivet</strong>

 namespace. For compatibility with existing software
                    commands are by default in the <strong>::rivet</strong>

 namespace export list 
                    and automatically imported into the global namespace. 
                    You can change this behaviour in two ways:
                                    </p>
        <ul>
            <li>
                        By disabling the automatic import from the <strong>::rivet</strong>


                        namespace configuring the build system with the 
                        <em>--disable-import-rivet-commands</em>

 switch
                                                </li>
            <li>
                        By disabling the export of the commands, thus forcing scripts to
                        use the fully qualified name of a command using configure's 
                        <strong>--disable-rivet-commands-export</strong>

 argument
                                                </li>
        </ul>
        <p>
                    A new <strong>RivetServerInit</strong>

 directives was introduced. 
                    <strong>RivetServerInit</strong>

	accepts as argument a Tcl script to be run
                    during the initialization stage of the webserver. This phase takes places 
                    before the child processes are forked. More details are available in the manual.
                                    </p>
        <p>
                    A new <strong>AfterEveryScript</strong>

 directive specifies a new class of 
                    configuration scripts. An <strong>AfterEveryScript</strong>

 directive tells
                    Rivet what code has to be executed at every request completion, either when 
                    a request processing was successful or an abort condition was handled 
                    by an <strong>AbortScript</strong>

 directive.
                                    </p>
        <p>
                    The new command <strong>::rivet::inspect</strong>

 provides deeper introspection
                    in the configuration of a module.
                                    </p>
        <h5>New switches for the <quote>configure</quote>

 script                    </h5>
        <p>
                    Some Rivet configuration defaults can be changed running the 
                    <i>configure</i>

 script passing the following arguments. 
                                    </p>
        <ul>
            <li>--enable-virtual-interps-separation</li>
            <li>--with-upload-dir=DIR</li>
            <li>--with-post-max=BYTES</li>
            <li>--disable-upload-var</li>
        </ul>
        <h5>
						Recent Bug Fixes
					</h5>
        <p>
						Test Suite 
						<ul>
                <li>User and Group directives removed from the configuration file
	    					template to make test suite independent from the command 'id' output from which 
	    					the values for this parameters were inferred (Bug #53396)</li>
            </ul>
        </p>
        <p>
						mod_rivet.c.
						<ul>
                <li>Add UploadDirectory to the list of handled options for RivetUserConf</li>
                <li>The module returns now a HTTP_INTERNAL_SERVER_ERROR when a <b>::request</b>


		    				namespace cannot be created                                    </li>
            </ul>
        </p>
        <p> 
						DIO Package bug fixes
						<ul>
                <li>
								Improved DIO support for Sqlite fixes several bugs.
							</li>
                <li>
								Fixed secs computation made by dio_Mysql when handling timestamp fields.
							</li>
                <li>
								Fixed wrong declaration of 'insert' subcommand in page manual (Bug #53670)
							</li>
                <li>
								Fixed method makeDBFieldValue in class Oracle (Bug #53703)
							</li>
                <li>
								Method 'count' failed when no keyfield was set.
							</li>
                <li>
								Index riv_sess_cache_ix had a incomplete unique key definition that missed the 
								'package_' column (fixes bug #54063)
							</li>
            </ul>
        </p>
        <p>
						New package form 2.0 added with new methods and several fixes including:
						<ul>
                <li>	
								Workaround to avoid wrong parsing of form data when parameter
		 						values have spaces in them
							</li>
                <li>
								Fixed problem with variable clash in constructor. Also removed unneeded [expr ...] in conditions
		 						that prevented efficient code handling by the byte compiler (Closes bug #52650)
							</li>
            </ul>
        </p>
    </div>
</div>



                <div class="contentbottom">
                    
                </div>
            </div>

            <div class="sidebar">
                <ul>
                    <li id="news">
    <h4>News</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a href="rn%2d2%2d1.html">3 Mar 2014: Rivet 2.1.4 released</a>
        </li>
        <li class="navitem">
            <a href="rn%2d2%2d2.html">5 Dec 2015: Rivet 2.2.4 released</a>
        </li>
        <li class="navitem">
            <a href="rn%2d2%2d3.html">11 Nov 2017: Rivet 2.3.5 released</a>
        </li>
        <li class="navitem">
            <a href="rn%2d3%2d0.html">9 Feb 2018: Rivet 3.0.1 released</a>
        </li>
    </ul>
</li>
 
                </ul> 
                <ul>
                    <li id="home">
    <h4>Rivet</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a title="A home for Rivet" href="../index.html">Rivet Homepage</a>
        </li>
        <li class="navitem">
            <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
        </li>
        <li class="navitem">
            <a title="Getting Rivet" href="download.html">Getting Rivet</a>
        </li>
        <li class="navitem">
            <a title="Hello World!" href="hello%5fworld.html">Examples</a>
        </li>
        <li class="navitem">
            <a title="The Rivet development team" href="about.html">About Us - Contact</a>
        </li>
    </ul>
</li>
<li id="tcl">
    <h4>Tcl/Tk</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">
                The Tcl/Tk Language
                </a>
        </li>
        <li class="navitem">
            <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
        </li>
    </ul>
</li>
<li id="manual">
    <h4>Rivet Documentation</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a title="Rivet 2.1 Manual" target="rivetman2.1" href="http://tcl.apache.org/rivet/manual2.1/">Rivet 2.1</a>
        </li>
        <li class="navitem">
            <a title="Rivet 2.2 Manual" target="rivetman2.2" href="http://tcl.apache.org/rivet/manual2.2/">Rivet 2.2</a>
        </li>
        <li class="navitem">
            <a title="Rivet 2.3 Manual" target="rivetman2.3" href="http://tcl.apache.org/rivet/manual2.3/">Rivet 2.3</a>
        </li>
        <li class="navitem">
            <a title="Rivet 3.0 Manual" target="rivetman3.0" href="http://tcl.apache.org/rivet/manual3.0/">Rivet 3.0</a>
        </li>
    </ul>
</li>
<li id="support">
    <h4>Support</h4>
    <ul class="blocklist">
        <li class="navitem">
            <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
        </li>
    </ul>
</li>
 
                </ul> 
                <ul>
                     
                </ul> 
            </div>
            <div class="clear"></div>
        </div>
    </div>
    <div id="footer">
        <div class="footer-content">
            <p><a href="http://www.apache.org/">Apache Software Foundation</a> | Design by <a href="http://www.spyka.net">Free CSS Templates</a> | <a href="http://www.justfreetemplates.com">Free Web Templates</a></p>
        </div>
    </div>
    <div style="text-align: center; font-size: 0.75em;">Design downloaded from <a href="http://www.freewebtemplates.com/">free website templates</a>.</div></body>
</html>

