diff -r -u -N /home/nb/info.ravenbrook.com/project/p4dti/import/2002-09-30/bugzilla-2.16.1/bugzilla-2.16.1/bug_form.pl ./bug_form.pl --- /home/nb/info.ravenbrook.com/project/p4dti/import/2002-09-30/bugzilla-2.16.1/bugzilla-2.16.1/bug_form.pl Fri Nov 1 11:11:22 2002 +++ ./bug_form.pl Fri Nov 1 11:10:50 2002 @@ -28,6 +28,167 @@ # Use the Attachment module to display attachments for the bug. use Attachment; +# Prepare a hash for the section of the bug form showing information +# replicated from the Perforce source code management system by the +# P4DTI replicator. Derived from code contributed by Matt Albrecht +# <matt.albrecht@zilliant.com>. + +sub PreparePerforceSection { + my ($bug_id) = (@_); + my $jobname; + my %p4dti; + $p4dti{'hasp4dti'} = 0; + if (Param("p4dti")) { + $p4dti{'hasp4dti'} = 1; + + # First get the row from p4dti_bugs showing whether or not this bug is + # replicated at all. + SendSQL("SELECT rid, sid, jobname FROM p4dti_bugs " . + "WHERE bug_id = $bug_id"); + if (!MoreSQLData()) { + $p4dti{'isreplicated'} = 0; + } else { + $p4dti{'isreplicated'} = 1; + + ($p4dti{'rid'}, $p4dti{'sid'}, $jobname) = + (FetchSQLData()); + + # Replicating a bug more than once (i.e. to more than one + # Perforce server or via more than one replicator) is + # currently not supported by the replication system. + if (MoreSQLData()) { + my ($other_rid, $other_sid) = (FetchSQLData()); + die "bug $bug_id is replicated by (".$p4dti{'rid'}.", ". + $p4dti{'sid'}.") and ($other_rid, $other_sid)."; + } + + # Get P4DTI config for this rid/sid combination + my %p4dti_config; + SendSQL("SELECT config_key, config_value FROM p4dti_config " . + "WHERE rid = " . SqlQuote($p4dti{'rid'}) . " AND sid = " . + SqlQuote($p4dti{'sid'})); + while(MoreSQLData()) { + my ($p4dti_config_key, $p4dti_config_value) = FetchSQLData(); + $p4dti_config{$p4dti_config_key} = $p4dti_config_value; + } + if (!defined $p4dti_config{'p4_server_description'}) { + $p4dti_config{'p4_server_description'} = ""; + } + if (!defined $p4dti_config{'changelist_url'}) { + $p4dti_config{'changelist_url'} = ""; + } + if (!defined $p4dti_config{'job_url'}) { + $p4dti_config{'job_url'} = ""; + } + if (!defined $p4dti_config{'replicator_user'}) { + $p4dti_config{'replicator_user'} = ""; + } + $p4dti{'config'} = \%p4dti_config; + + $jobname = value_quote($jobname); + if ($p4dti_config{"job_url"} ne "") { + $p4dti{'jobname'} = sprintf("<a href=\"$p4dti_config{'job_url'}\">$jobname</a>", $jobname); + } else { # no job URL pattern. + $p4dti{'jobname'} = $jobname; + } + + # Get actual fixes. + # Every row in the p4dti_fixes table with the right bug_id + # is a fix for this bug. We have to match that up with a row + # in the p4dti_changelist table, to get the fix description. + # However, if there are multiple replicators running, + # there may be more than one row in the p4dti_changelist + # table with a given changelist number. So we make + # the SIDs (Perforce server IDs) match. + # + # We do a LEFT JOIN and get a not-NULL field (the rid) + # from the p4dti_changelists table so we can distinguish + # the cases in which there is not a p4dti_changelists row + # for this changelist. That indicates a failure in the + # replicator, so we want to know about it. + SendSQL("SELECT profiles.realname, profiles.login_name, " . + " p4dti_fixes.changelist, " . + " p4dti_fixes.status, p4dti_changelists.p4date, " . + " p4dti_changelists.description, p4dti_changelists.rid, " . + " p4dti_changelists.flags " . + "FROM p4dti_fixes, profiles " . + "LEFT JOIN p4dti_changelists " . + " ON (p4dti_changelists.changelist=p4dti_fixes.changelist" . + " AND p4dti_changelists.sid = p4dti_fixes.sid)" . + "WHERE p4dti_fixes.bug_id = $bug_id " . + " AND profiles.userid = p4dti_fixes.user " . + " AND p4dti_fixes.rid = ". SqlQuote($p4dti{'rid'}) . + " AND p4dti_changelists.rid = ". SqlQuote($p4dti{'rid'}) . + " AND p4dti_fixes.sid = ". SqlQuote($p4dti{'sid'}) . + " AND p4dti_changelists.sid = ". SqlQuote($p4dti{'sid'}) . + " ORDER BY p4dti_fixes.changelist"); + if (MoreSQLData()) { + $p4dti{'hasfixes'} = 1; + my @fixlist; + while (MoreSQLData()) { + my %myset; + my ($realname, $login_name, $changelist, $status, $p4date, + $description, $changelist_rid, $changelist_flags) = + (FetchSQLData()); + if (!defined $changelist_rid || $changelist_rid eq "") { + die "p4dti_changelists has no row for changelist $changelist."; + } + $myset{'changelist_rid'} = $changelist_rid; + $myset{'description'} = $description || "(none)"; + if ($changelist) { + my $changelist_html; + if ($p4dti_config{"changelist_url"} ne "") { + $myset{'changelist'} = + sprintf("<a href=\"$p4dti_config{'changelist_url'}\">$changelist</a>", + $changelist); + } else { # no changelist URL pattern. + $myset{'changelist'} = $changelist; + } + } else { + $myset{'changelist'} = ""; + } + if ($changelist_flags & 1) { + $myset{'changelist_note'} = ""; + } else { + $myset{'changelist_note'} = "(pending)"; + } + if ($login_name eq $p4dti_config{"replicator_user"}) { + $myset{'user_field'} = "(unknown)"; + } else { + $myset{'user_field'} = ("<a href=\"mailto:$login_name\">" . + value_quote($realname) . "</a>"); + } + $myset{'status'} = $status || ""; + $myset{'p4date'} = $p4date || ""; + + push( @fixlist, \%myset ); + } + $p4dti{'fixes'} = \@fixlist; + } else { + $p4dti{'hasfixes'} = 0; + } + # get filespecs. + SendSQL("SELECT filespec " . + "FROM p4dti_filespecs " . + "WHERE bug_id = $bug_id"); + if (MoreSQLData()) { + $p4dti{'hasfilespecs'} = 1; + my @speclist; + while (MoreSQLData()) { + my ($filespec) = (FetchSQLData()); + push( @speclist, $filespec ); + } + $p4dti{'filespecs'} = \@speclist; + } else { + $p4dti{'hasfilespecs'} = 0; + } + } + } + return \%p4dti; +} + + + sub show_bug { # Shut up misguided -w warnings about "used only once". For some reason, # "use vars" chokes on me when I try it here. @@ -313,6 +474,8 @@ # Add the bug and user hashes to the variables $vars->{'bug'} = \%bug; $vars->{'user'} = \%user; + + $vars->{'p4dti'} = PreparePerforceSection($bug{'bug_id'}); # Create the <link> elements for browsing bug lists $vars->{'navigation_links'} = navigation_links(join(':',@bug_list)); diff -r -u -N /home/nb/info.ravenbrook.com/project/p4dti/import/2002-09-30/bugzilla-2.16.1/bugzilla-2.16.1/defparams.pl ./defparams.pl --- /home/nb/info.ravenbrook.com/project/p4dti/import/2002-09-30/bugzilla-2.16.1/bugzilla-2.16.1/defparams.pl Fri Nov 1 11:11:22 2002 +++ ./defparams.pl Fri Nov 1 11:10:50 2002 @@ -607,4 +607,9 @@ "t" , '1000'); +DefParam("p4dti", + "If this is on, Bugzilla uses the Perforce Defect Tracking Integration.", + "b", + 0); + 1; diff -r -u -N /home/nb/info.ravenbrook.com/project/p4dti/import/2002-09-30/bugzilla-2.16.1/bugzilla-2.16.1/doeditparams.cgi ./doeditparams.cgi --- /home/nb/info.ravenbrook.com/project/p4dti/import/2002-09-30/bugzilla-2.16.1/bugzilla-2.16.1/doeditparams.cgi Fri Nov 1 11:11:23 2002 +++ ./doeditparams.cgi Fri Nov 1 11:10:51 2002 @@ -26,6 +26,7 @@ use lib qw(.); require "CGI.pl"; +require "globals.pl"; require "defparams.pl"; # Shut up misguided -w warnings about "used only once": @@ -74,6 +75,41 @@ } +#### +# ndl@ravenbrook.com 2001-11-23: +# If the parameters table did not exist, create and populate it. +# If a parameters table is incorporated into the main Bugzilla sources +# then it should be created and initially populated from this +# checksetup.pl, and merely updated in this file. + +SendSQL ("SHOW TABLES LIKE 'p4dti_bugzilla_parameters'"); +if (MoreSQLData()) { + print("Updating table p4dti_bugzilla_parameters.<br>\n"); +} else { + print("Creating table p4dti_bugzilla_parameters.<br>\n"); + SendSQL("CREATE TABLE p4dti_bugzilla_parameters + (parameter_name varchar(255) not null primary key, + parameter_value mediumtext)"); +} + +foreach my $i (@::param_list) { + my $val = SqlQuote($::param{$i}); + SendSQL("SELECT parameter_value + FROM p4dti_bugzilla_parameters + WHERE parameter_name = '$i'"); + if (MoreSQLData()) { + SendSQL("UPDATE p4dti_bugzilla_parameters + SET parameter_value = $val + WHERE parameter_name = '$i'"); + } else { + SendSQL("INSERT INTO p4dti_bugzilla_parameters + VALUES ('$i', $val)"); + } +} + +# +#### + WriteParams(); unlink "data/versioncache"; diff -r -u -N /home/nb/info.ravenbrook.com/project/p4dti/import/2002-09-30/bugzilla-2.16.1/bugzilla-2.16.1/template/en/custom/bug/edit.html.tmpl ./template/en/custom/bug/edit.html.tmpl --- /home/nb/info.ravenbrook.com/project/p4dti/import/2002-09-30/bugzilla-2.16.1/bugzilla-2.16.1/template/en/custom/bug/edit.html.tmpl Thu Jan 1 01:00:00 1970 +++ ./template/en/custom/bug/edit.html.tmpl Fri Nov 1 11:10:51 2002 @@ -0,0 +1,624 @@ +<!-- 1.0@bugzilla.org --> +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Netscape Communications + # Corporation. Portions created by Netscape are + # Copyright (C) 1998 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): Gervase Markham <gerv@gerv.net> + #%] + +[% filtered_desc = bug.short_desc FILTER html %] +[% UNLESS header_done %] + [% PROCESS global/header.html.tmpl + title = "Bug $bug.bug_id - $bug.short_desc" + h1 = "Bugzilla Bug $bug.bug_id" + h2 = filtered_desc + header_html = navigation_links + %] +[% END %] + +[% PROCESS bug/navigate.html.tmpl %] + +<hr> + +<form name="changeform" method="post" action="process_bug.cgi"> + + <input type="hidden" name="delta_ts" value="[% bug.delta_ts %]"> + <input type="hidden" name="longdesclength" value="[% bug.longdesclength %]"> + <input type="hidden" name="id" value="[% bug.bug_id %]"> + +[%# *** Platform Reporter Product OS AddCC *** %] + + <table cellspacing="1" cellpadding="1" border="0"> + <tr> + <td align="right"> + <b>Bug#:</b> + </td> + <td> + <a href="[% Param('urlbase') %]show_bug.cgi?id=[% bug.bug_id %]"> + [% bug.bug_id %]</a> + </td> + + <td> </td> + + <td align="right"> + <b>Platform:</b> + </td> + [% PROCESS select selname = "rep_platform" %] + + <td align="right"> + <b>Reporter:</b> + </td> + <td> + [% bug.reporter FILTER html %] + </td> + </tr> + + <tr> + <td align="right"> + <b>Product:</b> + </td> + [% PROCESS select selname => "product" %] + + <td align="right"> + <b>OS:</b> + </td> + [% PROCESS select selname => "op_sys" %] + + <td align="right"> + <b>Add CC:</b> + </td> + <td> + <input name="newcc" size="30" value=""> + </td> + </tr> + +[%# *** Component Version CC Priority Severity AssignedTo Milestone *** %] + + <tr> + <td align="right"> + <b> + <a href="describecomponents.cgi?product=[% bug.product FILTER url_quote %]"> + Component</a>: + </b> + </td> + <td> + <select name="component"> + [% FOREACH x = component_ %] + <option value="[% x FILTER html %]" + [% " selected" IF x == bug.component %]>[% x FILTER html %] + </option> + [% END %] + </select> + </td> + + <td> </td> + + <td align="right"> + <b>Version:</b> + </td> + [% PROCESS select selname => "version" %] + + <td rowspan="4" align="right" valign="top"> + <b>CC:</b> + </td> + <td rowspan="4" valign="top"> + [% IF bug.cc %] + <select name="cc" multiple="multiple" size="5"> + [% FOREACH c = bug.cc %] + <option value="[% c FILTER html %]">[% c FILTER html %]</option> + [% END %] + </select> + <br> + <input type="checkbox" name="removecc">Remove selected CCs + <br> + [% ELSE %] + <input type="hidden" name="cc" value=""> + [% END %] + </td> + </tr> + + <tr> + <td align="right"> + <b> + <a href="bug_status.html">Status</a>: + </b> + </td> + <td>[% bug.bug_status FILTER html %]</td> + <td> </td> + + <td align="right"> + <b><a href="bug_status.html#priority">Priority</a>:</b> + </td> + [% PROCESS select selname => "priority" %] + </tr> + + <tr> + <td align="right"> + <b> + <a href="bug_status.html">Resolution</a>: + </b> + </td> + <td>[% bug.resolution FILTER html %]</td> + <td> </td> + + <td align="right"> + <b><a href="bug_status.html#severity">Severity</a>:</b> + </td> + [% PROCESS select selname = "bug_severity" %] + + </tr> + + <tr> + <td align="right"> + <b> + <a href="bug_status.html#assigned_to">Assigned To</a>: + </b> + </td> + <td>[% bug.assigned_to FILTER html %]</td> + <td> </td> + + [% IF Param("usetargetmilestone") && bug.target_milestone %] + <td align="right"> + <b> + <a href="[% bug.milestoneurl FILTER html %]">Target Milestone</a>: + </b> + </td> + [% PROCESS select selname = "target_milestone" %] + [% ELSE %] + <td colspan="3"> </td> + [% END %] + </tr> + +[%# *** QAContact URL Summary Whiteboard Keywords *** %] + + [% IF Param('useqacontact') %] + <tr> + <td align="right"> + <b>QA Contact:</b> + </td> + <td colspan="7"> + <input name="qa_contact" + value="[% bug.qa_contact FILTER html %]" size="60"> + </td> + </tr> + [% END %] + + <tr> + <td align="right"> + <b> + [% IF bug.bug_file_loc %] + <a href="[% bug.bug_file_loc FILTER html %]">URL</a>: + [% ELSE %] + URL: + [% END %] + </b> + </td> + <td colspan="7"> + <input name="bug_file_loc" + value="[% bug.bug_file_loc FILTER html %]" size="60"> + </td> + </tr> + + <tr> + <td align="right"> + <b>Summary:</b> + </td> + <td colspan="7"> + <input name="short_desc" + value="[% bug.short_desc FILTER html %]" size="60"> + </td> + </tr> + + [% IF Param('usestatuswhiteboard') %] + <tr> + <td align="right"> + <b>Status Whiteboard:</b> + </td> + <td colspan="7"> + <input name="status_whiteboard" + value="[% bug.status_whiteboard FILTER html %]" size="60"> + </td> + </tr> + [% END %] + + [% IF use_keywords %] + <tr> + <td align="right"> + <b> + <a href="describekeywords.cgi">Keywords</a>: + </b> + <td colspan="7"> + <input name="keywords" + value="[% bug.keywords.join(', ') FILTER html %]" size="60"> + </td> + </tr> + [% END %] + </table> + +[%# *** Attachments *** %] + + [% PROCESS attachment/list.html.tmpl + attachments = bug.attachments + bugid = bug.bug_id %] + +[%# *** Dependencies Votes *** %] + + [% IF Param('usedependencies') %] + <table> + <tr> + [% PROCESS dependencies + dep = { title => "depends on", fieldname => "dependson" } %] + <td rowspan="2"> + <a href="showdependencytree.cgi?id=[% bug.bug_id %]">Show + dependency tree</a> + + [% IF Param('webdotbase') %] + <br> + <a href="showdependencygraph.cgi?id=[% bug.bug_id %]">Show + dependency graph</a> + [% END %] + </td> + </tr> + + <tr> + [% PROCESS dependencies + dep = { title => "blocks", fieldname => "blocked" } %] + </tr> + </table> + [% END %] + + [% IF use_votes %] + <table> + <tr> + <th> + <a href="votehelp.html">Votes</a>: + </th> + <td> + [% bug.votes %] + <a href="votes.cgi?action=show_bug&bug_id=[% bug.bug_id %]">Show + votes for this bug</a> + <a href="votes.cgi?action=show_user&bug_id=[% bug.bug_id %]">Vote + for this bug</a> + </td> + </tr> + </table> + [% END %] + +[%# *** Comments Groups *** %] + + <br> + <b>Additional Comments:</b> + <br> + <textarea wrap="hard" name="comment" rows="10" cols="80" + accesskey="c"></textarea> + <br> + + [% IF groups.size > 0 %] + <br> + <b>Only users in all of the selected groups can view this bug:</b> + <br> + <font size="-1">(Unchecking all boxes makes this a public bug.)</font> + <br> + <br> + + [% FOREACH group = groups %] + + <input type="checkbox" name="bit-[% group.bit %]" value="1" + [% " checked=\"checked\"" IF group.ison %] + [% " disabled=\"disabled\"" IF NOT group.ingroup %]> + [% group.description %] + <br> + [% END %] + + [% IF NOT user.inallgroups %] + <b> + Only members of a group can change the visibility of a bug for + that group + </b> + <br> + [% END %] + + [% IF bug.inagroup %] + <p> + <b>But users in the roles selected below can always view this bug:</b> + <br> + <small> + (The assignee + [% IF (Param('useqacontact')) %] + and QA contact + [% END %] + can always see a bug, and this section does not take effect unless + the bug is restricted to at least one group.) + </small> + </p> + + <p> + <input type="checkbox" name="reporter_accessible" value="1" + [% " checked" IF bug.reporter_accessible %]>Reporter + <input type="checkbox" name="cclist_accessible" value="1" + [% " checked" IF bug.cclist_accessible %]>CC List + </p> + [% END %] + [% END %] + +[%# *** Knob *** %] + + <br> + <input type="radio" name="knob" value="none" checked="checked"> + Leave as <b>[% bug.bug_status FILTER html %] + [% bug.resolution FILTER html %]</b> + <br> + + [% knum = 1 %] + + [% IF bug.bug_status == "UNCONFIRMED" && + user.canconfirm %] + <input type="radio" name="knob" value="confirm"> + Confirm bug (change status to <b>NEW</b>) + <br> + [% knum = knum + 1 %] + [% END %] + + [% IF user.canedit %] + [% IF bug.isopened %] + [% IF bug.bug_status != "ASSIGNED" && user.canconfirm %] + <input type="radio" name="knob" value="accept"> + Accept bug ( + [% "confirm bug, " IF bug.isunconfirmed %]change + status to <b>ASSIGNED</b>) + <br> + [% knum = knum + 1 %] + [% END %] + + [% IF bug.resolution %] + <input type="radio" name="knob" value="clearresolution"> + Clear the resolution (remove the current resolution of + <b>[% bug.resolution FILTER html %]</b>)<br> + [% knum = knum + 1 %] + [% END %] + + <input type="radio" name="knob" value="resolve"> + Resolve bug, changing <a href="bug_status.html">resolution</a> to + <select name="resolution" + onchange="document.changeform.knob[[% knum %]].checked=true"> + [% FOREACH r = resolution %] + <option value="[% r FILTER html %]">[% r FILTER html %]</option> + [% END %] + </select> + <br> + [% knum = knum + 1 %] + + <input type="radio" name="knob" value="duplicate"> + Resolve bug, mark it as duplicate of bug # + <input name="dup_id" size="6" + onchange="if (this.value != '') + {document.changeform.knob[[% knum %]].checked=true}"> + <br> + [% knum = knum + 1 %] + + <input type="radio" name="knob" value="reassign"> + <a href="bug_status.html#assigned_to">Reassign</a> bug to + <input name="assigned_to" size="32" + onchange="if ((this.value != '[% bug.assigned_to_email FILTER js %]') && + (this.value != '')) { + document.changeform.knob[[% knum %]].checked=true; + }" + value="[% bug.assigned_to_email FILTER html %]"> + <br> + [% IF bug.isunconfirmed && user.canconfirm %] + <input type="checkbox" name="andconfirm"> + and confirm bug (change status to <b>NEW</b>) + <br> + [% END %] + [% knum = knum + 1 %] + + <input type="radio" name="knob" value="reassignbycomponent"> + Reassign bug to owner + [% "and QA contact" IF useqacontact %] + of selected component + <br> + [% IF bug.isunconfirmed && user.canconfirm %] + <input type="checkbox" name="compconfirm"> + and confirm bug (change status to <b>NEW</b>) + <br> + [% END %] + [% knum = knum + 1 %] + [% ELSE %] + [% IF bug.resolution != "MOVED" || + (bug.resolution == "MOVED" && user.canmove) %] + <input type="radio" name="knob" value="reopen"> Reopen bug + <br> + [% knum = knum + 1 %] + [% END %] + [% IF bug.bug_status == "RESOLVED" %] + <input type="radio" name="knob" value="verify"> + Mark bug as <b>VERIFIED</b><br> + [% knum = knum + 1 %] + [% END %] + [% IF bug.bug_status != "CLOSED" %] + <input type="radio" name="knob" value="close"> + Mark bug as <b>CLOSED</b><br> + [% knum = knum + 1 %] + [% END %] + [% END %] + [% END %] + + <input type="submit" value="Commit"> + <input type="hidden" name="form_name" value="process_bug"> + <p> + <font size="+1"> + <b> + <a href="show_activity.cgi?id=[% bug.bug_id %]">View Bug Activity</a> + | + <a href="long_list.cgi?buglist=[% bug.bug_id %]">Format For Printing</a> + </b> + </font> + + [% IF user.canmove %] + <font size="+1"><b> | </b></font> + <input type="submit" name="action" + value="[% Param("move-button-text") %]"> + [% END %] + </p> +</form> + +[%# *** Additional Comments *** %] + +<table> + <tr> + <td align="left"> + <b> + <a name="c0" href="#c0">Description</a>: + </b> + </td> + <td align="right" width="100%"> + Opened: [% bug.creation_ts %] + </td> + </tr> +</table> +<hr> + +[% PROCESS bug/comments.html.tmpl + comments = bug.comments + %] + +<hr> + +[%# P4DTI section. Derived in part from code contributed by Matt + # Albrecht <matt.albrecht@zilliant.com>. + #%] +[% IF p4dti.hasp4dti %] + <div class="p4dti"> + + [% IF p4dti.isreplicated %] + + <p><b>Perforce replication:</b></p> + <table border="0" cellspacing="0" cellpadding="4"> + <tr valign="top"> + <td><b>Job</b></td> + <td> [% p4dti.jobname %] </td> + </tr> + <tr valign="top"> + <td><b>Server</b></td> + <td> + [% p4dti.sid FILTER html %] + [% IF p4dti.config.p4_server_description %]: + [% p4dti.config.p4_server_description FILTER html %] + [% END %] + </td> + </tr> + <tr valign="top"> + <td><b>Replicator ID</b></td> + <td>[% p4dti.rid FILTER html %]</td> + </tr> + <tr valign="top"> + <td><b>Fixes</b></td> + <td> + [% IF p4dti.hasfixes %] + <table border="1" cellspacing="0" cellpadding="4"> + <tr align="left" valign="top"> + <th>Change</th> + <th>Effect</th> + <th>Date</th> + <th>User</th> + <th>Description</th> + </tr> + [% FOREACH fix = p4dti.fixes %] + <tr valign="top"> + <td>[% fix.changelist %] + [% fix.changelist_note %]</td> + <td>[% fix.status FILTER html %]</td> + <td>[% fix.p4date FILTER html %]</td> + <td>[% fix.user_field %]</td> + <td>[% fix.description FILTER html %]</td> + </tr> + [% END %] + </table> + [% ELSE %] + None. + [% END %] + </td> + </tr> + <tr valign="top"> + <td><b>Filespecs</b></td> + <td> + [% IF p4dti.hasfilespecs %] + <table> + [% FOREACH f = p4dti.filespecs %] + <tr valign="top"> + <td>[% f FILTER html %]</td> + </tr> + [% END %] + </table> + [% ELSE %] + None. + [% END %] + </td> + </tr> + </table> + + [% ELSE %] + + <p><b>Not replicated in Perforce.</b></p> + + [% END %] + <hr/> + </div> +[% END %] + +<hr> + +[% PROCESS bug/navigate.html.tmpl %] + +<br> + +[% PROCESS global/footer.html.tmpl %] + + +[%############################################################################%] +[%# Block for dependencies #%] +[%############################################################################%] + +[% BLOCK dependencies %] + <th align="right">Bug [% bug.bug_id %] [%+ dep.title %]:</th> + <td> + [% FOREACH depbug = bug.${dep.fieldname} %] + [% GetBugLink(depbug, depbug) %][% " " %] + [% END %] + </td> + <td> + <input name="[% dep.fieldname %]" + value="[% bug.${dep.fieldname}.join(', ') %]"> + </td> +[% END %] + + +[%############################################################################%] +[%# Block for SELECT fields #%] +[%############################################################################%] + +[% BLOCK select %] + <td> + <select name="[% selname %]"> + [% FOREACH x = ${selname} %] + <option value="[% x FILTER html %]" + [% " selected" IF x == bug.${selname} %]>[% x FILTER html %] + </option> + [% END %] + </select> + </td> + <td> </td> +[% END %]
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 2346 | Charles Hardin |
fixed the bugzilla 2.16.1 patch that was in the p4dti version 1.5.0 tree off of ravenbook... didn't check the other patches to see if they had the same error |