summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xchecksetup.pl126
1 files changed, 49 insertions, 77 deletions
diff --git a/checksetup.pl b/checksetup.pl
index 3a6e7f117..e21600ebf 100755
--- a/checksetup.pl
+++ b/checksetup.pl
@@ -773,6 +773,22 @@ my $my_db_name = ${*{$main::{'db_name'}}{SCALAR}};
my $my_index_html = ${*{$main::{'index_html'}}{SCALAR}};
my $my_create_htaccess = ${*{$main::{'create_htaccess'}}{SCALAR}};
my $my_webservergroup = ${*{$main::{'webservergroup'}}{SCALAR}};
+# mkanat@bugzilla.org - bug 17453
+# The following values have been removed from localconfig.
+# However, if we are upgrading from a Bugzilla with enums to a
+# Bugzilla without enums, we use these values one more time so
+# that we correctly populate the tables.
+my @my_severities;
+@my_severities = @{*{$main::{'severities'}}{ARRAY}}
+ if exists($main::{'severities'});
+my @my_priorities;
+@my_priorities = @{*{$main::{'priorities'}}{ARRAY}}
+ if exists($main::{'priorities'});
+my @my_platforms;
+@my_platforms = @{*{$main::{'platforms'}}{ARRAY}}
+ if exists($main::{'platforms'});
+my @my_opsys;
+@my_opsys = @{*{$main::{'opsys'}}{ARRAY}} if exists($main::{'opsys'});
if ($my_webservergroup && !$silent) {
if ($^O !~ /MSWin32/i) {
@@ -1793,50 +1809,9 @@ AddFDef($new_field_name, $field_description, 0);
# Detect changed local settings
###########################################################################
-# Nick Barnes nb+bz@ravenbrook.com 2005-10-05
-#
-# GetEnumsValues(\%hash): takes a hash from column names to listrefs
-# of values. If any of the columns are enum columns in the 'bugs'
-# table, the listrefs are replaced with listrefs of the allowed enum
-# values. This is all done in one function because DBD::MySQL
-# provides no mechanism for getting type information for a single
-# column.
-#
-# Possibly something like this belongs in Bugzilla/DB/Schema/Mysql.pm.
-
-sub GetEnumsValues {
- my ($hashref) = @_;
- # Get a complete description of the 'bugs' table; with DBD::MySQL
- # there isn't a column-by-column way of doing this. Could use
- # $dbh->column_info, but it would go slower and we would have to
- # use the undocumented mysql_type_name accessor to get the type
- # of each row.
- my $sth = $dbh->prepare("DESCRIBE bugs");
- $sth->execute();
- # Look for the particular columns we are interested in.
- while (my ($thiscol, $thistype) = ($sth->fetchrow_array())) {
- if (defined($$hashref{$thiscol})) {
- # this is a column of interest.
- my @value_list = ();
- if ($thistype && ($thistype =~ /^enum\(/)) {
- # it has an enum type; get the set of values.
- while ($thistype =~ /'([^']*)'(.*)/) {
- push(@value_list, $1);
- $thistype = $2;
- }
- }
- if (@value_list) {
- # record the enum values found.
- $$hashref{$thiscol} = \@value_list;
- }
- }
- }
-}
-
-# PopulateEnumTable($table, @values): if the table $table has no
-# entries, fill it with the entries in the list @values, in the same
-# order as that list.
-
+# mkanat@bugzilla.org - bug 17453
+# Create the values for the tables that hold what used to be enum types.
+# Don't populate the tables if the table isn't empty.
sub PopulateEnumTable {
my ($table, @valuelist) = @_;
@@ -1865,40 +1840,37 @@ sub PopulateEnumTable {
}
}
-# Set default values for what used to be the enum types. These values
-# are no longer stored in localconfig. If we are upgrading from a
-# Bugzilla with enums to a Bugzilla without enums, we use the
-# enum values.
-#
+# mkanat@bugzilla.org - bug 17453
+# Set default values for what used to be the enum types.
+# These values are no longer stored in localconfig.
+# However, if we are upgrading from a Bugzilla with enums to a
+# Bugzilla without enums, we use the localconfig values one more time.
+
# The values that you see here are ONLY DEFAULTS. They are only used
-# the FIRST time you run checksetup, IF you are NOT upgrading from a
-# Bugzilla with enums. After that, they are either controlled through
-# the Bugzilla UI or through the DB.
-
-my %enum_values = (bug_severity =>
- ['blocker', 'critical', 'major', 'normal',
- 'minor', 'trivial', 'enhancement'],
- priority =>
- ["P1","P2","P3","P4","P5"],
- op_sys =>
- ["All","Windows","Mac OS","Linux","Other"],
- rep_platform =>
- ["All","PC","Macintosh","Other"],
- bug_status =>
- ["UNCONFIRMED","NEW","ASSIGNED","REOPENED","RESOLVED",
- "VERIFIED","CLOSED"],
- resolution =>
- ["","FIXED","INVALID","WONTFIX","LATER","REMIND",
- "DUPLICATE","WORKSFORME","MOVED"]);
-
-# Get all the enum column values for the existing database, or the
-# defaults if the columns are not enums.
-GetEnumsValues(\%enum_values);
-
-# Populate the enum tables.
-while (my ($table, $values) = each %enum_values) {
- PopulateEnumTable($table, @$values);
-}
+# the FIRST time you run checksetup. After that, they are either
+# controlled through the Bugzilla UI or through the DB.
+@my_severities = ('blocker','critical','major','normal','minor',
+ 'trivial','enhancement') if !@my_severities;
+@my_priorities = ("P1","P2","P3","P4","P5") if !@my_priorities;
+@my_opsys = ("All","Windows","Mac OS","Linux","Other") if !@my_opsys;
+@my_platforms = ("All","PC","Macintosh","Other") if !@my_platforms;
+
+PopulateEnumTable('bug_severity', @my_severities);
+PopulateEnumTable('priority', @my_priorities);
+PopulateEnumTable('op_sys', @my_opsys);
+PopulateEnumTable('rep_platform', @my_platforms);
+
+# The resolution and bug_status lists are absolute. On an upgrade from
+# a Bugzilla with enums, whatever is in the enum will be replaced with
+# this. This is because Bugzilla depends on the exact names of these
+# resolutions in order to function properly.
+my @states = ("UNCONFIRMED","NEW","ASSIGNED","REOPENED","RESOLVED",
+ "VERIFIED","CLOSED");
+my @resolutions = ("","FIXED","INVALID","WONTFIX","LATER","REMIND",
+ "DUPLICATE","WORKSFORME","MOVED");
+PopulateEnumTable('bug_status', @states);
+PopulateEnumTable('resolution', @resolutions);
+
###########################################################################
# Create initial test product if there are no products present.