From 4727e6c09f88e63f02e6c8f359862d0c0942ed36 Mon Sep 17 00:00:00 2001 From: "terry%netscape.com" <> Date: Wed, 16 Sep 1998 04:49:23 +0000 Subject: Everything has been ported to now run under Perl. --- buglist.cgi | 764 +++++++++++++++++++++++++++++------------------------------- 1 file changed, 375 insertions(+), 389 deletions(-) (limited to 'buglist.cgi') diff --git a/buglist.cgi b/buglist.cgi index 8350526a3..e93fc3d8d 100755 --- a/buglist.cgi +++ b/buglist.cgi @@ -1,5 +1,5 @@ -#! /usr/bonsaitools/bin/mysqltcl -# -*- Mode: tcl; indent-tabs-mode: nil -*- +#!/usr/bonsaitools/bin/perl -w +# -*- Mode: perl; indent-tabs-mode: nil -*- # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in @@ -19,77 +19,91 @@ # # Contributor(s): Terry Weissman -puts "Content-type: multipart/x-mixed-replace;boundary=ThisRandomString" -puts "" -puts "--ThisRandomString" +use diagnostics; +use strict; +print "Content-type: multipart/x-mixed-replace;boundary=ThisRandomString\n"; +print "\n"; +print "--ThisRandomString\n"; -# The below "if catch" stuff, if uncommented, will trap any error, and -# mail the error messages to terry. What a hideous, horrible -# debugging hack. -# if {[catch { +require "CGI.pl"; +# Shut up misguided -w warnings about "used only once": -source "CGI.tcl" +use vars @::legal_platform, + @::versions, + @::legal_product, + @::legal_component, + %::MFORM, + @::components, + @::legal_severity, + @::legal_priority, + @::default_column_list, + @::legal_resolution_no_dup; -ConnectToDatabase -if {![info exists FORM(cmdtype)]} { + +ConnectToDatabase(); + +if (!defined $::FORM{'cmdtype'}) { # This can happen if there's an old bookmark to a query... - set FORM(cmdtype) doit + $::FORM{'cmdtype'} = 'doit'; } -switch $FORM(cmdtype) { - runnamed { - set buffer $COOKIE(QUERY_$FORM(namedcmd)) - ProcessFormFields $buffer - } - editnamed { - puts "Content-type: text/html -Refresh: 0; URL=query.cgi?$COOKIE(QUERY_$FORM(namedcmd)) + +CMD: for ($::FORM{'cmdtype'}) { + /^runnamed$/ && do { + $::buffer = $::COOKIE{"QUERY_" . $::FORM{"namedcmd"}}; + ProcessFormFields $::buffer; + last CMD; + }; + /^editnamed$/ && do { + my $url = "query.cgi?" . $::COOKIE{"QUERY_" . $::FORM{"namedcmd"}}; + print "Content-type: text/html +Refresh: 0; URL=$url What a hack. -Loading your query named $FORM(namedcmd)..." - exit - } - forgetnamed { - puts "Set-Cookie: QUERY_$FORM(namedcmd)= ; path=/ ; expires=Sun, 30-Jun-99 00:00:00 GMT +Loading your query named $::FORM{'namedcmd'}..."; + exit; + }; + /^forgetnamed$/ && do { + print "Set-Cookie: QUERY_" . $::FORM{'namedcmd'} . "= ; path=/ ; expires=Sun, 30-Jun-2029 00:00:00 GMT Content-type: text/html Forget what? -OK, the $FORM(namedcmd) query is gone. +OK, the $::FORM{'namedcmd'} query is gone.

-Go back to the query page." - exit - } - asnamed { - if {[regexp {^[a-zA-Z0-9_ ]+$} $FORM(newqueryname)]} { - puts "Set-Cookie: QUERY_$FORM(newqueryname)=$buffer ; path=/ ; expires=Sun, 30-Jun-99 00:00:00 GMT +Go back to the query page."; + exit; + }; + /^asnamed$/ && do { + if ($::FORM{'newqueryname'} =~ /^[a-zA-Z0-9_ ]+$/) { + print "Set-Cookie: QUERY_" . $::FORM{'newqueryname'} . "=$::buffer ; path=/ ; expires=Sun, 30-Jun-2029 00:00:00 GMT Content-type: text/html OK, done. -OK, you now have a new query named $FORM(newqueryname). +OK, you now have a new query named $::FORM{'newqueryname'}.

-Go back to the query page." +Go back to the query page."; } else { - puts "Content-type: text/html + print "Content-type: text/html Picky, picky. Query names can only have letters, digits, spaces, or underbars. You entered -\"$FORM(newqueryname)\", which doesn't cut it. +\"$::FORM{'newqueryname'}\", which doesn't cut it.

-Click the Back button and type in a valid name for this query." +Click the Back button and type in a valid name for this query."; } - exit - } - asdefault { - puts "Set-Cookie: DEFAULTQUERY=$buffer ; path=/ ; expires=Sun, 30-Jun-99 00:00:00 GMT + exit; + }; + /^asdefault$/ && do { + print "Set-Cookie: DEFAULTQUERY=$::buffer ; path=/ ; expires=Sun, 30-Jun-2029 00:00:00 GMT Content-type: text/html @@ -98,78 +112,82 @@ OK, you now have a new default query.

-Go back to the query page, using the new default." - exit - } -} - -proc qadd { item } { - global query - append query "$item" +Go back to the query page, using the new default."; + exit; + }; } -proc DefCol {name k t {s ""} {q 0}} { - global key title sortkey needquote - set key($name) $k - set title($name) $t - if {![cequal $s ""]} { - set sortkey($name) $s +sub DefCol { + my ($name, $k, $t, $s, $q) = (@_); + + $::key{$name} = $k; + $::title{$name} = $t; + if (defined $s && $s ne "") { + $::sortkey{$name} = $s; } - set needquote($name) $q + if (!defined $q || $q eq "") { + $q = 0; + } + $::needquote{$name} = $q; } -DefCol opendate "date_format(bugs.creation_ts,'Y-m-d')" Opened bugs.creation_ts -DefCol changeddate "date_format(bugs.delta_ts,'Y-m-d')" Changed bugs.delta_ts -DefCol severity "substring(bugs.bug_severity, 1, 3)" Sev bugs.bug_severity -DefCol priority "substring(bugs.priority, 1, 3)" Pri bugs.priority -DefCol platform "substring(bugs.rep_platform, 1, 3)" Plt bugs.rep_platform -DefCol owner "assign.login_name" Owner assign.login_name -DefCol reporter "report.login_name" Reporter report.login_name -DefCol status "substring(bugs.bug_status,1,4)" State bugs.bug_status -DefCol resolution "substring(bugs.resolution,1,4)" Res bugs.resolution -DefCol summary "substring(bugs.short_desc, 1, 60)" Summary {} 1 -DefCol summaryfull "bugs.short_desc" Summary {} 1 -DefCol component "substring(bugs.component, 1, 8)" Comp bugs.component -DefCol product "substring(bugs.product, 1, 8)" Product bugs.product -DefCol version "substring(bugs.version, 1, 5)" Vers bugs.version -DefCol os "substring(bugs.op_sys, 1, 4)" OS bugs.op_sys - -if {[info exists COOKIE(COLUMNLIST)]} { - set collist $COOKIE(COLUMNLIST) +DefCol("opendate", "date_format(bugs.creation_ts,'Y-m-d')", "Opened", + "bugs.creation_ts"); +DefCol("changeddate", "date_format(bugs.delta_ts,'Y-m-d')", "Changed", + "bugs.delta_ts"); +DefCol("severity", "substring(bugs.bug_severity, 1, 3)", "Sev", + "bugs.bug_severity"); +DefCol("priority", "substring(bugs.priority, 1, 3)", "Pri", "bugs.priority"); +DefCol("platform", "substring(bugs.rep_platform, 1, 3)", "Plt", + "bugs.rep_platform"); +DefCol("owner", "assign.login_name", "Owner", "assign.login_name"); +DefCol("reporter", "report.login_name", "Reporter", "report.login_name"); +DefCol("status", "substring(bugs.bug_status,1,4)", "State", "bugs.bug_status"); +DefCol("resolution", "substring(bugs.resolution,1,4)", "Result", + "bugs.resolution"); +DefCol("summary", "substring(bugs.short_desc, 1, 60)", "Summary", "", 1); +DefCol("summaryfull", "bugs.short_desc", "Summary", "", 1); +DefCol("component", "substring(bugs.component, 1, 8)", "Comp", + "bugs.component"); +DefCol("product", "substring(bugs.product, 1, 8)", "Product", "bugs.product"); +DefCol("version", "substring(bugs.version, 1, 5)", "Vers", "bugs.version"); +DefCol("os", "substring(bugs.op_sys, 1, 4)", "OS", "bugs.op_sys"); + +my @collist; +if (defined $::COOKIE{'COLUMNLIST'}) { + @collist = split(/ /, $::COOKIE{'COLUMNLIST'}); } else { - set collist $default_column_list + @collist = @::default_column_list; } -set dotweak [info exists FORM(tweak)] +my $dotweak = defined $::FORM{'tweak'}; -if {$dotweak} { - confirm_login +if ($dotweak) { + confirm_login(); } -puts "Content-type: text/html\n" +print "Content-type: text/html\n\n"; -set query " -select - bugs.bug_id" +my $query = "select bugs.bug_id"; -foreach c $collist { - if {[info exists needquote($c)] } { - append query ", -\t$key($c)" +foreach my $c (@collist) { + if (exists $::needquote{$c}) { + $query .= ", +\t$::key{$c}"; } } -if {$dotweak} { - append query ", +if ($dotweak) { + $query .= ", bugs.product, -bugs.bug_status" +bugs.bug_status"; } -append query " +$query .= " from bugs, profiles assign, profiles report, @@ -178,271 +196,263 @@ where bugs.assigned_to = assign.userid and bugs.reporter = report.userid and bugs.product = projector.program and bugs.version = projector.value -" +"; -if {[info exists FORM(sql)]} { - append query "and (\n[join [url_decode $FORM(sql)] { }]\n)" +if (defined $::FORM{'sql'}) { + $query .= "and (\n$::FORM('sql')\n)" } else { - - - set legal_fields { bug_id product version rep_platform op_sys bug_status - resolution priority bug_severity assigned_to reporter - bug_file_loc component} - - foreach field [array names FORM] { - if { [ lsearch $legal_fields $field ] != -1 && ![cequal $FORM($field) ""]} { - qadd "\tand (\n" - set or "" - if { $field == "assigned_to" || $field == "reporter"} { - foreach p [split $FORM($field) ","] { - qadd "\t\t${or}bugs.$field = [DBNameToIdAndCheck $p]\n" - set or "or " - } - } else { - foreach v $MFORM($field) { - if {[cequal $v "(empty)"]} { - qadd "\t\t${or}bugs.$field is null\n" + my @legal_fields = ("bug_id", "product", "version", "rep_platform", "op_sys", + "bug_status", "resolution", "priority", "bug_severity", + "assigned_to", "reporter", "bug_file_loc", "component"); + + foreach my $field (keys %::FORM) { + my $or = ""; + if (lsearch(\@legal_fields, $field) != -1 && $::FORM{$field} ne "") { + $query .= "\tand (\n"; + if ($field eq "assigned_to" || $field eq "reporter") { + foreach my $p (split(/,/, $::FORM{$field})) { + my $whoid = DBNameToIdAndCheck($p); + $query .= "\t\t${or}bugs.$field = $whoid\n"; + $or = "or "; + } } else { - if {[cequal $v "---"]} { - qadd "\t\t${or}bugs.$field = ''\n" - } else { - qadd "\t\t${or}bugs.$field = '$v'\n" + my $ref = $::MFORM{$field}; + foreach my $v (@$ref) { + if ($v eq "(empty)") { + $query .= "\t\t${or}bugs.$field is null\n"; + } else { + if ($v eq "---") { + $query .= "\t\t${or}bugs.$field = ''\n"; + } else { + $query .= "\t\t${or}bugs.$field = " . SqlQuote($v) . + "\n"; + } + } + $or = "or "; } } - set or "or " - } + $query .= "\t)\n"; } - qadd "\t)\n" - } } +} - if {[lookup FORM changedin] != ""} { - set c [string trim $FORM(changedin)] - if {$c != ""} { - if {![regexp {^[0-9]*$} $c]} { - puts " +if (defined $::FORM{'changedin'}) { + my $c = trim($::FORM{'changedin'}); + if ($c ne "") { + if ($c !~ /^[0-9]*$/) { + print " The 'changed in last ___ days' field must be a simple number. You entered \"$c\", which doesn't cut it.

-Click the Back button and try again." - exit - } - qadd "and to_days(now()) - to_days(bugs.delta_ts) <= $FORM(changedin) " - } - } - - foreach f {short_desc long_desc} { - set s [SqlQuote [string trim [lookup FORM $f]]] - if {$s != ""} { - if {[lookup FORM [set f]_type] == "regexp"} { - qadd "and $f regexp '$s' " - } else { - qadd "and instr($f, '$s') " - } - } - } - - +Click the Back button and try again."; + exit; + } + $query .= "and to_days(now()) - to_days(bugs.delta_ts) <= $c "; + } } - -if {[info exists FORM(order)]} { - qadd "order by " - switch -glob $FORM(order) { - *.* {} - *Number* { - set FORM(order) bugs.bug_id - } - *Import* { - set FORM(order) bugs.priority - } - *Assign* { - set FORM(order) "assign.login_name, bugs.bug_status, priority, bugs.bug_id" - } - default { - set FORM(order) "bugs.bug_status, priorities.rank, assign.login_name, bugs.bug_id" +foreach my $f ("short_desc", "long_desc") { + if (defined $::FORM{$f}) { + my $s = SqlQuote(trim($::FORM{$f})); + if ($s ne "") { + if ($::FORM{$f . "_type"} eq "regexp") { + $query .= "and $f regexp $s "; + } else { + $query .= "and instr($f, $s) "; + } } } - if {[cequal [cindex $FORM(order) 0] "\{"]} { - # I don't know why this happens, but... - set FORM(order) [lindex $FORM(order) 0] +} + + +if (defined $::FORM{'order'} && $::FORM{'order'} ne "") { + $query .= "order by "; + ORDER: for ($::FORM{'order'}) { + /\./ && do { + # This (hopefully) already has fieldnames in it, so we're done. + last ORDER; + }; + /Number/ && do { + $::FORM{'order'} = "bugs.bug_id"; + last ORDER; + }; + /Import/ && do { + $::FORM{'order'} = "bugs.priority"; + last ORDER; + }; + /Assign/ && do { + $::FORM{'order'} = "assign.login_name, bugs.bug_status, priority, bugs.bug_id"; + last ORDER; + }; + # DEFAULT + $::FORM{'order'} = "bugs.bug_status, priorities.rank, assign.login_name, bugs.bug_id"; } - qadd $FORM(order) + $query .= $::FORM{'order'}; } -puts "Please stand by ...

" -if {[info exists FORM(debug)]} { - puts "

$query
" +print "Please stand by ...

\n"; +if (defined $::FORM{'debug'}) { + print "

$query
\n"; } -flush stdout -SendSQL $query - -set count 0 -set bugl "" -proc pnl { str } { - global bugl - append bugl "$str" + +SendSQL($query); + +my $count = 0; +$::bugl = ""; +sub pnl { + my ($str) = (@_); + $::bugl .= $str; } -regsub -all {[&?]order=[^&]*} $buffer {} fields -regsub -all {[&?]cmdtype=[^&]*} $fields {} fields +my $fields = $::buffer; +$fields =~ s/[&?]order=[^&]*//g; +$fields =~ s/[&?]cmdtype=[^&]*//g; -if {[info exists FORM(order)]} { - regsub -all { } ", $FORM(order)" "%20" oldorder +my $oldorder; + +if (defined $::FORM{'order'}) { + $oldorder = url_quote(", $::FORM{'order'}"); } else { - set oldorder "" + $oldorder = ""; } -if {$dotweak} { - pnl "
" +if ($dotweak) { + pnl ""; } -set tablestart " +my $tablestart = "
-ID" +ID"; -foreach c $collist { - if { [info exists needquote($c)] } { - if {$needquote($c)} { - append tablestart "" +foreach my $c (@collist) { + if (exists $::needquote{$c}) { + if ($::needquote{$c}) { + $tablestart .= ""; } else { - append tablestart "" + $tablestart .= ""; } - if {[info exists sortkey($c)]} { - append tablestart "$title($c)" + if (defined $::sortkey{$c}) { + $tablestart .= "$::title{$c}"; } else { - append tablestart $title($c) + $tablestart .= $::title{$c}; } } } -append tablestart "\n" +$tablestart .= "\n"; -set dotweak [info exists FORM(tweak)] -set p_true 1 +my @row; +my %seen; +my @bugarray; +my %prodhash; +my %statushash; -while { $p_true } { - set result [FetchSQLData] - set p_true [MoreSQLData] - if { $result != "" } { - set bug_id [lvarpop result] - if {![info exists seen($bug_id)]} { - set seen($bug_id) 1 - incr count - if {($count % 200) == 0} { - # Too big tables take too much browser memory... - pnl "
$tablestart" - } - if {[info exists buglist]} { - append buglist ":$bug_id" +while (@row = FetchSQLData()) { + my $bug_id = shift @row; + if (!defined $seen{$bug_id}) { + $seen{$bug_id} = 1; + $count++; + if ($count % 200 == 0) { + # Too big tables take too much browser memory... + pnl "$tablestart"; + } + push @bugarray, $bug_id; + pnl ""; + if ($dotweak) { + pnl ""; + } + pnl ""; + pnl "$bug_id "; + foreach my $c (@collist) { + my $value = shift @row; + my $nowrap = ""; + + if (exists $::needquote{$c} && $::needquote{$c}) { + $value = html_quote($value); } else { - set buglist $bug_id - } - pnl "" - if {$dotweak} { - pnl "" - } - pnl "" - pnl "$bug_id " - foreach c $collist { - set value [lvarpop result] - set nowrap {} - - #-- This cursor is used to pick the login_name to be - # displayed on the query list as the field value may or - # maynot have vales associated to it - - if { $c == "qa_assigned_to"} { - set dml_cur [ oraopen $lhandle ] - - orasql $dml_cur "select login_name - from profiles - where userid = $value" - - set cur_resultset [orafetch $dml_cur] - - if {$cur_resultset != ""} { - set value $cur_resultset - set nowrap {nowrap} - } else { - set value "" - } - - oraclose $dml_cur - - } - - if { [info exists needquote($c)] && $needquote($c)} { - set value [html_quote $value] - } else { - set value "$value" - } - pnl "$value" - } - if {$dotweak} { - set value [lvarpop result] - set prodarray($value) 1 - set value [lvarpop result] - set statusarray($value) 1 + $value = "$value"; } - pnl "\n" + pnl "$value"; } + if ($dotweak) { + my $value = shift @row; + $prodhash{$value} = 1; + $value = shift @row; + $statushash{$value} = 1; + } + pnl "\n"; } } -puts "" -puts "--ThisRandomString" - -set toolong 0 -puts "Content-type: text/html" -if { [info exists buglist] } { - if {[clength $buglist] < 4000} { - puts "Set-Cookie: BUGLIST=$buglist" - } else { - puts "Set-Cookie: BUGLIST=" - set toolong 1 - } + + +my $buglist = join(":", @bugarray); + + +print "\n"; +print "--ThisRandomString\n"; + + +my $toolong = 0; +print "Content-type: text/html\n"; +if (length($buglist) < 4000) { + print "Set-Cookie: BUGLIST=$buglist\n"; +} else { + print "Set-Cookie: BUGLIST=\n"; + $toolong = 1; } -puts "" -set env(TZ) PST8PDT -PutHeader "Bug List" "Bug List" +print "\n"; + +PutHeader("Bug List"); -puts -nonewline " +print "
-[fmtclock [getclock ]]" -if {[info exists FORM(debug)]} { puts "
$query
" } +" . time2str("%a %b %e %T %Z %Y", time()) . ""; -if {$toolong} { - puts "

This list is too long for bugzilla's little mind; the" - puts "Next/Prev/First/Last buttons won't appear.

" +if (defined $::FORM{'debug'}) { + print "
$query
\n"; } -set cdata [ split [read_file -nonewline "comments"] "\n" ] -random seed -puts {
} -puts [lindex $cdata [random [llength $cdata]]]
-puts "
$tablestart" -puts $bugl -puts "" - -switch $count { - 0 { - puts "Zarro Boogs found." - } - 1 { - puts "One bug found." - } - default { - puts "$count bugs found." +if ($toolong) { + print "

This list is too long for bugzilla's little mind; the\n"; + print "Next/Prev/First/Last buttons won't appear.

\n"; +} + +# This is stupid. We really really need to move the quip list into the DB! + +my $quip; +if (open (COMMENTS, ") { + push @cdata, $_; } + close COMMENTS; + $quip = $cdata[int(rand($#cdata + 1))]; +} else { + $quip = "Bugzilla would like to put a random quip here, but nobody has entered any."; +} + + +print "
$quip\n"; +print "\n"; +print "
$tablestart\n"; +print $::bugl; +print "\n"; + +if ($count == 0) { + print "Zarro Boogs found.\n"; +} elsif ($count == 1) { + print "One bug found.\n"; +} else { + print "$count bugs found.\n"; } -if {$dotweak} { - GetVersionTable - puts " +if ($dotweak) { + GetVersionTable(); + print " " - set resolution_popup [make_options $legal_resolution_no_dup FIXED] - GetVersionTable - set prod_list [array names prodarray] - set list $prod_list - set legal_target_versions $versions([lvarpop list]) - foreach p $list { - set legal_target_versions [intersect $legal_target_versions \ - $versions($p)] +"; + my $resolution_popup = make_options(\@::legal_resolution_no_dup, "FIXED"); + my @prod_list = keys %prodhash; + my @list = @prod_list; + my @legal_versions; + my @legal_component; + if ($#prod_list == 1) { + @legal_versions = @{$::versions{$prod_list[0]}}; + @legal_component = @{$::components{$prod_list[0]}}; } - set version_popup [make_options \ - [concat "-blank-" $legal_target_versions] \ - $dontchange] - set platform_popup [make_options $legal_platform $dontchange] - set priority_popup [make_options $legal_priority $dontchange] - set sev_popup [make_options $legal_severity $dontchange] - if {[llength $prod_list] == 1} { - set prod_list [lindex $prod_list 0 ] - set legal_component [linsert $components($prod_list) 0 { }] - } else { - set legal_component { } - } - - set component_popup [make_options $legal_component $dontchange] + + my $version_popup = make_options(\@legal_versions, $::dontchange); + my $platform_popup = make_options(\@::legal_platform, $::dontchange); + my $priority_popup = make_options(\@::legal_priority, $::dontchange); + my $sev_popup = make_options(\@::legal_severity, $::dontchange); + my $component_popup = make_options(\@::legal_component, $::dontchange); + my $product_popup = make_options(\@::legal_product, $::dontchange); - set product_popup [make_options $legal_product $dontchange] - - puts " + print "
@@ -506,67 +507,68 @@ document.write(\" Additional Comments:
-
" +
"; # knum is which knob number we're generating, in javascript terms. - set knum 0 - puts " + my $knum = 0; + print " - Do nothing else
" - incr knum - puts " + Do nothing else
"; + $knum++; + print " - Accept bugs (change status to ASSIGNED)
" - incr knum - if {![info exists statusarray(CLOSED)] && \ - ![info exists statusarray(VERIFIED)] && \ - ![info exists statusarray(RESOLVED)]} { - puts " + Accept bugs (change status to ASSIGNED)
"; + $knum++; + if (!defined $statushash{'CLOSED'} && + !defined $statushash{'VERIFIED'} && + !defined $statushash{'RESOLVED'}) { + print " - Clear the resolution
" - incr knum - puts " + Clear the resolution
"; + $knum++; + print " Resolve bugs, changing resolution to
" - incr knum + $resolution_popup
"; + $knum++; } - if {![info exists statusarray(NEW)] && \ - ![info exists statusarray(ASSIGNED)] && \ - ![info exists statusarray(REOPENED)]} { - puts " - Reopen bugs
" - incr knum + if (!defined $statushash{'NEW'} && + !defined $statushash{'ASSIGNED'} && + !defined $statushash{'REOPENED'}) { + print " + Reopen bugs
"; + $knum++; } - if {[llength [array names statusarray]] == 1} { - if {[info exists statusarray(RESOLVED)]} { - puts " + my @statuskeys = keys %statushash; + if ($#statuskeys == 1) { + if (defined $statushash{'RESOLVED'}) { + print " - Mark bugs as VERIFIED
" - incr knum + Mark bugs as VERIFIED
"; + $knum++; } - if {[info exists statusarray(VERIFIED)]} { - puts " + if (defined $statushash{'VERIFIED'}) { + print " - Mark bugs as CLOSED
" - incr knum + Mark bugs as CLOSED
"; + $knum++; } } - puts " + print " Reassign bugs to
" - incr knum - puts " - Reassign bugs to owner of selected component
" - incr knum + VALUE=\"$::COOKIE{'Bugzilla_login'}\">
"; + $knum++; + print " + Reassign bugs to owner of selected component
"; + $knum++; - puts " + print "

To make changes to a bunch of bugs at once: @@ -577,35 +579,19 @@ To make changes to a bunch of bugs at once:

  • Click the below \"Commit\" button. -
    " +
    \n"; } -if {$count > 0} { - puts "
    +if ($count > 0) { + print " Query Page -Change columns -" - if {!$dotweak && $count > 1} { - puts "Make changes to several of these bugs at once." +Change columns +"; + if (!$dotweak && $count > 1) { + print "Make changes to several of these bugs at once.\n"; } } -puts "--ThisRandomString--" -flush stdout - -# -# Below is second part of hideous "if catch" stuff from above. -# -# -# -# }]} { -# exec /usr/lib/sendmail -t << "To: terry@mozilla.org -# -# -# $query -# -# $errorInfo -# " -# } +print "\n--ThisRandomString--\n"; -- cgit v1.2.3-24-g4f1b