From 84982d8b04f6232d4eaa38fde78e8bfa67d496bb Mon Sep 17 00:00:00 2001 From: Tiago Mello Date: Sun, 19 Feb 2012 15:36:22 -0200 Subject: Bug 722580: Move 'ReviewBoard' and 'Rietveld' BugUrl sub-classes to a new 'MoreBugUrl' extension. r/a=LpSolit --- Bugzilla/BugUrl.pm | 9 +++-- Bugzilla/BugUrl/ReviewBoard.pm | 42 -------------------- Bugzilla/BugUrl/Rietveld.pm | 45 ---------------------- Bugzilla/Hook.pm | 15 ++++++++ extensions/MoreBugUrl/Config.pm | 19 +++++++++ extensions/MoreBugUrl/Extension.pm | 43 +++++++++++++++++++++ extensions/MoreBugUrl/disabled | 0 extensions/MoreBugUrl/lib/ReviewBoard.pm | 42 ++++++++++++++++++++ extensions/MoreBugUrl/lib/Rietveld.pm | 45 ++++++++++++++++++++++ .../user-error-bug_url_invalid_tracker.html.tmpl | 10 +++++ template/en/default/global/user-error.html.tmpl | 3 +- 11 files changed, 181 insertions(+), 92 deletions(-) delete mode 100644 Bugzilla/BugUrl/ReviewBoard.pm delete mode 100644 Bugzilla/BugUrl/Rietveld.pm create mode 100644 extensions/MoreBugUrl/Config.pm create mode 100644 extensions/MoreBugUrl/Extension.pm create mode 100644 extensions/MoreBugUrl/disabled create mode 100644 extensions/MoreBugUrl/lib/ReviewBoard.pm create mode 100644 extensions/MoreBugUrl/lib/Rietveld.pm create mode 100644 extensions/MoreBugUrl/template/en/default/hook/global/user-error-bug_url_invalid_tracker.html.tmpl diff --git a/Bugzilla/BugUrl.pm b/Bugzilla/BugUrl.pm index 99d46bd24..888b11398 100644 --- a/Bugzilla/BugUrl.pm +++ b/Bugzilla/BugUrl.pm @@ -12,6 +12,7 @@ use base qw(Bugzilla::Object); use Bugzilla::Util; use Bugzilla::Error; use Bugzilla::Constants; +use Bugzilla::Hook; use URI::QueryParam; @@ -56,8 +57,6 @@ use constant SUB_CLASSES => qw( Bugzilla::BugUrl::Trac Bugzilla::BugUrl::MantisBT Bugzilla::BugUrl::SourceForge - Bugzilla::BugUrl::ReviewBoard - Bugzilla::BugUrl::Rietveld ); ############################### @@ -121,8 +120,12 @@ sub should_handle { sub class_for { my ($class, $value) = @_; + my @sub_classes = $class->SUB_CLASSES; + Bugzilla::Hook::process("bug_url_sub_classes", + { sub_classes => \@sub_classes }); + my $uri = URI->new($value); - foreach my $subclass ($class->SUB_CLASSES) { + foreach my $subclass (@sub_classes) { eval "use $subclass"; die $@ if $@; return wantarray ? ($subclass, $uri) : $subclass diff --git a/Bugzilla/BugUrl/ReviewBoard.pm b/Bugzilla/BugUrl/ReviewBoard.pm deleted file mode 100644 index 3c1ed56ba..000000000 --- a/Bugzilla/BugUrl/ReviewBoard.pm +++ /dev/null @@ -1,42 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This Source Code Form is "Incompatible With Secondary Licenses", as -# defined by the Mozilla Public License, v. 2.0. - -package Bugzilla::BugUrl::ReviewBoard; -use strict; -use base qw(Bugzilla::BugUrl); - -############################### -#### Methods #### -############################### - -sub should_handle { - my ($class, $uri) = @_; - return ($uri->path =~ m|/r/\d+/?$|) ? 1 : 0; -} - -sub _check_value { - my $class = shift; - - my $uri = $class->SUPER::_check_value(@_); - - # Review Board URLs have only one form (the trailing slash is optional): - # http://reviews.reviewboard.org/r/111/ - - # Make sure there are no query parameters. - $uri->query(undef); - # And remove any # part if there is one. - $uri->fragment(undef); - - # make sure the trailing slash is present - if ($uri->path !~ m|/$|) { - $uri->path($uri->path . '/'); - } - - return $uri; -} - -1; diff --git a/Bugzilla/BugUrl/Rietveld.pm b/Bugzilla/BugUrl/Rietveld.pm deleted file mode 100644 index 9baf85d8d..000000000 --- a/Bugzilla/BugUrl/Rietveld.pm +++ /dev/null @@ -1,45 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This Source Code Form is "Incompatible With Secondary Licenses", as -# defined by the Mozilla Public License, v. 2.0. - -package Bugzilla::BugUrl::Rietveld; -use strict; -use base qw(Bugzilla::BugUrl); - -############################### -#### Methods #### -############################### - -sub should_handle { - my ($class, $uri) = @_; - return ($uri->authority =~ /\.appspot\.com$/i - and $uri->path =~ m#^/\d+(?:/|/show)?$#) ? 1 : 0; -} - -sub _check_value { - my ($class, $uri) = @_; - - $uri = $class->SUPER::_check_value($uri); - - # Rietveld URLs have three forms: - # http(s)://example.appspot.com/1234 - # http(s)://example.appspot.com/1234/ - # http(s)://example.appspot.com/1234/show - if ($uri->path =~ m#^/(\d+)(?:/|/show)$#) { - # This is the shortest standard URL form for Rietveld issues, - # and so we reduce all URLs to this. - $uri->path('/' . $1); - } - - # Make sure there are no query parameters. - $uri->query(undef); - # And remove any # part if there is one. - $uri->fragment(undef); - - return $uri; -} - -1; diff --git a/Bugzilla/Hook.pm b/Bugzilla/Hook.pm index fe4f0860e..17023f8f5 100644 --- a/Bugzilla/Hook.pm +++ b/Bugzilla/Hook.pm @@ -389,6 +389,21 @@ the summary line). =back +=head2 bug_url_sub_classes + +Allows you to add more L sub-classes. + +See the C extension to see how things work. + +Params: + +=over + +=item C - An arrayref of strings which represent L +sub-classes. + +=back + =head2 buglist_columns This happens in L, which determines legal bug diff --git a/extensions/MoreBugUrl/Config.pm b/extensions/MoreBugUrl/Config.pm new file mode 100644 index 000000000..b5af9c00e --- /dev/null +++ b/extensions/MoreBugUrl/Config.pm @@ -0,0 +1,19 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::MoreBugUrl; +use strict; + +use constant NAME => 'MoreBugUrl'; + +use constant REQUIRED_MODULES => [ +]; + +use constant OPTIONAL_MODULES => [ +]; + +__PACKAGE__->NAME; diff --git a/extensions/MoreBugUrl/Extension.pm b/extensions/MoreBugUrl/Extension.pm new file mode 100644 index 000000000..715316585 --- /dev/null +++ b/extensions/MoreBugUrl/Extension.pm @@ -0,0 +1,43 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::MoreBugUrl; +use strict; +use base qw(Bugzilla::Extension); + +use constant MORE_SUB_CLASSES => qw( + Bugzilla::Extension::MoreBugUrl::ReviewBoard + Bugzilla::Extension::MoreBugUrl::Rietveld +); + +# We need to update bug_see_also table because both +# Rietveld and ReviewBoard were originally under Bugzilla/BugUrl/. +sub install_update_db { + my $dbh = Bugzilla->dbh; + + my $should_rename = $dbh->selectrow_array( + q{SELECT 1 FROM bug_see_also + WHERE class IN ('Bugzilla::BugUrl::Rietveld', + 'Bugzilla::BugUrl::ReviewBoard')}); + + if ($should_rename) { + my $sth = $dbh->prepare('UPDATE bug_see_also SET class = ? + WHERE class = ?'); + $sth->execute('Bugzilla::Extension::MoreBugUrl::ReviewBoard', + 'Bugzilla::BugUrl::ReviewBoard'); + + $sth->execute('Bugzilla::Extension::MoreBugUrl::Rietveld', + 'Bugzilla::BugUrl::Rietveld'); + } +} + +sub bug_url_sub_classes { + my ($self, $args) = @_; + push @{ $args->{sub_classes} }, MORE_SUB_CLASSES; +} + +__PACKAGE__->NAME; diff --git a/extensions/MoreBugUrl/disabled b/extensions/MoreBugUrl/disabled new file mode 100644 index 000000000..e69de29bb diff --git a/extensions/MoreBugUrl/lib/ReviewBoard.pm b/extensions/MoreBugUrl/lib/ReviewBoard.pm new file mode 100644 index 000000000..7628dd314 --- /dev/null +++ b/extensions/MoreBugUrl/lib/ReviewBoard.pm @@ -0,0 +1,42 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::MoreBugUrl::ReviewBoard; +use strict; +use base qw(Bugzilla::BugUrl); + +############################### +#### Methods #### +############################### + +sub should_handle { + my ($class, $uri) = @_; + return ($uri->path =~ m|/r/\d+/?$|) ? 1 : 0; +} + +sub _check_value { + my $class = shift; + + my $uri = $class->SUPER::_check_value(@_); + + # Review Board URLs have only one form (the trailing slash is optional): + # http://reviews.reviewboard.org/r/111/ + + # Make sure there are no query parameters. + $uri->query(undef); + # And remove any # part if there is one. + $uri->fragment(undef); + + # make sure the trailing slash is present + if ($uri->path !~ m|/$|) { + $uri->path($uri->path . '/'); + } + + return $uri; +} + +1; diff --git a/extensions/MoreBugUrl/lib/Rietveld.pm b/extensions/MoreBugUrl/lib/Rietveld.pm new file mode 100644 index 000000000..0c52892e2 --- /dev/null +++ b/extensions/MoreBugUrl/lib/Rietveld.pm @@ -0,0 +1,45 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::MoreBugUrl::Rietveld; +use strict; +use base qw(Bugzilla::BugUrl); + +############################### +#### Methods #### +############################### + +sub should_handle { + my ($class, $uri) = @_; + return ($uri->authority =~ /\.appspot\.com$/i + and $uri->path =~ m#^/\d+(?:/|/show)?$#) ? 1 : 0; +} + +sub _check_value { + my ($class, $uri) = @_; + + $uri = $class->SUPER::_check_value($uri); + + # Rietveld URLs have three forms: + # http(s)://example.appspot.com/1234 + # http(s)://example.appspot.com/1234/ + # http(s)://example.appspot.com/1234/show + if ($uri->path =~ m#^/(\d+)(?:/|/show)$#) { + # This is the shortest standard URL form for Rietveld issues, + # and so we reduce all URLs to this. + $uri->path('/' . $1); + } + + # Make sure there are no query parameters. + $uri->query(undef); + # And remove any # part if there is one. + $uri->fragment(undef); + + return $uri; +} + +1; diff --git a/extensions/MoreBugUrl/template/en/default/hook/global/user-error-bug_url_invalid_tracker.html.tmpl b/extensions/MoreBugUrl/template/en/default/hook/global/user-error-bug_url_invalid_tracker.html.tmpl new file mode 100644 index 000000000..e0cf6be8e --- /dev/null +++ b/extensions/MoreBugUrl/template/en/default/hook/global/user-error-bug_url_invalid_tracker.html.tmpl @@ -0,0 +1,10 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +
  • A Review Board review request.
  • +
  • An issue in a Rietveld installation.
  • diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl index fdd2fb980..7408a1a05 100644 --- a/template/en/default/global/user-error.html.tmpl +++ b/template/en/default/global/user-error.html.tmpl @@ -254,8 +254,7 @@
  • A ticket in a Trac installation.
  • A b[% %]ug in a MantisBT installation.
  • A b[% %]ug on sourceforge.net.
  • -
  • A Review Board review request.
  • -
  • An issue in a Rietveld installation.
  • + [% Hook.process('bug_url_invalid_tracker') %] [% ELSIF reason == 'id' %] There is no valid [% terms.bug %] id in that URL. -- cgit v1.2.3-24-g4f1b