summaryrefslogtreecommitdiffstats
path: root/importxml.pl
diff options
context:
space:
mode:
authorendico%mozilla.org <>2000-06-09 05:30:10 +0200
committerendico%mozilla.org <>2000-06-09 05:30:10 +0200
commitf4399fec29a4c9bfa7998f337f1745bb81800260 (patch)
tree52c8170b1ed4d9db2a6fd06cd48701e3eaa9cbfe /importxml.pl
parent9342a7c69bf415ff59459059e433634b86059297 (diff)
downloadbugzilla-f4399fec29a4c9bfa7998f337f1745bb81800260.tar.gz
bugzilla-f4399fec29a4c9bfa7998f337f1745bb81800260.tar.xz
experimental: Not part of normal bugzilla distibution. Bug.pm creates a bug object and provides methods for getting and setting attributes and for printing out the bug as xml. xml.cgi prompts for a list of bugs and displays the list as html. xml.cgi replaces export_bug.cgi
Diffstat (limited to 'importxml.pl')
-rwxr-xr-ximportxml.pl587
1 files changed, 306 insertions, 281 deletions
diff --git a/importxml.pl b/importxml.pl
index 4a41009fd..7872cfa80 100755
--- a/importxml.pl
+++ b/importxml.pl
@@ -28,6 +28,9 @@
use diagnostics;
use strict;
use XML::Parser;
+use Data::Dumper;
+$Data::Dumper::Useqq = 1;
+
require "CGI.pl";
require "globals.pl";
@@ -107,327 +110,349 @@ if ( ! $exporterid ) {
}
-my %multiple_fields;
-foreach my $field (qw (dependson cc long_desc blocks)) {
- $multiple_fields{$field} = "x";
-}
-my %all_fields;
-foreach my $field (qw (dependson product bug_status priority cc version
- bug_id rep_platform short_desc assigned_to resolution
- delta_ts component reporter urlbase target_milestone bug_severity
- creation_ts qa_contact keyword status_whiteboard op_sys blocks)) {
- $all_fields{$field} = "x";
-}
+my $bugqty = ($#{@{$tree}->[1]} +1 -3) / 4;
+print "Importing $bugqty bugs from $urlbase,\n sent by $exporter.\n";
+for (my $k=1 ; $k <= $bugqty ; $k++) {
+ my $cur = $k*4;
+
+ if (defined $tree->[1][$cur][0]->{'error'}) {
+ print "\nError in bug $tree->[1][$cur][4][2]\@$urlbase:";
+ print " $tree->[1][$cur][0]->{'error'}\n";
+ if ($tree->[1][$cur][0]->{'error'} =~ /NotFound/) {
+ print "$exporter tried to move bug $tree->[1][$cur][4][2] here";
+ print " but $urlbase reports that this bug does not exist.\n";
+ } elsif ( $tree->[1][$cur][0]->{'error'} =~ /NotPermitted/) {
+ print "$exporter tried to move bug $tree->[1][$cur][4][2] here";
+ print " but $urlbase reports that $exporter does not have access";
+ print " to that bug.\n";
+ }
+ next;
+ }
+
+ my %multiple_fields;
+ foreach my $field (qw (dependson cc long_desc blocks)) {
+ $multiple_fields{$field} = "x";
+ }
+ my %all_fields;
+ foreach my $field (qw (dependson product bug_status priority cc version
+ bug_id rep_platform short_desc assigned_to resolution
+ delta_ts component reporter urlbase target_milestone bug_severity
+ creation_ts qa_contact keyword status_whiteboard op_sys blocks)) {
+ $all_fields{$field} = "x";
+ }
-my %bug_fields;
-my $err = "";
-for (my $i=3 ; $i < $#{@{$tree}->[1][4]} ; $i=$i+4) {
- if (defined $multiple_fields{$tree->[1][4][$i]}) {
- if (defined $bug_fields{$tree->[1][4][$i]}) {
- $bug_fields{$tree->[1][4][$i]} .= " " . $tree->[1][4][$i+1][2];
- } else {
- $bug_fields{$tree->[1][4][$i]} = $tree->[1][4][$i+1][2];
- }
- } elsif (defined $all_fields{$tree->[1][4][$i]}) {
- $bug_fields{$tree->[1][4][$i]} = $tree->[1][4][$i+1][2];
- } else {
- $err .= "---\n";
- $err .= "Unknown bug field \"$tree->[1][4][$i]\"";
- $err .= " encountered while moving bug\n";
- $err .= "<$tree->[1][4][$i]>";
- if (defined $tree->[1][4][$i+1][3]) {
- $err .= "\n";
- for (my $j=3 ; $j < $#{@{$tree}->[1][4][$i+1]} ; $j=$j+4) {
- $err .= " <". $tree->[1][4][$i+1][$j] . ">";
- $err .= " $tree->[1][4][$i+1][$j+1][2] ";
- $err .= "</". $tree->[1][4][$i+1][$j] . ">\n";
+ my %bug_fields;
+ my $err = "";
+ for (my $i=3 ; $i < $#{@{$tree}->[1][$cur]} ; $i=$i+4) {
+ if (defined $multiple_fields{$tree->[1][$cur][$i]}) {
+ if (defined $bug_fields{$tree->[1][$cur][$i]}) {
+ $bug_fields{$tree->[1][$cur][$i]} .= " " . $tree->[1][$cur][$i+1][2];
+ } else {
+ $bug_fields{$tree->[1][$cur][$i]} = $tree->[1][$cur][$i+1][2];
}
+ } elsif (defined $all_fields{$tree->[1][$cur][$i]}) {
+ $bug_fields{$tree->[1][$cur][$i]} = $tree->[1][$cur][$i+1][2];
} else {
- $err .= " $tree->[1][4][$i+1][2] ";
+ $err .= "---\n";
+ $err .= "Unknown bug field \"$tree->[1][$cur][$i]\"";
+ $err .= " encountered while moving bug\n";
+ $err .= "<$tree->[1][$cur][$i]>";
+ if (defined $tree->[1][$cur][$i+1][3]) {
+ $err .= "\n";
+ for (my $j=3 ; $j < $#{@{$tree}->[1][$cur][$i+1]} ; $j=$j+4) {
+ $err .= " <". $tree->[1][$cur][$i+1][$j] . ">";
+ $err .= " $tree->[1][$cur][$i+1][$j+1][2] ";
+ $err .= "</". $tree->[1][$cur][$i+1][$j] . ">\n";
+ }
+ } else {
+ $err .= " $tree->[1][$cur][$i+1][2] ";
+ }
+ $err .= "</$tree->[1][$cur][$i]>\n";
}
- $err .= "</$tree->[1][4][$i]>\n";
}
-}
-my @long_descs;
-for (my $i=3 ; $i < $#{@{$tree}->[1][4]} ; $i=$i+4) {
- if ($tree->[1][4][$i] =~ /long_desc/) {
- my %long_desc;
- $long_desc{'who'} = $tree->[1][4][$i+1][4][2];
- $long_desc{'bug_when'} = $tree->[1][4][$i+1][8][2];
- $long_desc{'thetext'} = $tree->[1][4][$i+1][12][2];
- push @long_descs, \%long_desc;
+ my @long_descs;
+ for (my $i=3 ; $i < $#{@{$tree}->[1][$cur]} ; $i=$i+4) {
+ if ($tree->[1][$cur][$i] =~ /long_desc/) {
+ my %long_desc;
+ $long_desc{'who'} = $tree->[1][$cur][$i+1][4][2];
+ $long_desc{'bug_when'} = $tree->[1][$cur][$i+1][8][2];
+ $long_desc{'thetext'} = $tree->[1][$cur][$i+1][12][2];
+ push @long_descs, \%long_desc;
+ }
}
-}
-# instead of giving each comment its own item in the longdescs
-# table like it should have, lets cat them all into one big
-# comment otherwise we would have to lie often about who
-# authored the comment since commenters in one bugzilla probably
-# don't have accounts in the other one.
-sub by_date {my @a; my @b; $a->{'bug_when'} cmp $b->{'bug_when'}; }
-my @sorted_descs = sort by_date @long_descs;
-my $long_description = "";
-for (my $i=0 ; $i < $#sorted_descs ; $i++) {
- unless ( $i==0 ) {
- $long_description .= "\n\n\n------- Additional Comments From ";
- $long_description .= "$sorted_descs[$i]->{'who'} ";
- $long_description .= "$sorted_descs[$i]->{'bug_when'}";
- $long_description .= " ----\n\n";
+ # instead of giving each comment its own item in the longdescs
+ # table like it should have, lets cat them all into one big
+ # comment otherwise we would have to lie often about who
+ # authored the comment since commenters in one bugzilla probably
+ # don't have accounts in the other one.
+ sub by_date {my @a; my @b; $a->{'bug_when'} cmp $b->{'bug_when'}; }
+ my @sorted_descs = sort by_date @long_descs;
+ my $long_description = "";
+ for (my $z=0 ; $z <= $#sorted_descs ; $z++) {
+ unless ( $z==0 ) {
+ $long_description .= "\n\n\n------- Additional Comments From ";
+ $long_description .= "$sorted_descs[$z]->{'who'} ";
+ $long_description .= "$sorted_descs[$z]->{'bug_when'}";
+ $long_description .= " ----\n\n";
+ }
+ $long_description .= "$sorted_descs[$z]->{'thetext'}\n";
}
- $long_description .= "$sorted_descs[$i]->{'thetext'}\n"
-}
-my $comments;
-my $query = "INSERT INTO bugs (\n";
-my $values = "VALUES (\n";
-
-$comments .= "\n\n------- Bug Moved by $exporter ";
-$comments .= time2str("%Y-%m-%d %H:%M", time);
-$comments .= " -------\n\n";
-$comments .= "This bug previously known as bug $bug_fields{'bug_id'} at ";
-$comments .= $urlbase . "\n";
-$comments .= $urlbase . "show_bug.cgi?";
-$comments .= "id=" . $bug_fields{'bug_id'} . "\n";
-$comments .= "Originally filed under the $bug_fields{'product'} ";
-$comments .= "product and $bug_fields{'component'} component.\n";
-if (defined $bug_fields{'dependson'}) {
- $comments .= "Bug depends on bug(s) $bug_fields{'dependson'}.\n";
-}
-if (defined $bug_fields{'blocks'}) {
-$comments .= "Bug blocks bug(s) $bug_fields{'blocks'}.\n";
-}
+ my $comments;
+ my $query = "INSERT INTO bugs (\n";
+ my $values = "VALUES (\n";
+
+ $comments .= "\n\n------- Bug Moved by $exporter ";
+ $comments .= time2str("%Y-%m-%d %H:%M", time);
+ $comments .= " -------\n\n";
+ $comments .= "This bug previously known as bug $bug_fields{'bug_id'} at ";
+ $comments .= $urlbase . "\n";
+ $comments .= $urlbase . "show_bug.cgi?";
+ $comments .= "id=" . $bug_fields{'bug_id'} . "\n";
+ $comments .= "Originally filed under the $bug_fields{'product'} ";
+ $comments .= "product and $bug_fields{'component'} component.\n";
+ if (defined $bug_fields{'dependson'}) {
+ $comments .= "Bug depends on bug(s) $bug_fields{'dependson'}.\n";
+ }
+ if (defined $bug_fields{'blocks'}) {
+ $comments .= "Bug blocks bug(s) $bug_fields{'blocks'}.\n";
+ }
-foreach my $field ( qw(creation_ts delta_ts keywords status_whiteboard) ) {
- if ( (defined $bug_fields{$field}) && ($bug_fields{$field}) ){
- $query .= "$field,\n";
- $values .= SqlQuote($bug_fields{$field}) . ",\n";
- }
-}
+ foreach my $field ( qw(creation_ts delta_ts keywords status_whiteboard) ) {
+ if ( (defined $bug_fields{$field}) && ($bug_fields{$field}) ){
+ $query .= "$field,\n";
+ $values .= SqlQuote($bug_fields{$field}) . ",\n";
+ }
+ }
-if ( (defined $bug_fields{'short_desc'}) && ($bug_fields{'short_desc'}) ){
- $query .= "short_desc,\n";
+ if ( (defined $bug_fields{'short_desc'}) && ($bug_fields{'short_desc'}) ){
+ $query .= "short_desc,\n";
$values .= SqlQuote(UnQuoteXMLChars($bug_fields{'short_desc'})) . ",\n";
- }
+ }
-my @product;
-if (defined ($bug_fields{'product'}) &&
- (@product = grep /^$bug_fields{'product'}$/i, @::legal_product) ){
- $query .= "product,\n";
- $values .= SqlQuote($product[0]) . ",\n";
-} else {
- $query .= "product,\n";
- $values .= "\'Browser\',\n";
- $product[0] = "Browser";
- $err .= "Unknown product $bug_fields{'product'}. ";
- $err .= "Moving to default product \"Browser\".\n";
-}
+ my @product;
+ if (defined ($bug_fields{'product'}) &&
+ (@product = grep /^$bug_fields{'product'}$/i, @::legal_product) ){
+ $query .= "product,\n";
+ $values .= SqlQuote($product[0]) . ",\n";
+ } else {
+ $query .= "product,\n";
+ $values .= "\'Browser\',\n";
+ $product[0] = "Browser";
+ $err .= "Unknown product $bug_fields{'product'}. ";
+ $err .= "Moving to default product \"Browser\".\n";
+ }
-if (defined ($::versions{$product[0]} ) &&
- (my @version = grep /^$bug_fields{'version'}$/i,
- @{$::versions{$product[0]}}) ){
- $values .= SqlQuote($version[0]) . ",\n";
- $query .= "version,\n";
-} else {
- $query .= "version,\n";
- $values .= "\'@{$::versions{$product[0]}}->[0]\',\n";
- $err .= "Unknown version $bug_fields{'version'} in product $product[0]. ";
- $err .= "Setting version to \"@{$::versions{$product[0]}}->[0]\".\n";
-}
+ if (defined ($::versions{$product[0]} ) &&
+ (my @version = grep /^$bug_fields{'version'}$/i,
+ @{$::versions{$product[0]}}) ){
+ $values .= SqlQuote($version[0]) . ",\n";
+ $query .= "version,\n";
+ } else {
+ $query .= "version,\n";
+ $values .= "\'@{$::versions{$product[0]}}->[0]\',\n";
+ $err .= "Unknown version $bug_fields{'version'} in product $product[0]. ";
+ $err .= "Setting version to \"@{$::versions{$product[0]}}->[0]\".\n";
+ }
-if (defined ($bug_fields{'priority'}) &&
- (my @priority = grep /^$bug_fields{'priority'}$/i, @::legal_priority) ){
- $values .= SqlQuote($priority[0]) . ",\n";
- $query .= "priority,\n";
-} else {
- $values .= "\'P3\',\n";
- $query .= "priority,\n";
- $err .= "Unknown priority ";
- $err .= (defined $bug_fields{'priority'})?$bug_fields{'priority'}:"unknown";
- $err .= ". Setting to default priority \"P3\".\n";
-}
+ if (defined ($bug_fields{'priority'}) &&
+ (my @priority = grep /^$bug_fields{'priority'}$/i, @::legal_priority) ){
+ $values .= SqlQuote($priority[0]) . ",\n";
+ $query .= "priority,\n";
+ } else {
+ $values .= "\'P3\',\n";
+ $query .= "priority,\n";
+ $err .= "Unknown priority ";
+ $err .= (defined $bug_fields{'priority'})?$bug_fields{'priority'}:"unknown";
+ $err .= ". Setting to default priority \"P3\".\n";
+ }
-if (defined ($bug_fields{'rep_platform'}) &&
- (my @platform = grep /^$bug_fields{'rep_platform'}$/i, @::legal_platform) ){
- $values .= SqlQuote($platform[0]) . ",\n";
- $query .= "rep_platform,\n";
-} else {
- $values .= "\'Other\',\n";
- $query .= "rep_platform,\n";
- $err .= "Unknown platform ";
- $err .= (defined $bug_fields{'rep_platform'})?
- $bug_fields{'rep_platform'}:"unknown";
- $err .= ". Setting to default platform \"Other\".\n";
-}
+ if (defined ($bug_fields{'rep_platform'}) &&
+ (my @platform = grep /^$bug_fields{'rep_platform'}$/i, @::legal_platform) ){
+ $values .= SqlQuote($platform[0]) . ",\n";
+ $query .= "rep_platform,\n";
+ } else {
+ $values .= "\'Other\',\n";
+ $query .= "rep_platform,\n";
+ $err .= "Unknown platform ";
+ $err .= (defined $bug_fields{'rep_platform'})?
+ $bug_fields{'rep_platform'}:"unknown";
+ $err .= ". Setting to default platform \"Other\".\n";
+ }
-if (defined ($bug_fields{'op_sys'}) &&
+ if (defined ($bug_fields{'op_sys'}) &&
(my @opsys = grep /^$bug_fields{'op_sys'}$/i, @::legal_opsys) ){
- $values .= SqlQuote($opsys[0]) . ",\n";
- $query .= "op_sys,\n";
-} else {
- $values .= "\'other\',\n";
- $query .= "op_sys,\n";
- $err .= "Unknown operating system ";
- $err .= (defined $bug_fields{'op_sys'})?$bug_fields{'op_sys'}:"unknown";
- $err .= ". Setting to default OS \"other\".\n";
-}
+ $values .= SqlQuote($opsys[0]) . ",\n";
+ $query .= "op_sys,\n";
+ } else {
+ $values .= "\'other\',\n";
+ $query .= "op_sys,\n";
+ $err .= "Unknown operating system ";
+ $err .= (defined $bug_fields{'op_sys'})?$bug_fields{'op_sys'}:"unknown";
+ $err .= ". Setting to default OS \"other\".\n";
+ }
-my @component;
-if (defined ($::components{$product[0]} ) &&
- (@component = grep /^$bug_fields{'component'}$/i,
+ my @component;
+ if (defined ($::components{$product[0]} ) &&
+ (@component = grep /^$bug_fields{'component'}$/i,
@{$::components{$product[0]}}) ){
- $values .= SqlQuote($component[0]) . ",\n";
- $query .= "component,\n";
-} else {
- $component[0] = $::components{$product[0]}->[0];
- $values .= SqlQuote($component[0]) . ",\n";
- $query .= "component,\n";
- $err .= "Unknown component \"";
- $err .= (defined $bug_fields{'component'})?$bug_fields{'component'}:"unknown";
- $err .= "\" in product \"$product[0]\".\n";
- $err .= " Setting to this product\'s first component, ";
- $err .= "\'$::components{$product[0]}->[0]\'.\n";
-}
-
-if (Param("usetargetmilestone")) {
- if (defined ($::target_milestone{$product[0]} ) &&
- (my @tm = grep /^$bug_fields{'target_milestone'}$/i,
- @{$::target_milestone{$product[0]}}) ){
- $values .= SqlQuote($tm[0]) . ",\n";
- $query .= "target_milestone,\n";
+ $values .= SqlQuote($component[0]) . ",\n";
+ $query .= "component,\n";
} else {
- SendSQL("SELECT defaultmilestone FROM products " .
- "WHERE product = " . SqlQuote($product[0]));
- my $tm = FetchOneColumn();
- $values .= "\'$tm\',\n";
- $query .= "target_milestone,\n";
- $err .= "Unknown milestone \"";
- $err .= (defined $bug_fields{'target_milestone'})?
- $bug_fields{'target_milestone'}:"unknown";
+ $component[0] = $::components{$product[0]}->[0];
+ $values .= SqlQuote($component[0]) . ",\n";
+ $query .= "component,\n";
+ $err .= "Unknown component \"";
+ $err .= (defined $bug_fields{'component'})?$bug_fields{'component'}:"unknown";
$err .= "\" in product \"$product[0]\".\n";
- $err .= " Setting to default milestone for this product, ";
- $err .= "\'" . $tm . "\'\n";
+ $err .= " Setting to this product\'s first component, ";
+ $err .= "\'$::components{$product[0]}->[0]\'.\n";
}
-}
-if (defined ($bug_fields{'bug_severity'}) &&
- (my @severity= grep /^$bug_fields{'bug_severity'}$/i,
- @::legal_severity) ){
- $values .= SqlQuote($severity[0]) . ",\n";
- $query .= "bug_severity,\n";
-} else {
- $values .= "\'normal',\n";
- $query .= "bug_severity,\n";
- $err .= "Unknown severity ";
- $err .= (defined $bug_fields{'bug_severity'})?
- $bug_fields{'bug_severity'}:"unknown";
- $err .= ". Setting to default severity \"normal\".\n";
-}
+ if (Param("usetargetmilestone")) {
+ if (defined ($::target_milestone{$product[0]} ) &&
+ (my @tm = grep /^$bug_fields{'target_milestone'}$/i,
+ @{$::target_milestone{$product[0]}}) ){
+ $values .= SqlQuote($tm[0]) . ",\n";
+ $query .= "target_milestone,\n";
+ } else {
+ SendSQL("SELECT defaultmilestone FROM products " .
+ "WHERE product = " . SqlQuote($product[0]));
+ my $tm = FetchOneColumn();
+ $values .= "\'$tm\',\n";
+ $query .= "target_milestone,\n";
+ $err .= "Unknown milestone \"";
+ $err .= (defined $bug_fields{'target_milestone'})?
+ $bug_fields{'target_milestone'}:"unknown";
+ $err .= "\" in product \"$product[0]\".\n";
+ $err .= " Setting to default milestone for this product, ";
+ $err .= "\'" . $tm . "\'\n";
+ }
+ }
-my $changed_owner = 0;
-if ( ($bug_fields{'assigned_to'}) &&
- ( DBname_to_id($bug_fields{'assigned_to'})) ) {
- $values .= "'" . DBname_to_id($bug_fields{'assigned_to'}) . "',\n";
- $query .= "assigned_to,\n";
-} else {
- $values .= "'" . $exporterid . "',\n";
- $query .= "assigned_to,\n";
- $changed_owner = 1;
- $err .= "The original owner of this bug does not have\n";
- $err .= " an account here. Reassigning to the person who moved\n";
- $err .= " it here, $bug_fields{'exporter'}\n";
- if ( $bug_fields{'assigned_to'} ) {
- $err .= " Previous owner was $bug_fields{'assigned_to'}.\n";
+ if (defined ($bug_fields{'bug_severity'}) &&
+ (my @severity= grep /^$bug_fields{'bug_severity'}$/i,
+ @::legal_severity) ){
+ $values .= SqlQuote($severity[0]) . ",\n";
+ $query .= "bug_severity,\n";
} else {
- $err .= " Previous owner is unknown.\n";
+ $values .= "\'normal',\n";
+ $query .= "bug_severity,\n";
+ $err .= "Unknown severity ";
+ $err .= (defined $bug_fields{'bug_severity'})?
+ $bug_fields{'bug_severity'}:"unknown";
+ $err .= ". Setting to default severity \"normal\".\n";
}
-}
-my @resolution;
-if (defined ($bug_fields{'resolution'}) &&
- (@resolution= grep /^$bug_fields{'resolution'}$/i, @::legal_resolution) ){
- $values .= SqlQuote($resolution[0]) . ",\n";
- $query .= "resolution,\n";
-} elsif ( (defined $bug_fields{'resolution'}) && (!$resolution[0]) ){
- $err .= "Unknown resolution \"$bug_fields{'resolution'}\".\n";
-}
+ my $changed_owner = 0;
+ if ( ($bug_fields{'assigned_to'}) &&
+ ( DBname_to_id($bug_fields{'assigned_to'})) ) {
+ $values .= "'" . DBname_to_id($bug_fields{'assigned_to'}) . "',\n";
+ $query .= "assigned_to,\n";
+ } else {
+ $values .= "'" . $exporterid . "',\n";
+ $query .= "assigned_to,\n";
+ $changed_owner = 1;
+ $err .= "The original owner of this bug does not have\n";
+ $err .= " an account here. Reassigning to the person who moved\n";
+ $err .= " it here, $bug_fields{'exporter'}\n";
+ if ( $bug_fields{'assigned_to'} ) {
+ $err .= " Previous owner was $bug_fields{'assigned_to'}.\n";
+ } else {
+ $err .= " Previous owner is unknown.\n";
+ }
+ }
-# if the bug's owner changed, mark the bug NEW, unless a valid
-# resolution is set, which indicates that the bug should be closed.
-#
-if ( ($changed_owner) && (!$resolution[0]) ) {
- $values .= "\'NEW\',\n";
- $query .= "bug_status,\n";
- $err .= "Bug assigned to new owner, setting status to \"NEW\".\n";
- $err .= " Previous status was \"";
- $err .= (defined $bug_fields{'bug_status'})?
- $bug_fields{'bug_status'}:"unknown";
- $err .= "\".\n";
-} elsif ( (defined ($bug_fields{'resolution'})) && (!$resolution[0]) ){
- #if the resolution was illegal then set status to NEW
- $values .= "\'NEW\',\n";
- $query .= "bug_status,\n";
- $err .= "Resolution was invalid. Setting status to \"NEW\".\n";
- $err .= " Previous status was \"";
- $err .= (defined $bug_fields{'bug_status'})?
- $bug_fields{'bug_status'}:"unknown";
- $err .= "\".\n";
-} elsif (defined ($bug_fields{'bug_status'}) &&
- (my @status = grep /^$bug_fields{'bug_status'}$/i, @::legal_bug_status) ){
- #if a bug status was set then use it, if its legal
- $values .= SqlQuote($status[0]) . ",\n";
- $query .= "bug_status,\n";
-} else {
- # if all else fails, make the bug new
- $values .= "\'NEW\',\n";
- $query .= "bug_status,\n";
- $err .= "Unknown status ";
- $err .= (defined $bug_fields{'bug_status'})?
- $bug_fields{'bug_status'}:"unknown";
- $err .= ". Setting to default status \"NEW\".\n";
-}
+ my @resolution;
+ if (defined ($bug_fields{'resolution'}) &&
+ (@resolution= grep /^$bug_fields{'resolution'}$/i, @::legal_resolution) ){
+ $values .= SqlQuote($resolution[0]) . ",\n";
+ $query .= "resolution,\n";
+ } elsif ( (defined $bug_fields{'resolution'}) && (!$resolution[0]) ){
+ $err .= "Unknown resolution \"$bug_fields{'resolution'}\".\n";
+ }
-if (Param("useqacontact")) {
- my $qa_contact;
- if ( (defined $bug_fields{'qa_contact'}) &&
- ($qa_contact = DBname_to_id($bug_fields{'qa_contact'})) ){
- $values .= "'$qa_contact'";
- $query .= "qa_contact\n";
+ # if the bug's owner changed, mark the bug NEW, unless a valid
+ # resolution is set, which indicates that the bug should be closed.
+ #
+ if ( ($changed_owner) && (!$resolution[0]) ) {
+ $values .= "\'NEW\',\n";
+ $query .= "bug_status,\n";
+ $err .= "Bug assigned to new owner, setting status to \"NEW\".\n";
+ $err .= " Previous status was \"";
+ $err .= (defined $bug_fields{'bug_status'})?
+ $bug_fields{'bug_status'}:"unknown";
+ $err .= "\".\n";
+ } elsif ( (defined ($bug_fields{'resolution'})) && (!$resolution[0]) ){
+ #if the resolution was illegal then set status to NEW
+ $values .= "\'NEW\',\n";
+ $query .= "bug_status,\n";
+ $err .= "Resolution was invalid. Setting status to \"NEW\".\n";
+ $err .= " Previous status was \"";
+ $err .= (defined $bug_fields{'bug_status'})?
+ $bug_fields{'bug_status'}:"unknown";
+ $err .= "\".\n";
+ } elsif (defined ($bug_fields{'bug_status'}) &&
+ (my @status = grep /^$bug_fields{'bug_status'}$/i, @::legal_bug_status) ){
+ #if a bug status was set then use it, if its legal
+ $values .= SqlQuote($status[0]) . ",\n";
+ $query .= "bug_status,\n";
} else {
- SendSQL("select initialqacontact from components where program=" .
- SqlQuote($product[0]) .
- " and value=" . SqlQuote($component[0]) );
- $qa_contact = FetchOneColumn();
- $values .= SqlQuote(DBname_to_id($qa_contact)) . "\n";
- $query .= "qa_contact\n";
- $err .= "Setting qa contact to the default for this product.\n";
- $err .= " This bug either had no qa contact or an invalid one.\n";
+ # if all else fails, make the bug new
+ $values .= "\'NEW\',\n";
+ $query .= "bug_status,\n";
+ $err .= "Unknown status ";
+ $err .= (defined $bug_fields{'bug_status'})?
+ $bug_fields{'bug_status'}:"unknown";
+ $err .= ". Setting to default status \"NEW\".\n";
}
-}
-$query .= ") $values )\n";
-SendSQL($query);
-SendSQL("select LAST_INSERT_ID()");
-my $id = FetchOneColumn();
+ if (Param("useqacontact")) {
+ my $qa_contact;
+ if ( (defined $bug_fields{'qa_contact'}) &&
+ ($qa_contact = DBname_to_id($bug_fields{'qa_contact'})) ){
+ $values .= "'$qa_contact'";
+ $query .= "qa_contact\n";
+ } else {
+ SendSQL("select initialqacontact from components where program=" .
+ SqlQuote($product[0]) .
+ " and value=" . SqlQuote($component[0]) );
+ $qa_contact = FetchOneColumn();
+ $values .= SqlQuote(DBname_to_id($qa_contact)) . "\n";
+ $query .= "qa_contact\n";
+ $err .= "Setting qa contact to the default for this product.\n";
+ $err .= " This bug either had no qa contact or an invalid one.\n";
+ }
+ }
-foreach my $person (split(/[ ,]/, $bug_fields{'cc'})) {
- my $uid;
- if ( ($person ne "") && ($uid = DBname_to_id($person)) ) {
- SendSQL("insert into cc (bug_id, who) values ($id, " . SqlQuote($uid) .")");
+ $query .= ") $values )\n";
+ SendSQL($query);
+ SendSQL("select LAST_INSERT_ID()");
+ my $id = FetchOneColumn();
+
+ if (defined $bug_fields{'cc'}) {
+ foreach my $person (split(/[ ,]/, $bug_fields{'cc'})) {
+ my $uid;
+ if ( ($person ne "") && ($uid = DBname_to_id($person)) ) {
+ SendSQL("insert into cc (bug_id, who) values ($id, " . SqlQuote($uid) .")");
+ }
+ }
}
-}
-$long_description .= "\n" . $comments;
-if ($err) {
- $long_description .= "\n$err\n";
-}
+ $long_description .= "\n" . $comments;
+ if ($err) {
+ $long_description .= "\n$err\n";
+ }
-SendSQL("INSERT INTO longdescs (bug_id, who, bug_when, thetext) VALUES " .
- "($id, $exporterid, now(), " . SqlQuote($long_description) . ")");
+ SendSQL("INSERT INTO longdescs (bug_id, who, bug_when, thetext) VALUES " .
+ "($id, $exporterid, now(), " . SqlQuote($long_description) . ")");
-print "Bug $bug_fields{'bug_id'}\@$urlbase ";
-print "imported as bug $id.\n";
+ print "Bug $bug_fields{'bug_id'}\@$urlbase ";
+ print "imported as bug $id.\n";
+}