📄 release-notes.html.tmpl
字号:
<a href="http://www.bugzilla.org/security/2.20.4/">Security Advisory</a>.</p><h2><a name="v30_upgrading"></a>How to Upgrade From An Older Version</h2><h3>Notes For Upgraders</h3><ul> <li>If you upgrade by CVS, there are several .cvsignore files that are now in CVS instead of being locally created by <kbd>checksetup.pl</kbd>. This means that you will have to delete those files when CVS tells you there's a conflict, and then run <kbd>cvs update</kbd> again.</li> <li>In this version of [% terms.Bugzilla %], the Summary field is now limited to 255 characters. When you upgrade, any Summary longer than that will be truncated, and the old summary will be preserved in a comment.</li> <li>If you have the <kbd>utf8</kbd> parameter turned on, at some point you will have to convert your database. <kbd>checksetup.pl</kbd> will tell you when this is, and it will give you certain instructions at that time, that you have to follow before you can complete the upgrade. Don't do the conversion yourself manually--follow the instructions of checksetup.pl.</li> <li>If you ever ran 2.23.3, 2.23.4, or 3.0rc1, you will have to run <kbd>./collectstats.pl --regenerate</kbd> at the command line, because the data for your Old Charts is corrupted. This can take several days, so you may only want to run it if you use Old Charts.</li> <li>You should also read the Outstanding Issues sections of <a href="#v30_previous">older release notes</a> if you are upgrading from a version lower than 2.22.</li></ul><h3>Steps For Upgrading</h3><p>Once you have read the notes above, see the <a href="[% Param('docs_urlbase') FILTER html %]upgrade.html">Upgrading documentation</a> for instructions on how to upgrade.</p><h2><a name="v30_code_changes"></a>Code Changes Which May Affect Customizations</h2><ul> <li><a href="#v30_code_loc"><strong>Packagers:</strong> Location Variables Have Moved</a></li> <li><a href="#v30_code_hooks">Hooks!</a></li> <li><a href="#v30_code_api">API Documentation</a></li> <li><a href="#v30_code_globals">Elimination of globals.pl</a></li> <li><a href="#v30_code_scope">Cleaned Up Variable Scoping Issues</a></li> <li><a href="#v30_code_sql">No More SendSQL</a></li> <li><a href="#v30_code_auth">Auth Re-write</a></li> <li><a href="#v30_code_obj">Bugzilla::Object</a></li> <li><a href="#v30_code_req">Bugzilla->request_cache</a></li> <li><a href="#v30_code_other">Other Changes</a></li></ul><h3><a name="v30_code_loc"></a><strong>Packagers:</strong> Location Variables Have Moved</h3><p>In previous versions of [% terms.Bugzilla %], <kbd>Bugzilla::Config</kbd> held all the paths for different things, such as the path to localconfig and the path to the <kbd>data/</kbd> directory.</p><p>Now, all of this data is stored in a subroutine, <kbd>Bugzilla::Constants::bz_locations</kbd>.</p><p>Also, note that for mod_perl, <kbd>bz_locations</kbd> must return <em>absolute</em> (not relative) paths. There is already code in that subroutine to help you with this.</p><h3><a name="v30_code_hooks"></a>Hooks!</h3><p>[% terms.Bugzilla %] now supports a code hook mechanism. See the documentation for <a href="[% Param('docs_urlbase') FILTER html %]api/Bugzilla/Hook.html">Bugzilla::Hook</a> for more details.</p><p>This gives [% terms.Bugzilla %] very advanced plugin support. You can hook templates, hook code, add new parameters, and use the XML-RPC interface. So we'd like to see some [% terms.Bugzilla %] plugins written! Let us know on the <a href="http://bugzilla.org/cgi-bin/mj_wwwusr?func=lists-long-full&extra=developers">developers@bugzilla.org</a> mailing list if you write a plugin.</p><p>If you need more hooks, please <a href="http://www.bugzilla.org/developers/reporting_bugs.html">File a bug</a>!</p><h3><a name="v30_code_api"></a>API Documentation</h3><p>[% terms.Bugzilla %] now ships with all of its perldoc built as HTML. Go ahead and read the <a href="[% Param('docs_urlbase') FILTER html %]api/">API Documentation</a> for all of the [% terms.Bugzilla %] modules now! Even scripts like <kbd>checksetup.pl</kbd> have HTML documentation.</p><h3><a name="v30_code_globals"></a>Elimination of globals.pl</h3><p>The old file <kbd>globals.pl</kbd> has been eliminated. Its code is now in various modules. Each function went to the module that was appropriate for it.</p><p>Usually we filed [% terms.abug %] in <a href="https://bugzilla.mozilla.org">bugzilla.mozilla.org</a> for each function we moved. You can search there for the old name of the function, and that should get you the information about what it's called now and where it lives.</p><h3><a name="v30_code_scope"></a>Cleaned Up Variable Scoping Issues</h3><p>In normal perl, you can have code like this:</p><pre>my $var = 0;sub y { $var++ }</pre><p>However, under mod_perl that doesn't work. So variables are no longer "shared" with subroutines--instead all variables that a subroutine needs must be declared inside the subroutine itself.</p><h3><a name="v30_code_sql"></a>No More SendSQL</h3><p>The old <kbd>SendSQL</kbd> function and all of its companions are <strong>gone</strong>. Instead, we now use DBI for all database interaction.</p><p>For more information about how to use <a href="http://search.cpan.org/perldoc?DBI">DBI</a> with [% terms.Bugzilla %], see the <a href="http://www.bugzilla.org/docs/developer.html#sql-sendreceive">Developer's Guide Section About DBI</a></p><h3><a name="v30_code_auth"></a>Auth Re-write</h3><p>The <kbd>Bugzilla::Auth</kbd> family of modules have been completely re-written. For details on how the new structure of authentication, read the <a href="[% Param('docs_urlbase') FILTER html %]api/Bugzilla/Auth.html">Bugzilla::Auth API docs</a>.</p><p>It should be very easy to write new authentication plugins, now.</p><h3><a name="v30_code_obj"></a>Bugzilla::Object</h3><p>There is a new base class for most of our objects, <a href="[% Param('docs_urlbase') FILTER html %]api/Bugzilla/Object.html">Bugzilla::Object</a>. It makes it really easy to create new objects based on things that are in the database.</p><h3><a name="v30_code_req"></a>Bugzilla->request-cache</h3><p><kbd>Bugzilla.pm</kbd> used to cache things like the database connection in package-global variables (like <kbd>$_dbh</kbd>). That doesn't work in mod_perl, so instead now there's a hash that can be accessed through <code>Bugzilla->request_cache</code> to store things for the rest of the current page request.</p><p>You shouldn't access <code>Bugzilla->request_cache</code> directly, but you should use it inside of <kbd>Bugzilla.pm</kbd> if you modify that. The only time you should be accessing it directly is if you need to reset one of the caches. Hash keys are always named after the function that they cache, so to reset the template object, you'd do: <code>delete Bugzilla->request_cache->{template};</code>.</p><h3><a name="v30_code_other"></a>Other Changes</h3><ul> <li><code>checksetup.pl</code> has been completely re-written, and most of its code moved into modules in the <kbd>Bugzilla::Install</kbd> namespace. See the <a href="[% Param('docs_urlbase') FILTER html %]api/checksetup.html">checksetup documentation</a> and <a href="https://bugzilla.mozilla.org/showdependencytree.cgi?id=277502&hide_resolved=0">[% terms.Bugzilla %] [%+ terms.bug %] 277502</a> for details.</li> <li>Instead of <kbd>UserInGroup()</kbd>, all of [% terms.Bugzilla %] now uses <kbd>Bugzilla->user->in_group</kbd></li> <li>mod_perl doesn't like dependency loops in modules, so we now have a test for that detects dependency loops in modules when you run <kbd>runtests.pl</kbd>.</li> <li><kbd>globals.pl</kbd> used to modify the environment variables, like <kbd>PATH</kbd>. That now happens in <kbd>Bugzilla.pm</kbd>.</li> <li>Templates can now link to the documentation more easily. See the <kbd>global/code-error.html.tmpl</kbd> and <kbd>global/user-error.html.tmpl</kbd> templates for examples. (Search for "docslinks.")</li> <li>Parameters are accessed through <kbd>Bugzilla->params</kbd> instead of using the <kbd>Param()</kbd> function, now.</li> <li>The variables from the <kbd>localconfig</kbd> file are accessed through the <code>Bugzilla->localconfig</code> hash instead of through <kbd>Bugzilla::Config</kbd>.</li> <li><kbd>Bugzilla::BugMail::MessageToMTA()</kbd> has moved into its own module, along with other mail-handling code, called <kbd>Bugzilla::Mailer</kbd></li> <li>The <kbd>CheckCanChangeField()</kbd> subroutine in <kbd>process_bug.cgi</kbd> has been moved to <kbd>Bugzilla::Bug</kbd>, and is now a method of a [% terms.bug %] object.</li> <li>The code that used to be in the <kbd>global/banner.html.tmpl</kbd> template is now in <kbd>global/header.html.tmpl</kbd>. The banner still exists, but the file is empty.</li></ul><h2><a name="v30_previous"></a>Release Notes For Previous Versions</h2><p>Release notes for versions of [% terms.Bugzilla %] for versions prior to 3.0 are only available in text format: <a href="docs/rel_notes.txt">Release Notes for [% terms.Bugzilla %] 2.22 and Earlier</a>.</p>[% INCLUDE global/footer.html.tmpl %][% BLOCK db_req %] [% SET m = DB_MODULE.$db %] <h3><a name="v30_req_[% db FILTER html %]"></a>For [% m.name FILTER html %] Users</h3> <ul> <li>[% m.name FILTER html %] v[% m.db_version FILTER html %]</li> <li><strong>perl module:</strong> [%+ m.dbd.module FILTER html %] v[% m.dbd.version FILTER html %]</li> </ul>[% END %][% BLOCK req_table %] <table class="req_table" border="0" cellspacing="0" cellpadding="0"> <tr> <th>Module</th> <th>Version</th> [% IF include_feature %] <th>Enables Feature</th> [% END %] </tr> [% FOREACH req = reqs %] <tr> <td [% 'class="req_new"' IF new.contains(req.package) %]> [%- req.module FILTER html %]</td> <td [% 'class="req_new"' IF updated.contains(req.package) OR new.contains(req.package) %]> [%- IF req.version == 0 %] (Any) [% ELSE %] [%- req.version FILTER html %] [% END %] </td> [% IF include_feature %] <td>[% req.feature FILTER html %]</td> [% END %] </tr> [% END %]</table>[% END %]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -