<!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%2d3.html">11 Nov 2017: Rivet 2.3.5 released</a>
        </li>
        <li class="navitem">
            <a href="rn%2d3%2d0.html">18 Nov 2018: Rivet 3.0.3 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>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>

