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" + + Disable Old Version + + + Leave blank to not disable old version + +