From e60eb2199e3bed780637cd635c410fdde1ea33ba Mon Sep 17 00:00:00 2001
From: David Lawrence
Date: Thu, 1 Feb 2024 16:22:23 -0500
Subject: [PATCH] Bug 1877294 - When adding a new version and mileston when new
Firefox is released, disabled old versions and milestones 10 releases or
older
---
Bugzilla/App/BMO/NewRelease.pm | 88 ++++++++++++++++---
qa/t/3_test_new_release.t | 7 ++
.../en/default/pages/new_release.html.tmpl | 33 ++++++-
3 files changed, 115 insertions(+), 13 deletions(-)
diff --git a/Bugzilla/App/BMO/NewRelease.pm b/Bugzilla/App/BMO/NewRelease.pm
index 7ea13ff982..dd795272b4 100644
--- a/Bugzilla/App/BMO/NewRelease.pm
+++ b/Bugzilla/App/BMO/NewRelease.pm
@@ -63,6 +63,7 @@ sub new_release {
my $vars = {
next_release => $current_nightly + 1,
+ old_release => $current_nightly - 10,
selectable_products => $selectable_products,
default_milestone_products => $default_milestone_products,
default_version_products => $default_version_products,
@@ -80,37 +81,72 @@ sub new_release {
# Sanity check new values for milestone and version
my $new_milestone = trim($self->param('new_milestone'));
+ my $old_milestone = trim($self->param('old_milestone'));
my $new_version = trim($self->param('new_version'));
+ my $old_version = trim($self->param('old_version'));
+
$new_milestone =~ /^\d+$/
- || return $self->user_error("number_not_numeric",
- {field => 'milestone', num => $new_milestone});
+ || return $self->user_error('number_not_numeric',
+ {field => 'new_milestone', num => $new_milestone});
$new_version =~ /^\d+$/
- || return $self->user_error("number_not_numeric",
- {field => 'version', num => $new_version});
+ || return $self->user_error('number_not_numeric',
+ {field => 'new_version', num => $new_version});
+
+ if ($old_milestone && $old_milestone !~ /^\d+$/) {
+ return $self->user_error('number_not_numeric',
+ {field => 'old_milestone', num => $old_milestone});
+ }
+
+ if ($old_version && $old_version !~ /^\d+$/) {
+ return $self->user_error('number_not_numeric',
+ {field => 'old_version', num => $old_version});
+ }
# Process milestones
my @results;
foreach my $product (@{$self->every_param('milestone_products')}) {
my $success = _add_value($product, $new_milestone, 'milestone');
my $result = {
- type => 'milestone',
+ type => 'new_milestone',
product => $product,
value => _get_formatted_value($product, $new_milestone, 'milestone'),
success => $success
};
push @results, $result;
+
+ if ($old_milestone) {
+ $success = _disable_value($product, $old_milestone, 'milestone');
+ $result = {
+ type => 'old_milestone',
+ product => $product,
+ value => _get_formatted_value($product, $old_milestone, 'milestone'),
+ success => $success
+ };
+ push @results, $result;
+ }
}
# Process versions
foreach my $product (@{$self->every_param('version_products')}) {
my $success = _add_value($product, $new_version, 'version');
my $result = {
- type => 'version',
+ type => 'new_version',
product => $product,
value => _get_formatted_value($product, $new_version, 'version'),
success => $success
};
push @results, $result;
+
+ if ($old_version) {
+ $success = _disable_value($product, $old_version, 'version');
+ $result = {
+ type => 'old_version',
+ product => $product,
+ value => _get_formatted_value($product, $old_version, 'version'),
+ success => $success
+ };
+ push @results, $result;
+ }
}
$self->stash({results => \@results});
@@ -150,9 +186,6 @@ sub _add_value {
{product => $product, value => $new_milestone, sortkey => $sortkey});
return $new_milestone;
}
- else {
- return 0;
- }
}
# Versions are simple in that they do not use sortkeys yet
@@ -162,10 +195,43 @@ sub _add_value {
Bugzilla::Version->create({product => $product, value => $new_version});
return $new_version;
}
- else {
- return 0;
+ }
+
+ return 0;
+}
+
+sub _disable_value {
+ my ($product, $value, $type) = @_;
+ $product
+ = blessed $product
+ ? $product
+ : Bugzilla::Product->new({name => $product, cache => 1});
+
+ if ($type eq 'milestone') {
+ my $old_milestone = _get_formatted_value($product->name, $value, 'milestone');
+
+ if (my $milestone_obj
+ = Bugzilla::Milestone->new({product => $product, name => $old_milestone}))
+ {
+ $milestone_obj->set_is_active(0);
+ $milestone_obj->update();
+ return 1;
}
}
+
+ # Versions are simple in that they do not use sortkeys yet
+ if ($type eq 'version') {
+ my $old_version = _get_formatted_value($product->name, $value, 'version');
+ if (my $version_obj
+ = Bugzilla::Version->new({product => $product, name => $old_version}))
+ {
+ $version_obj->set_is_active(0);
+ $version_obj->update();
+ return 1;
+ }
+ }
+
+ return 0;
}
# Helper function to return a fully formatted version or milestone
diff --git a/qa/t/3_test_new_release.t b/qa/t/3_test_new_release.t
index 505f276f8a..3e506e131d 100644
--- a/qa/t/3_test_new_release.t
+++ b/qa/t/3_test_new_release.t
@@ -52,9 +52,16 @@ $sel->click_ok('link=New Firefox Release');
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->select_ok('milestone_products', 'label=Firefox');
$sel->type_ok('new_milestone', '101');
+$sel->type_ok('old_milestone', '100');
$sel->select_ok('version_products', 'label=Firefox');
$sel->type_ok('new_version', '101');
+$sel->type_ok('old_version', '100');
$sel->click_ok('submit', undef, 'Submit data');
+$sel->title_is('New Firefox Release');
+$sel->is_text_present_ok('Milestone 101 Branch was added to product Firefox.');
+$sel->is_text_present_ok('Milestone 100 Branch was disabled for product Firefox.');
+$sel->is_text_present_ok('Version Firefox 101 was added to product Firefox.');
+$sel->is_text_present_ok('Version Firefox 100 was disabled for product Firefox.');
# Verify that the new milestone and version has been create and the proper sortkey is present
diff --git a/template/en/default/pages/new_release.html.tmpl b/template/en/default/pages/new_release.html.tmpl
index e2799fd225..8b34f824eb 100644
--- a/template/en/default/pages/new_release.html.tmpl
+++ b/template/en/default/pages/new_release.html.tmpl
@@ -17,17 +17,30 @@
[% IF results %]
[% FOREACH type = ['milestone', 'version'] %]
[% type FILTER ucfirst FILTER html %]s Added
+ [% new_type = "new_" _ type %]
[% FOREACH result = results %]
- [% NEXT IF result.type != type %]
+ [% NEXT IF result.type != new_type %]
[% IF result.success %]
[% type FILTER ucfirst FILTER html %] [% result.value FILTER html %]
- added to product [% result.product FILTER html %].
+ was added to product [% result.product FILTER html %].
[% ELSE %]
[% type FILTER ucfirst FILTER html %] [% result.value FILTER html %]
was not added to product [% result.product FILTER html %].
[% END %]
[% END %]
+
[% type FILTER ucfirst FILTER html %]s Disabled
+ [% old_type = "old_" _ type %]
+ [% FOREACH result = results %]
+ [% NEXT IF result.type != old_type %]
+ [% IF result.success %]
+ [% type FILTER ucfirst FILTER html %] [% result.value FILTER html %]
+ was disabled for product [% result.product FILTER html %].
+ [% ELSE %]
+ [% type FILTER ucfirst FILTER html %] [% result.value FILTER html %]
+ was not disabled for product [% result.product FILTER html %].
+ [% END %]
+ [% END %]
[% END %]
[% INCLUDE global/footer.html.tmpl %]
@@ -65,6 +78,14 @@
Milestone will be added in the format of "XXX Branch"
+
+
Disable Old Milestone
+
+
+ Leave blank to not disable old milestone
+
+
Select Products for New Version
@@ -91,6 +112,14 @@
Version will be added in the format of "Firefox XXX"
+